JavaWeb | 验证码 、 文件的“上传”与“下载”

目录:

  • 验证码 和 文件的“上传”与“下载”
    • 1.验证码
      • 1.1在JSP上开发验证码
    • 2.“文件上传” 和 “文件下载”
      • 2.1“文件上传 ”
      • 2.2“文件下载”

验证码 和 文件的“上传”与“下载”

1.验证码

  • 验证码:就是由服务器生成的一串随机数字或符号形成一幅图片,图片应该传给客户端,为了防止客户端用一些程序进行自动识别,在图片中通常需要添加一些干扰因素,由用户用肉眼来识别。
  • 验证码网络投票交友论坛网上商城等业务经常用来防止恶意客户侵入恶意灌水刷票

1.1在JSP上开发验证码

loginForm.jsp

<%@ page language="java" pageEncoding="gb2312" %>
<html>
<head><title>第十三章 loginForm.jsp</title>
</head>
<body>
欢迎登录本系统<br>
<form action="/com/servlets/ValidateServlet" method="post">请输入你的账号: <input type="text" name="account"/><br>请输入你的密码: <input type="password" name="password"/><br>验证码: <input type="text" name="code" size="10"/><br><!-- 当验证码当做图片处理 --><img src="validate.jsp" border=0><input type="submit" value="登录">
</form>
</body>
</html>

web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--  访问到ValidateServlet.java类  -->
<servlet><servlet-name>validateServlet</servlet-name><servlet-class>com.servlets.ValidateServlet</servlet-class>
</servlet><servlet-mapping><servlet-name>validateServlet</servlet-name><url-pattern>/com/servlets/ValidateServlet</url-pattern>
</servlet-mapping>
</web-app>

ValidateServlet.class

/*
验证输入的验证码是否正确
*/
public class ValidateServlet extends HttpServlet { //用来验证表单登录的servletprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//得到提交的验证码String code = request.getParameter("code");//获取session中的验证码HttpSession session = request.getSession();String randomStr = (String)session.getAttribute("randomStr"); //获取存储在session中的验证码response.setCharacterEncoding("gb2312");PrintWriter out = response.getWriter();//判断输入的验证码和生成的验证码是否相等if (!code.equals(randomStr)) {out.println("验证码错误!"); //在页面上显示} else {out.println("验证码正确!跳转到LoginServlet...");}}
}

validate.jsp

<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="java.awt.*" %>
<%@ page import="java.util.Random" %>
<%@ page import="javax.imageio.ImageIO" %>
<%@ page contentType="text/html;charset=gb2312" language="java" %>
<html>
<head><title>第十三章 validate.jsp</title>
</head>
<body>
<%response.setHeader("Cache-Control","no-cache");int width = 60;int height = 20;//1.实例化cBufferImage 对象BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//2.从BufferImage中获取画笔Graphics类对象Graphics g = image.getGraphics();//设置画笔的属性g.setColor(new Color(200,200,200)); //设置颜色 / 设置背景颜色g.fillRect(0, 0, width, height); //设置生成的图片为长方形//3.生成随机数(4位数字)Random random = new Random();//这个随机数没有“种子”,用默认种子int randomNum  = random.nextInt(8999) +100; //左闭右开//转换为字符串String randomStr = String.valueOf(randomNum);//存入Session中session.setAttribute("randomStr",randomStr);//将验证码显示在图像中//用画笔画出干扰线和干扰电g.setColor(Color.black);g.setFont(new Font("", Font.PLAIN, 20));g.drawString(randomStr,10,17);//产生干扰点for (int i = 0; i < 100; i++) {int x = random.nextInt(width);int y = random.nextInt(height);g.drawOval(x,y,1,1);//干扰点为一个一个圆}//输出图像到页面response.setContentType("image/jpeg");ImageIO.write(image, "JPEG", response.getOutputStream());out.clear();out = pageContext.pushBody();
%>
</body>
</html>

