JavaWeb程序设计 课件 ch13 验证码和文件上传下载、ch14 MVC 和 Struts2 基本原理_第1页
JavaWeb程序设计 课件 ch13 验证码和文件上传下载、ch14 MVC 和 Struts2 基本原理_第2页
JavaWeb程序设计 课件 ch13 验证码和文件上传下载、ch14 MVC 和 Struts2 基本原理_第3页
JavaWeb程序设计 课件 ch13 验证码和文件上传下载、ch14 MVC 和 Struts2 基本原理_第4页
JavaWeb程序设计 课件 ch13 验证码和文件上传下载、ch14 MVC 和 Struts2 基本原理_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章验证码和文件上传下载本课教学内容使用JSP验证码验证码开发认识文件上传实现文件上传文件下载使用JSP验证码验证码有什么作用呢?假想系统没有验证码,直接通过用户名和密码登录,那么就有能有恶意的用户不停输入用户名和密码进行登录试探,或者他使用一个输入程序(俗称机器人程序)不停登录,有理由相信总有一天他是能够破解密码的,就可以使用别人的账号了。或者即使他没有破解,只是不停的在登录,服务器每次都会验证数据库,也会严重的降低服务器的效率,导致其他人不能使用。但是有了验证码之后,就可以避免这种现象使用JSP验证码每登录一次服务器,客户都需要提供一次验证码,而验证码每次都是不同的。所以很难使用机器人程序反复登录,因为机器人程序无法认识验证码。这就是验证码强大的功能所在使用JSP验证码所谓验证码,就是由服务器产生的一串随机数字或符号,形成一幅图片,图片应该传给客户端,为了防止客户端用一些程序来进行自动识别,图片中通常要加上一些干扰象素,由用户肉眼识别其中的验证码信息。客户输入表单提交时,验证码也提交给网站服务器,只有验证成功,才能执行实际的数据库操作使用JSP验证码验证码必须满足以下几个性质:1.不同的请求,得到的验证码应该是随机的,或者是无法预知的,必须由服务器端产生使用JSP验证码验证码必须满足以下几个性质:2.验证码必须通过人眼识别,而通过图像编程的方法编写的机器人程序在客户端运行,几乎无法识别。这就是验证码都比较歪斜或者模糊的原因,否则就很容易通过图像处理算法来识别使用JSP验证码验证码必须满足以下几个性质:3.除了人眼观察之外,客户端无法通过其他手段获取验证码信息。这就是验证码为什么用图片,而不是直接用一个数字文本在页面上显示的原因,因为客户端可能通过访问网页源代码的方式获取验证码的内容使用JSP验证码验证码的工作流程如下:1.服务器端随机生成验证码字符串,保存在session中,并写入图片,将图片连同表单发给客户端。使用JSP验证码验证码的工作流程如下:2.客户端输入验证码,并提交,服务器端获取客户提交的验证码,和前面产生的随机验证码字符串相比较;如果相同,则继续进行表单所描述的操作(如登录、注册等);如果不同,直接将错误信息返回给客户端。避免程序的继续运行以及访问数据库验证码开发在JSP上开发验证码步骤如下:实例化java.awt.image.BufferedImage类。它的作用是访问图像数据缓冲区,或者说对所要绘的图片对象进行访问

BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);验证码开发在JSP上开发验证码步骤如下:从BufferedImage中获取Graphics类对象(画笔),并设定相关属性。

Graphicsg=image.getGraphics(); Graphics提供了对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。 g.setColor(Colorcolor);//设置颜色g.fillRect(int,int,int,int);//设置生成的图片为长方形验证码开发在JSP上开发验证码步骤如下:产生4位数随机数,并将其存入session中。 //产生随机数

Randomrnd=newRandom(); intrandNum=rnd.nextInt(8999)+1000; StringrandStr=String.valueOf(randNum);session.setAttribute("randStr",randStr);验证码开发在JSP上开发验证码步骤如下: 用画笔画出随机数和干扰点。

g.setColor(Color.black); g.setFont(newFont("",Font.PLAIN,20)); g.drawString(randStr,10,17); //随机产生100个干扰点,使图象中的验证码不易被其他程序探测到for(inti=0;i<100;i++){ intx=rnd.nextInt(width);inty=rnd.nextInt(height);g.drawOval(x,y,1,1);}验证码开发在JSP上开发验证码步骤如下:

输出图像 //输出图象到页面

ImageIO.write(Imageimage,"JPEG",response.getOutputStream());验证码开发在JSP上开发验证码步骤如下:清除缓冲区

out.clear(); out=pageContext.pushBody();生成验证码具体代码示例见课本实现验证码刷新当用户看不清楚的时候可以通过刷新实现重新生成验证码。验证码的刷新技术有很多种,一般使用JavaScript刷新验证码,最方便的方法是,点击验证码图片,获得新的验证码用验证码进行验证具体代码示例见课本认识文件上传在JavaWeb应用开发中,文件的上传是必不可少的功能,例如上传简历、上传图片、又或者是上传源代码等

提到实现文件上传,最传统而且最常被用到的莫过于文件上传控件:<inputtype="file">。下面,利用简单例子介绍<inputtype=“file”>控件的用法。认识文件上传文件上传的本质,其实就是把客户端本地计算机的文件保存到网站服务器中,当然,此时不能简单用request.getParameter()方法来获得文件的数据实现文件上传文件上传包jspsmart文件上传包功能强大却非常易用,只需几行代码就可以实现文件的上传功能。另外,其还可以对上传过程进行监控,对文件的大小以及类型作出限制。首先,需要在网上下载jspsmart文件上传包,下载后解压,里面会是一个jar包,使用的时候将其拷贝到项目的lib文件夹下即可。本例中提供的是jsmartcom_zh_CN.jar实现文件上传jsmartcom_zh_CN.jar中提供了很多API,其中比较重要的有以下几个:com.jspsmart.upload.SmartUploadcom.jspsmart.upload.SmartUpload负责进行文件上传,其具有几个重要API:实现文件上传SmartUpload.initialize(ServletConfig,HttpServletRequest,HttpServletResponse):在进行上传之前,需要进行初始化,传入当前Servlet的ServletConfigHttpServletRequest和HttpServletResponse参数SmartUpload.upload():实现上传SmartUpload.getFiles():获取上传的所有文件对象SmartUpload.getFiles().getFile(i):获取上传的第i对象,返回com.jspsmart.upload.File实现文件上传jsmartcom_zh_CN.jar中提供了很多API,其中比较重要的有以下几个:

com.jspsmart.upload.File

com.jspsmart.upload.SmartUpload负责进行文件上传,其具有以下重要API:实现文件上传File.getFileName():得到文件名File.getFilePathName():得到文件路径全名File.saveAs(String,int):将文件进行保存,参数1是保存的路径,参数2是保存的方式实现文件上传具体代码示例见课本文件下载相信是JavaWeb应用程序中最常见的功能之一。通过文件下载的功能,可以分享到任何自己喜欢的资源。文件下载很简单,最常见的情况,只需要将链接目标指向下载文件即可。关于文件的下载,存在一个重要的问题,那就是下载文件直接出现下载框。文件下载文件下载具体代码示例见课本本章结束本章总结使用JSP验证码验证码开发认识文件上传实现文件上传文件下载课后习题第14章MVC和Struts2基本原理本课教学内容MVC模式Struts2简介Struts2的基本原理Struts2的基本使用方法其他问题MVC和Strut2s基本原理MVC模式 MVC(Model、View、Controller),是软件开发过程中比较流行的设计思想。在了解MVC之前,首先要明确一点,MVC是一种设计模式(设计思想),不是一种编程技术MVC模式MVC思想:

编写JSP,负责输入查询代码,提交到Servlet,Servlet进行安全验证,调用Dao来访问数据库,得到结果,跳转到JSP显示MVC思想MVC思想如图MVC思想工作步骤为:用户在表单中输入,表单提交给Servlet,Servlet验证输入,然后实例化JavaBeanJavaBean查询数据库,查询结果暂存在JavaBean中Servlet跳转到JSP,JSP使用JavaBean,得到它里面的查询结果,并显示出来Struts2简介因为要对MVC模式来进行标准化,让程序员在某个标准下进行开发。很多人致力于这个工作,并且发布了一些框架,Struts就是这样一个框架,在使用的过程中,受到了广泛的承认。可以说,Struts是为了规范MVC开发而发布的一个框架。大多数框架的版本改进,一般是在原有的基础上增加功能或者进行优化,而Struts2不单如此。Struts2简介Struts2是Struts的下一代框架,并不是新发布的新框架,但是它是另一个非常流行的框架:WebWork基础上发展起来的。可以说,Struts2和WebWork非常类似。并且Struts2吸收了Struts1和WebWork两者的优势,因此也是一个非常优秀的框架Struts2简介Struts2和Struts1具有一些不同点,主要集中在以下方面:1. Action类的编写:在Struts1中,Action类一般继承基类org.apache.struts.action.Action。而在Struts2中,Action类可以实现一个Action接口,也可实现其他接口,也可以继承ActionSupport基类,甚至不需要实现任何接口,只编写execute函数即可Struts2简介2.Action的运行模式:Struts1中,Action是单态的,系统实例化一个对象来处理多个请求,为每个请求分配一个线程,在该线程中运行execute函数。因此,在开发时需要特别小心,Action资源必须是线程安全的或同步的。但是,Struts2中,Action为每一个请求产生一个实例,不会产生线程安全问题。但是,系统又能够及时回收垃圾资源,不会有废弃空间的问题Struts2简介3.