loginForm_refresh.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>第十三章: loginForm_refresh.jsp</title>
</head>
<body>
<%-- 具有刷新验证码功能的loginForm页面 --%>
<%-- 重新刷新验证码--%>
<script>function refresh() {//当点击验证码图片时就重新刷新img标签中的url//让url后面带一个随机数参数,来让每次访问的路径不一样,得到的验证码也不一样loginForm.imgValidate.src = "validate.jsp?id=" + Math.random() +";"}
</script>
欢迎登录本系统<br>
<%-- action中访问的为web.xml 中servlet标签中的 url --%>
<form name="loginForm" action="/com/servlets/ValidateServlet" method="post">请输入你的账号: <input type="text" name="account"/><br>请输入你的密码: <input type="password" name="password"/><br>验证码: <input type="text" name="code" size="10"/><br><!-- 当验证码当做图片处理 ,为该img标签添加"点击事件",让它被点击时,刷牙验证码--><img name = "imgValidate" src="validate.jsp"  οnclick="refresh()" border=0><input type="submit" value="登录">
</form>
</body>
</html>

2.“文件上传” 和 “文件下载”

2.1“文件上传 ”

  • Java Web应用开发中,文件的上传必不可少的,如上传简历、上传图片、上传资源代码等。
  • 要实现文件上传,要导入 : jspsmart文件上传包

fileTest.jsp

<%@ page  language="java" import="java.util.*" pageEncoding="gb2312" %>
<html>
<head><title>第十三章 文件上传: fileTest.jsp</title>
</head>
<body>
<form method="post" name="upload">
请你选择一个文件进行上传:<input type="file" name="myFile"><br><input type="submit" value="上传"><br>
</form>
</body>
</html>

web.xml

     <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>uploadServlet</servlet-name><servlet-class>com.servlets.UploadServlet</servlet-class>
</servlet><servlet-mapping><servlet-name>uploadServlet</servlet-name><url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
</web-app>

UploadServlet.java

public class UploadServlet extends HttpServlet { //关于文件上传的Servlet类@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//创建SmartUpload对象,其负责文件的上传SmartUpload smartUpload = new SmartUpload();//初始化SmartUpload对象//获得ServletConfig对象ServletConfig config = this.getServletConfig();smartUpload.initialize(config, request, response);try {//上传文件--调用.upload()方法上传文件smartUpload.upload();//获得上传的文件File file = smartUpload.getFiles().getFile(0);//保存文件file.saveAs("/S:/aaa/"+file.getFileName(),smartUpload.SAVE_PHYSICAL); //这个是存储在S盘中(物理路径存储)//file.saveAs("/img/"+file.getFileName(),smartUpload.SAVE_VIRTUAL);} catch (SmartUploadException e) {e.printStackTrace();}//上传成功了,保存成功上传的信息String msg = "Upload Success!";request.setAttribute("msg", msg);RequestDispatcher rd = request.getRequestDispatcher("/upload/第十三章/文件上传/uploadForm.jsp"); //上传完之后又回来点击内容进行上传的页面rd.forward(request, response);}
}

2.2“文件下载”

download2.jsp

  • <%@ page  language="java" pageEncoding="GB2312" import="java.util.*" %>
    <html>
    <head>
    <title>第十三章 文件下载: download2.jsp</title>
    </head>
    <body>
    文件下载
    <hr>
    <a href="/第十三章/文件下载/download.jsp?filename=java.jpg">下载</a>
    </body>
    </html>
    

    download.jsp

  • <%@ page  language="java" pageEncoding="gb2312" import="java.util.*" %>
    <html>
    <head><title>文件下载: download.jsp</title>
    </head>
    <body>
    <%String filename = request.getParameter("filename"); //获得url传参传递过来的参数//告诉客户端出现下载框,并指定下载框中的文件名response.setHeader("Content-Disposition","attachment;filename="+filename);//指定文件的类型response.setContentType("image/jpeg"); //jpeg//指定文件RequestDispatcher rd = request.getRequestDispatcher("/S:/aaa/"+filename);//rd.forward(request,response);
    %>
    </body>
    </html>
    
  • 此处给出常见文件对应的contentType类型,主要包括以下几种:

bmp : “application/x-bmp”;

doc: “application/msword”;

exe: “application/x-msdownload" ;

jpg: “image/jpeg" ;

mdb: “application/ msaccess”;

mp3: " audio/mp3”

pdf:”application/pdf";

ppt:”application/ vnd. ms-powerpoint";

rm:”application/vnd. rn- realmedia";

rmvb: “application/vnd. rn-realmedia-vbr”;

swf: “application/ x-shockwave-flash”;

xIs: “application/vnd. ms-excel”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线地图叠加WMS服务,配合WFS数据服务实现图层叠加,属性查看功能

在线地图叠加WMS服务&#xff0c;配合WFS数据服务实现图层叠加&#xff0c;属性查看功能 实现思路实现方式备注&#xff1a;计算bbox参数值网上还提供了以下方式 实现思路 根据WFS服务参数可以看出&#xff0c;一种是空间查询&#xff08;一定范围内的数据查询&#xff09;、还…

微服务的流量管理-服务网格

对于单体应用来说&#xff0c;一般只有流入和流出两种流量。而微服务架构引入了跨进程的网络通信&#xff0c;流量发生在服务之间。由许多服务组成了复杂的网络拓扑结构&#xff0c;每次请求都会产生流量。 这些流量如果没有妥善的管理&#xff0c;整个应用的行为和状态将会不…

全局变量为什么没有野指针

全局变量为什么没有野指针&#xff1f; 全局变量是指在程序的任何地方都可以访问的变量&#xff0c;它们通常存储在静态内存区域&#xff0c;也称为数据段。野指针是指指向非法或不可用内存地址的指针&#xff0c;它们可能会导致内存泄漏、程序崩溃或数据损坏。 全局变量没有野…

封装Servlet使用自定义注解进行参数接收

文章目录 前言一、前后对比✨二、具体实现&#x1f387;三、效果展示&#x1f38f; 前言 先说项目背景&#xff0c;本项目是本人在校期间老师布置的作业&#xff08;就一个CRUD&#xff09;&#xff0c;课程是后端应用程序设计&#xff0c;其实就是servlet和jsp那一套&#xf…

【c】课程满意度计算

我们不好直接比较二维数组中任意多个元素的值是否相等&#xff0c;我们可以创建一维数组&#xff0c;首先将一维数组的值全部设为0&#xff0c;一维数组的下标代表你喜欢课程的量&#xff0c;一维数组的各个元素的值代表你喜欢的次数 例如 你输入3 5&#xff0c;代表你喜欢第三…

好用的挂耳式蓝牙耳机有哪些?分享几款热门好用的蓝牙耳机

挂耳式蓝牙耳机已经成为我们日常生活中的一部分&#xff0c;无论是在通勤、运动还是日常休闲时&#xff0c;它们都发挥着不可替代的作用&#xff0c;随着技术的不断进步&#xff0c;挂耳式蓝牙耳机的音质、连接稳定性以及续航时间都有了显著的提升&#xff0c;下面&#xff0c;…

纯C读取文件实现解析H264裸流每一帧数据

最近研究硬解解码&#xff0c;需要解码H264流文件。 imx的例程是设置一个大的缓冲区&#xff0c;一次性读入不超过10M字节数据&#xff0c;然后全部送到解码器进行解码&#xff0c;对于小于10M字节的视频数据确实很方便的解码了&#xff0c;但是文件大了这种方式就不行了。 如果…

【C++初阶】六、类和对象(初始化列表、static成员、友元、内部类)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【C初阶】五、类和对象 &#xff08;日期类的完善、流运算符重载函数、const成员、“&”取地址运算符重载&#xff09;-CSDN博客 目录 ​​​​​​​一 . 初始化列表 构造函数…

三分钟快速了解Python中的判断语句!

三分钟快速了解Python中的判断语句&#xff01; 在Python中&#xff0c;判断语句用于根据条件执行不同的代码块。Python提供了两种类型的判断语句&#xff1a;if语句和if-else语句。本文将详细介绍这两种判断语句的用法&#xff0c;并通过实例代码进行演示。 一、if语句 if语…

06 g2o 学习

文章目录 06 g2o 学习6.1 概念6.2 框架简介6.3 代码示例 06 g2o 学习 6.1 概念 g2o(General Graphic Optimization)是基于图优化的库。图优化是把优化问题表现成图的一种方式。一个图由若干个顶点(Vertex)&#xff0c;以及连接这这些顶点的边(Edge)组成。用顶点表示优化变量&…

【python】——函数

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

P8 删除链表指定节点

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f4…

【灵魂 |数据结构与算法】 数据结构必备经法(开山篇),一起修炼算法经法!

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Go to do list

go 语言中怎么实现分布式系统&#xff1f; 在Go语言中实现分布式系统需要考虑以下几个方面&#xff1a; 通信协议&#xff1a;在分布式系统中&#xff0c;各个节点需要通过网络进行通信。Go语言提供了丰富的网络编程库&#xff0c;如net/http、net/rpc等&#xff0c;可以方便…

Python-错误与异常处理

在 Python 中&#xff0c;错误和异常处理是编写健壮程序的重要组成部分。下面是一些关于错误和异常处理的基本知识&#xff1a; 错误&#xff08;Errors&#xff09;和异常&#xff08;Exceptions&#xff09;&#xff1a; 错误&#xff1a; 错误是程序的语法或逻辑错误&#…

【Qt】QDialog的成员函数exec()的返回值

2023年12月4日&#xff0c;周一上午 目录 返回值有哪些 怎么给QDialog的按钮设置按下后让exec()返回QDialog::Accepted或QDialog::Rejected呢&#xff1f; 返回值有哪些 QDialog::exec()函数在Qt中是用于显示对话框的一种方法&#xff0c;它会阻塞调用线程&#xff0c;直到用…

LeetCode463. Island Perimeter

文章目录 一、题目二、题解 一、题目 You are given row x col grid representing a map where grid[i][j] 1 represents land and grid[i][j] 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounde…

基于Springboot的秒杀系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的秒杀系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xf…

Inno Setup使用

功能需要&#xff0c;出一个安装包并写入相关的注册表&#xff0c;在此整理了注册表启动项相关的参考文档。多个资料整合在了一起。 [Registry] Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#M…

【开源】基于Vue和SpringBoot的音乐偏好度推荐系统

项目编号&#xff1a; S 012 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S012&#xff0c;文末获取源码。} 项目编号&#xff1a;S012&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…