对Web容器的依赖:Struts1中,Action的execute函数内,传入了ServletAPI:HttpServletRequest和HttpServletResponse,使得测试必须依赖于Web容器。但是,在Struts2中,可以不传入HttpServletRequest和HttpServletResponse,但是也可以访问它们,因此,Action不依赖于容器,允许Action脱离容器单独被测试Struts2简介4.对表单数据的封装:Struts1中,使用ActionForm来封装表单数据,所有的ActionForm必须继承org.apache.strtus.action.ActionForm,有可能造成ActionForm类和VO类重复编码。但是,Struts2中,直接在Action中编写表单数据相对应的属性,可以不用编写ActionForm,而这些属性又可以通过Web页面上的标签访问Struts2的基本原理环境配置要编写基于Struts2的应用,需要导入一些支持的包,也就是Struts2开发包。这些开发包可以到网上去下载。下载地址为:/Struts2的基本原理在Struts2中,常用的的组件有:FilterDispatcher过滤器、JSP、Action、JavaBean、配置文件等。对于一个动作,其执行步骤为:1.用户输入,JSP表单的请求被FilterDispatcher截获Struts2的基本原理2.FilterDispatcher将表单信息转交给Action,并封装在Action内3.Action来调用JavaBean(DAO)4.Action返回要跳转到的JSP页面逻辑名称给框架5.框架根据逻辑名称找到相应的网页地址,进行跳转,结果在JSP上显示Struts2的基本使用方法

该部分内容使用实际案例进行讲解。在学生管理系统中,用户输入账号密码进行登录,如果登录成功,就跳转到成功页面,否则跳转到失败页面。为了简便起

见,认为账号密码相等就登录成功。Struts2的基本使用方法导入Struts2

将右边几个包拷贝到项目中WEB-INF中的lib目录下:然后配置web.xml文件编写JSP*具体代码示例详见课本编写并配置ActionForm在Struts1.x中,必须要单独建立一个ActionForm类,而在Struts2中ActionForm和Action已经合二为一了。因此,只需要将和表单元素同名的属性编写到Action内。编写并配置ActionFormLoginAction没有继承任何类,它有属性account和password,与login.jsp中的表单元素account与password必须同名编写并配置ActionStruts2中,既然Action和ActionForm合二为一,Action是负责业务逻辑的,所以必须编写业务逻辑代码。下面来加强Action的功能。要能够处理业务逻辑,必须要满足一个规范,那就是:编写execute方法来处理业务逻辑。注意,不是重写,是编写。并且该方法不需要有任何的参数编写并配置Action编写execute方法,是因为Action接收数据后,由框架自动调用它的execute方法,该方法的运行,在底层通过反射机制进行。execute的格式为:

publicStringexecute(){}该函数返回一个字符串,表示的是目标页面的虚拟名称编写并配置Action配置文件<struts><packagename="struts2"extends="struts-default"> <actionname="login"class="prj14.LoginAction"> <resultname="success">/loginSuccess.jsp</result> <resultname="fail">/loginFail.jsp</result> </action> </package> </struts>编写并配置Action从以上配置可以看出,在<struts>标签中可以有多个<package>,名称任意,但不要重名;extends属性表示继承一个默认的配置文件"struts-default",一般都继承于它,可以不用修改。<action>标签中的name属性表示Action被提交时的路径,class指定动作类路径测试*具体代码测试效果图见课本其他问题程序运行流程 login.jsp中的表单提交到的地址为"/Prj14/login.action",被org.apache.struts2.dispatcher.FilterDispatcher截获,框架把提交的地址的项目名称和扩展名".action"去掉,变为"/login",读取配置文件其他问题在配置文件中,根据"/login",找到配置文件中的action对应的类,从而得到要提交到的类LoginAction;在LoginAction中,实例化对象,将account和password封装进去其他问题框架调用LoginAction的execute方法,处理后返回一个字符串框架根据字符串内容,在配置文件中找到相应的页面,并跳转其他问题Action生命周期框架先实例化LoginAction对象,然后调用LoginAction的setAccount函数,封装表单数据,然后调用execute函数,进行处理在第二次提交时,LoginAction会重新实例化,说明每一个LoginAction对象都服务一个请求,这和Servlet的原理是不一样的其他问题在Action中访问Web对象获得request对象的方法是:

importorg.apache.struts2.ServletActionContext; publicStringexecute()throwsException{

HttpServletRequestrequest=ServletActionContext.getRequest(); //使用request

}其他问题在Action中访问Web对象获得re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论