关键技术jsp与jdbc应用详解_第1页
关键技术jsp与jdbc应用详解_第2页
关键技术jsp与jdbc应用详解_第3页
关键技术jsp与jdbc应用详解_第4页
关键技术jsp与jdbc应用详解_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第 6 章Servlet 技术Servlet 是在 JSP 之前产生的一种在服务器端运行的 Java 技术,与 JSP 有着密切的关系。它是一种 Java 编程语言类,用来扩展通过响应请求编程模型服务应用程序的服务器功能。Servlet 技术是 Java 动态 Web 技术的基础,将 Java 程序编译成字节码,然后在 Web 容器中运行。由于 Java 是跨具有可移植性。的语言,能够支持“一次编写,到处运行”,因此基于 Java 技术的 Servlet 也本章目标:了解 Servlet 的基础知识和编写 Servlet 的 API熟练掌握 Servlet 的编写过程熟练掌握 Servlet

2、在实际开发中的作用熟练掌握 MVC 框架及实际应用6.1Servlet 基础在讲解 Servlet 编程之前,先对 Servlet 的基础进行讲解。在本节中将来了解一下 Servlet 的作用和技术特点,Servlet 和 JSP 之间的区别和联系,以及 Servlet 的生命周期等问题,这些都是学习 Servlet 编程的必要条件。6.1.1Servlet 技术功能Servlet 技术的主要功能是可以交互式地浏览和修改数据,生成动态 Web 内容。执行过程:首先客户端发送请求到服务器端,服务器端将收到的请求到 Servlet 程序。在 Servlet程序执行定义的操作后,将生成的响应内容返回

3、给服务器端,从而服务器端将响应内容返回给客户端。Servlet 技术更具体的功能是可以处理 HTTP 请求,负责传递 HTTP 响应到客户端;处理HTML 中表单产生的数据,包括 get 和t 数据;并发处理多个请求(在聊天室等需要同步请求的开发中经常使用到)。此外 Servlet 还可以将请求转发给其他的服务器和 Servlet,从而可以在镜像内容相同的几个服务器之间平衡负载。随着网络业务的增大,该技术越来越受到人们的重视。在 Servlet 的开发中,开发可以定义彼此之间共同工作的激活,每个是一个Servlet,而且者能够在这些 Servlet 之间传送数据。6.1.2Servlet 技术

4、特点在目前实际应用中有很多在服务器端的 CGI 开发语言和类似于 CGI 的开发语言,Servlet和这些语言相比有很多突出的优点,这也是 Servlet 能够广泛应用的原因。Servlet 不但可以直接和 Web 服务器交互,还可以和数据库、文件等资源进行交互,从而更好地完成任务,返回给客户端响应内容。Servlet 的执行效率非常高,因为在每次请求时,并不会为每一个请求重新启动 Servlet。这在传统的 CGI 语言中是很难实现的。Servlet API 的规范非常完善,从而使得 Servlet 可以在主流服务器中直接或者通过必要的插件进行运行。6.1.3Servlet 与 JSP 的区

5、别Servlet 是一种运行在服务器端的Java 程序,是在 JSP 之前就已经具有的。而 JSP 是在Servlet的基础上由 Sun 公司推出的应用于 Web 开发的技术。虽然 Servlet 和 JSP 存在很多联系,但是它们之间也有很大区别。Servlet 和 JSP 的编程方式不同。Servlet 严格遵循 Java 语言的编程标准,而 JSP 则是遵循脚本语言的编程标准。读过 Servlet 程序的读者会发现,Servlet 程序要比 JSP 程序难理解。JSP 是为了简化 Servlet 编程而开发的技术,从而 JSP 在程序的编写方面比 Servlet 容易。由于 JSP 是在

6、 Servlet 的基础上开发出来的,所以运行 JSP 时,并不需要编译,而是由容器自动将 JSP 翻译为 Servlet 进行编译。而 Servlet 在运行之前必须进行编译。由于 Java 的技术特点,在第一次运行时,JSP 的运行速度要比 Servlet 慢。这是因为 JSP 第一次运行时需要编译成 Servlet。如果 JSP 没有发生变化,在以后的运行中速度是一样的。因为都是直接运行,不再需要编译。6.1.4Servlet 的生命周期Servlet 的生命周期简单的可分为 Servlet 的初始化、Servlet 的执行和 Servlet 的结束。在 Servlet 中使用 init

7、()方法来初始化 Servlet。Init()方法有两种类型,一种是不带任何参数;另一种是带有 ServeltConfig 参数,使用该方法通常用于打开共享资源。需要注意的是,init()方法在生命周期中只能被调用一次。初始化 Servlet 后,根据请求就可以执行 Servlet,此时调用 Servlet 的 service()方法。Service()方法又拆分为多个方法来完成特定操作。Service()方法通常具有两个参数,ServletRequest 和ServletResponse。前者表示客户端请求的信息,后者表示服务器端响应的信息。170最后就是对 Servlet 的销毁,该步是通

8、过 destroy()方法来完成的。和初始化一样,destroy()方法在生命周期中也只能被调用一次。该方法主要完成关闭共享资源和清除资源等操作。6.2Servlet 编程常用接口和类由于 Servlet 是由开发接口或类。本节将来学编写的 Java 类,所以在 Servlet 的编写中必然要用到已经定义的Servlet 开发中经常要用到的一些接口和类,这里只给出其中一部分,在以后的学习中如果出现新的接口或类会单独进行讲解。6.2.1Servlet 接口Servlet 接口是所有 Servlet 必须直接或者间接实现的接口。在 Servlet 接口中定义了 Servlet周期中的所有方法,如表

9、 6-1 所示。表 6-1 Servlet 接口方法6.2.2HttpServlet 类HttpServlet 类是针对使用 HTTP 中 Web 服务器的 Servlet 类。应用程序特定的 Servlet 类扩展了 HttpServlet 类,用来处理 HTTP 请求和生成 HTTP 响应。应用程序特定类需要覆盖掉一个或者几个 HttpServlet 方法。HttpServlet 类的子类可以实现表 6-2 方法中的任意一个。表 6-2 HttpServlet 类方法在这些方法中,doGet()和 dot()方法是最常用的。在自己编写的 Servlet 类中也通常只覆171方法作用void

10、 doGet (HttpServletRequest request, HttpServlet Response response) throws Servlet Exception ,IOException该方法用于支持 HTTP Get 请求。输入参数、HTTP 报头和输入流可分别从 request 对象、response 头标和 response 对象的输出流中获得void do t (HttpServletRequest request, HttpServlet Response response) throws Servlet Exception ,IOException该方法用于支

11、持 HTTPt 请求。输入参数、HTTP 报头和输入流可分别从 request 对象、response 头标和 response 对象的输出流中获得void doPut (HttpServletRequest request, HttpServlet Response response) throws Servlet Exception ,IOException该方法用于支持 HTTP Put 请求。请求的 URI被载入的文件位置void dete (HttpServletRequest request, HttpServlet Response response) throws Servle

12、t Exception ,IOException该方法用于支持 HTTP Delete 请求。请求的 URI资源被删除方法作用void init(ServletConfit config)throws ServletException在 Servlet 被载入后和提供服务前由 Servlet 引擎进行调用一次,初始化 Servlet。该方法可能抛出 UnavailableException 异常,抛出后 Servlet 将退出服务ServletConfig getServletConfig()获取 Servlet 配置的相关信息void serviervletRequest request,S

13、ervletResponse response) throws ServletException,IOExceptionServletRequest 表示客户端请求的信息,ServletResponse 表示服务器端响应的信息。该方法是 Servlet 的执行方法String getServletInfo()获取 Servlet 信息void destory()销毁 Servlet 信息盖这两个方法。6.2.3HttpServletRequest 接口HttpServletRequest 接口扩展于 ServletRequest 接口。在 JSP 中学习的 request 内置对象就是 Htt

14、pServletRequest 的实例,所以该接口也就有 request 内置对象的所有方法,例如获取头部信息的方法。HttpServletRequest 接口中最常用的方法是获得请求中的参数,即客户端表单中的数据。使用最多的就是 getParameter()方法,面学习 request 内置对象时,就经常使用该方法获取用户在表单中输入的信息。此外还有一个 getParameterValues()方法,使用该方法可以获取一个所得值组成的数组,这面的学习中已使用过。HttpServletRequest 接口还可以获取由客户端传送的方法、客户端正在使用的通信协议、产生请求并且接收请求的服务器端主机

15、名以及 IP 地址等信息,获取这些信息在 HttpServletRequest接口中都各自对应的方法。可以参照 request 内置对象的方法来学习这些方法。6.2.4HttpServletResponse 接口JSP 中的 response 内置对象是一个 HttpServletResponse 接口实例。HttpServletResponse 接口代表的是从服务器端发出的响应。该接口的方法和 response 内置对象的方法一样,都能够使用add()方法来操作对象,使用 sendRedirect()方法进行页面跳转的操作。可以参照response 内置对象的方法来学习这些方法。6.3Ser

16、vlet 开发面的学习中已经对 Servlet 的基础知识进行了介绍,从这节开始就来学习 Servlet 编程。Servlet 的编写比 JSP 的编写要难一些,因为 Servlet 是纯 Java 程序。但是有了前面学习 JSP 的基础,再学习 Servlet 是很容易的,在后面的学习中会经常看到很多与 JSP 相似的地方。6.3.1Servlet 的创建自己编写的 Servlet 要继承 HttpServlet 类,通常使用其中的 do看一个简单的 Servlet 的程序。t()和 doGet()方法。先来172package ms; import java.io.*;import jav

17、ax.servlet.*; import javax.servlet.http.*;public class myOrvlet extends HttpServletpublic void dot(HttpServletRequest request,HttpServletResponse response)throws IOException在本程序中,首先要使用 import 导入相关包,其中 HttpServlet 类、HttpServletRequest 接口和 HttpServletResponse 接口都在 javax.servlet.http.*包中。在该 Servlet 中实现

18、的业务功能很容易,即向客户端发送一个 HTML 页面的信息。编写完 Servlet 程序后,首先要进行编译,产生.class 文件。然后将.class 文件放置在WEB-INFclasses 目录中,通常情况下是将 Servlet 程序放在该目录下,在编译后自动生成一个包,在其中放置.class 文件。这时还是不可以运行,还需要对 Servlet 进行配置。6.3.2Servlet 的配置对 Servlet 编写和编译后,要想启动 Servlet 服务,需要在 web.xml 文件中对该 Servlet 进行配置。在 web.xml 文件中可以配置该 Servlet 的名字、类、初始化参数、启

19、动装入的优先级、运行的安全设置以及 Servlet URL。其中 Servlet 的名字、类和 Servlet URL是必须给出的,在 6.3.1 节中开发的 Servlet 程序也需要配置这三项才可以运行。对 Servlet 进行配置需要在web.xml 文件中加入下面的程序。其中标记表示 Servlet 的名称,该名称是由开发者命名的,这里没有要求,只是需要同一个 Servlet 的名称要相同。标记表示该 Servlet 名称所对应的 Servlet程序,该 Servlet 程序指的是编译后的.class 程序,其中的 ms 是在 Servlet 程序中创建的包。标记表示 Servlet

20、的 URL地址。,即在客户端对该程序进行时,输入的 URL配置完成后,就可以运行 6.3.1 节中编写的 Servlet,运行结果如图 6-1 所示。在运行该 Servlet 时,输入的 URL 为创建的项目目录,即 Servlet 保存在6WEB-INFclasses 目录下。myO,其中“6”表示rvlet 是在配置文件173myOrvletms.myOrvletmyOrvlet/myOrvletPrWriter out=response.getWriter();out.prln(o World);out.prln(oWorld);public void doGet(HttpServlet

21、Request request,HttpServletResponse response) throws IOExceptiondot(request,response);标记中填写的内容,通过它可以找到并运行指定的Servlet。6.3.3Servlet 中的中文解决在 6.3.1 节中编写的第一个 Servlet,没有使用中文,如果在Servlet 中直接使用中文是会出现乱码的。例如将第一个程序做如下修改:Servlet图 6-1运行 Servlet对该程序使用和6.3.2 节中的程序相同的配置,运行该Servlet,运行结果如图 6-2 所示。从运行结果中可以看出,在程序中要显示的中文在

22、页面中变为问号。这主要是由编码方法的不同造成的,在浏览器中默认使用的是 UTF-8 编码方式来发送请求,而使用中文的编码方式是gb2312。所以如果让中文的显示正常,就需要对 Servlet 中的请求和响应进行编码。下面是对上面程序进行改进后的程序。图 6-2中文发生乱码174package ms; import java.io.*;import javax.servlet.*; import javax.servlet.http.*;public class myOrvlet extends HttpServletpublic void dot(HttpServletRequest requ

23、est,HttpServletResponse response) throws IOExceptionpackage ms; import java.io.*;import javax.servlet.*; import javax.servlet.http.*;public class myOrvlet extends HttpServletpublic void dot(HttpServletRequest request,HttpServletResponse response) throws IOExceptionPrWriter out=response.getWriter();o

24、ut.pr ln(Servlet 中的中文解决 ); out.prln(Servlet 中的中文解决 );public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOExceptiondot(request,response);再次使用相同的配置运行该 Servlet,运行结果如图 6-3所示。从运行结果中可以看出,中文不能正常显示已经得到解决。在对 Servlet 程序进行重新编译后,要想再次运行该程序,需要重新启动 Tomcat 服务器,才能正常运行。图 6-3使用 gb2312 编

25、码的程序6.4Servlet 的典型应用在实际开发中,Servlet 的使用是非常普遍的。在本节中就来学些比较经典的应用Servlet的小模块程序。熟练开发这些小模块程序为以后开发大型项目打下基础。6.4.1获取 Servlet 的初始化参数信息在 6.3 节中学习 Servlet 的配置时已经知道可以为 Servlet 配置初始化参数,在本小节中就来学习如何获取 Servlet 的初始化参数。首先配置初始化参数时在 web.xml 文件中加入如下程序:175CSServletms.CSServletuserpyqpassword1234/将客户端请求的编码方式设置为 gb2312 reque

26、st.setCharacterEncoding(gb2312);/将服务器端响应的编码方式设置为 gb2312response.setContentType(text/html;charset=gb2312); PrWriter out=response.getWriter();out.prln(Servlet 中的中文解决 );out.prln(Servlet 中的中文解决 );public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOExceptiondot(request,res

27、ponse);在配置初始化参数的同时也配置了 Servlet 的基本环境。其中每一对标记就定义一个初始参数,在其中标记定义的是参数名称,标记定义的是参数值。下面是获取配置的初始化参数的程序。import javax.servlet.*;Enumeratione;/根据初始化参数的名称获取参数值/将初始化参数值显示176pw.prln(初始化参数的值为:+value);String value=config.getInitParametaram);ServletConfig config;public void dot(HttpServletRequest request,HttpServlet

28、Response response) throws IOException/将客户端请求的编码方式设置为gb2312 request.setCharacterEncoding(gb2312);/将服务器端响应的编码方式设置为gb2312response.setContentType(text/html;charset=gb2312); pw=response.getWriter();/获取Servlet 配置的相关信息config=this.getServletConfig();/获取所有初始化参数的名称 e=config.getInitParameterNames();/将所有初始化参数循环

29、显示while(e.hasMoreElements()/获取初始化参数名称String param=(String)e.nexement();/将初始化参数的名称显示pw.prln(初始化参数名称为:+param); pw.prln();import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.http.*;import java.util.Enumeration;public class CSServlet extends HttpServletPrWritw;p

30、ackage ms;import java.io.IOException; import java.io.PrWriter;CSServlet/CSServlet运行该 Servlet,运行结果如图 6-4 所示。在本程序中,首先使用 Servlet 的 getServletConfig()方法获取 Servlet 配置的所有相关信息,然后使用 ServletConfig接口实例调用 getInitParameterNames()方法获取配置中的所有参数名称。接下来对所有参数名称进行循环操作,显示出所有参数名称。最后就是通过参数名称使用 getInitParameter()方法来获取初始化参数

31、的值。 在本程序中多次使用到 ServletConfig 接口,该接口的相关知识可以通过学习 API 来了解。图 6-4获取初始化参数6.4.2通过 Servlet 获取表单提交数据使用 Servlet 不但可以获取初始化参数信息,还可以获取用户在表单中输入的信息。这和使用 JSP 获取表单中输入信息的方式是类似的。首先都需要定义一个提交表单程序,这里定义一个最常见的用户输入用户名和的页面程序 6-1.jsp 代码如下:177用户名pw.prln();public void doGet(HttpServletRequest request,HttpServletResponse respons

32、e) throws IOExceptiondot(request,response);运行 Tomcat,输入该程序所在的路径,运行结果如图 6-5 所示。在本程序的运行结果中输入用户名为“pyq”,BDServlet 程序。BDServlet 程序的内容如下:为“1234”,进行提交,就会提交到Servlet 程序编写和编译完成后,对该程序进行如下配置:178BDServletms.BDServletBDServlet/BDServletpackage ms;import java.io.IOException; import java.io.PrWriter; import javax.s

33、ervlet.http.*;public class BDServlet extends HttpServletPrWritw;public void dot (HttpServletRequest request,HttpServletResponse response) throws IOException/将客户端请求的编码方式设置为gb2312 request.setCharacterEncoding(gb2312);/将服务器端响应的编码方式设置为gb2312response.setContentType(text/html;charset=gb2312); pw=response.

34、getWriter();/使用HttpServletRequest 接口的getParameter()方法获取用户名信息String name=request.getParameter(name);/使用HttpServletRequest 接口的getParameter()方法获取信息String pwd=request.getParameter(pwd); pw.prln(你输入的用户名为:+name); pw.prln();pw.prln(你输入的为:+pwd);public void doGet (HttpServletRequest request,HttpServletRespon

35、se response) throws IOExceptiondot(request,response);在用户输入的表单程序中,进行提交,就会提交到该 Servlet 程序,运行结果如图 6-6 所示。图 6-5提交表单图 6-6获取表单数据在该 Servlet 程序中,使用 HttpServletRequest 接口的 getParameter()方法来获取表单中的输入信息。此时可以发现这和使用 request 内置对象获取表单的输入信息非常类似。在该程序的运行结果中,可以看到获取的信息显示在 URL 中。要想使程序具有更高的安全性,只需要将提交表单中的 method 属性设置为t 即可,

36、此时提交后就会调用 Servlet 程序中的 dot 方法,从而在 URL 中就不再显示获取的信息。6.4.3在 Servlet 中实现页面转发功能使用 Servlet 程序,还可以实现页面转发的功能,这和 JSP 中使用 response 内置对象进行页面转发很相似。在本节中就来定义一个根据用户输入内容的不同,而实现不同页面转发的程序。这里先定义一个登录的提交表单程序 6-2.jsp 代码如下:179实现页面跳转功能用户名运行 Tomcat,提交该表单程序,运行结果如图 6-7 所示。 在该登录页面中进行提交,就会提交到 Servlet 程序,先来看Servlet 程序的内容。package

37、 ms;import import import import import publicPrjava.io.IOException;java.io.PrWriter;javax.servlet.http.*; javax.servlet.ServletException; javax.servlet.RequestDispatcher;class ZFServlet extends HttpServlet图 6-7登录页面Writw;RequestDispatcher rd;public void dot(HttpServletRequest request,HttpServletRespo

38、nse response)throws ServletException,IOException/将客户端请求的编码方式设置为 gb2312 request.setCharacterEncoding(gb2312);/将服务器端响应的编码方式设置为 gb2312response.setContentType(text/html;charset=gb2312); pw=response.getWriter();/使用 HttpServletRequest 接口的 getParameter()方法获取用户名信息String name=request.getParameter(name);/使用 H

39、ttpServletRequest 接口的 getParameter()方法获取 String pwd=request.getParameter(pwd);信息/判断用户名和是否正确if(name.equals(pyq)&pwd.equals(1234)/定义跳转到的页面 rd=request.getRequestDispatcher(6-3.jsp);/使用 RequestDispatcher 接口的 forward()方法实现跳转rd.forward(request,response);else/定义页面跳转到的页面 rd=request.getRequestDispatcher(6-4.

40、jsp);/使用 RequestDispatcher 接口的 forward()方法实现跳转rd.forward(request,response);public void doGet (HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException180在本程序中,首先获取用户在表单程序中输入的信息,这在 6.4.2 节中已经讲解过。然后判断输入的信息是否为指定信息,在判断的结果中使用 getRequestDispatcher()方法指定要跳转到的页面程序的名称,最后使用

41、 RequestDispatcher 接口的 forward()方法实现跳转。在该程序中如果输入的用户名为“pyq”, 为“1234”,页面就会自动跳转到 6-3.jsp 程序。6-3.jsp 程序内容如下:跳转到该程序后的运行结果如图 6-8 所示。如果用户输入的不是所规定的内容,则页面就会自动跳转到 6-4.jsp 程序。6-4.jsp 程序内容如下:跳转到该程序后的运行结果如图 6-9 所示。是否登录成功的显示结果和程序都是很简单的。这里主要学习如何使用 Servlet 完成跳转功能。图 6-8登录成功图 6-9登录失败181实现页面跳转功能你输入的用户名或者错误实现页面跳转功能欢迎你本

42、dot(request,response);6.4.4使用 Servlet 限制时间在一些在 4.1 节学习ses中经常对用户的时间进行限制,如果用户时间超时,则将自动断线。内置对象时,学习了如何获取 ses的创建时间和最后时间。在 Servlet时间的程序。程序中同样能够通过这些操作来完成特定功能。看下面是使用 Servlet 限制对该 Servlet 进行配置后,程序运行结果如图 6-10 所示。在本程序中,通过对 HttpSes接口的操作,首先设置一个用户的最大时间。然后通过该182package ms;import java.io.IOException; import java.io

43、.PrWriter; import javax.servlet.http.*;public class XZServlet extends HttpServletPrWritw;HttpSeshs; time=10;public void dot(HttpServletRequest request,HttpServletResponse response) throws IOException/将客户端请求的编码方式设置为gb2312 request.setCharacterEncoding(gb2312);/将服务器端响应的编码方式设置为gb2312response.setContentT

44、ype(text/html;charset=gb2312); pw=response.getWriter();hs=request.getSes();/设置ses的生命周期为 10 秒hs.setMaxInactiveerval(time);/计算已经时间time1=()(hs.getLastAcsedTime()-hs.getCreationTime()/1000;/计算剩余多少时间断线 time2=time-time1;pw.prln(你已经+time1+秒,过+time2+秒后自动断线);/如果超出时间,将自动跳转 if(time1=time)hs.invalidate();/定义页面跳

45、转到的页面 response.sendRedirect(6-5.jsp);public void doGet (HttpServletRequest request,HttpServletResponse response) throws IOExceptiondot(request,response);接口 dot 的 getLastAcsedTime()和 goolreationTime()方法计算用户的时间,并且计算出剩余时间。当超过规定的时间后,就会自动跳转到 6-5.jsp 程序。6-5.jsp 程序的内容如下:跳转到该程序后的结果如图 6-11 所示。图 6-10时间限制内图 6-

46、11超出时间后6.4.5使用 Servlet 进行操作的相关知识在第 4 章中已经做了详细讲解,在本节就来学习如何在 Servlet 中进行操作。首先定义一个表单程序,提交后把其中的内容保存在显示在页面中。首先来看一个简单的提交表单程序 6-6.jsp 代码如下:中,然后再获取并183属性名称为属性值为限制时间你时间过长,自动断线运行 Tomcat,输入该程序所在的路径,运行结果如图 6-12 所示。在该表单程序中输入指定的内容,例如输入的属性名称为“pyq”,属性值为“1234”,进行提交,就会提交到 Servlet 程序。该 Servlet 程序的内容如下:184package ms;im

47、port java.io.IOException; import java.io.PrWriter; import javax.servlet.http.*; import javax.servlet.*;public class CKServlet extends HttpServletPrWritw;public void dot (HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException/将客户端请求的编码方式设置为gb2312 request.setChara

48、cterEncoding(gb2312);/将服务器端响应的编码方式设置为gb2312response.setContentType(text/html;charset=gb2312); pw=response.getWriter();/使用HttpServletRequest 接口的getParameter 方法获取用户名信息String name=request.getParameter(name);/使用HttpServletRequest 接口的getParameter 方法获取信息 String value=request.getParameter(value); if(name!=

49、null)/将获取的信息保存在中c=new(name,value);/使用HttpServletResponse 接口添加新对象response.add(c);/使用HttpServletRequest 接口获取所有的s=request.gets();pw.prln(中的属性名称和属性值的对应关系如下:); pw.prln();/对所有进行循环显示for(i=0;is.length;i+)ck=si;/使用getName()方法获取属性名称对该 Servlet 程序进行配置后,运行结果如图 6-13 所示。在该 Servlet 程序中,首先获取用户在表单程序中输入的内容,然后创建一个对象,并使

50、用 HttpServletResponse 接口将输入的内容添加到新创建的对象及其属性名称和对应的属性值并显示在页面中。对象。接下来获取该图 6-12表单程序图 6-13对操作6.5Servlet 过滤器使用 Servlet 过滤器可以直接处理请求和响应过程。Servlet 中实现过滤器功能的是 Web 中的一个小型组件,其来自客户端的请求和响应信息,从而进行查看、提取或者对客户端和服务器端之间交换的数据信息进行某项特定的操作。过滤器并不是 Servlet,它并不实际创建一个请求,而是请求到达一个 Servlet 前的预处理程序,或者响应离开 Servlet 后的处理程序。6.5.1编写 Se

51、rvlet 过滤器程序Servlet 过滤器也是一个 Java 程序,在定义该 Java 程序时必须要使用 javax.servlet.Filter 接口及其三个方法,即 init()方法、doFilter()方法和 destroy()方法。init()方法是在 Servlet 容器实例化过滤器时被调用。该方法在 doFilter()方法之前被调用,负责设置 FilterConfig 对象。该对象为过滤器提供初始化参数,并允许与之相关的185String myName=ck.getName();/使用 getValue()方法获取属性值 String myValue=ck.getValue()

52、; if(myName.equals(pyq)pw.prln(myName+#+myValue);public void doGet (HttpServletRequest request,HttpServletResponse response) throws ServletException,IOExceptiondot(request,response);ServletContext。doFilter()方法是过滤器的业务方法,在该方法中完成过滤器需要完成的工作。每当应用程序接收请求处理时,都会自动调用该方法。doFilter 方法接收三个输入参数,即 ServletRequest、 S

53、ervletResponse 和 FilterChain 对象。destroy()方法和 Servlet 中的 destroy()方法一样,用于销毁。不过过滤器中的 destroy()方法只是用来销毁过滤器。看下面自定义的过滤器程序。186package ms;import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain;import javax.servlet.FilterConfig; import javax.servlet.ServletException;import

54、 javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse; public class GuoLv implements Filterprivate FilterConfig filterConfig=null;/初始化过滤器public void init(FilterConfig filterConfig)this.filterConfig=

55、filterConfig;/过滤器实际操作public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException/获得输出流ServletOutputStream out=(HttpServletResponse) response).getOutputStream();/输出内容 response.setCharacterEncoding(GB2312); out.pr(); out.pr(# );out.pr(

56、); olose();/下一个Filterchain.doFilter(request,response);/销毁过滤器public void destroy()在该Servlet 过滤器程序中采用了javax.servlet.Filter 接口和javax.servlet.Filter 接口中的init()方法、doFilter()方法和 destroy()方法,这样就定义了一个 Servlet 过滤器程序。该程序不能直接运行,还需要进行配置。6.5.2配置和运行 Servlet 过滤器在配置过滤器之前要先定义一个 Servlet 程序,让 Servlet 过滤器对该 Servlet 程序进

57、行过滤。Servlet 程序代码如下:将该 Servlet 程序和 Servlet 过滤器程序一起在 Web 程序中进行配置。在其中需要加入如下程序:187GuoLvms.GuoLvGuoLvGLServletGLServletms.GLServletpackage ms; import java.io.*;import javax.servlet.*; import javax.servlet.http.*;public class GLServlet extends HttpServletpublic void dot (HttpServletRequest request,HttpSer

58、vletResponse response) throws IOException/将客户端请求的编码方式设置为gb2312 request.setCharacterEncoding(gb2312);/将服务器端响应的编码方式设置为gb2312response.setContentType(text/html;charset=gb2312); PrWriter out=response.getWriter();out.prln();out.prln(&);public void doGet (HttpServletRequest request,HttpServletResponse resp

59、onse) throws IOExceptiondot(request,response);其中标记定义的是 Servlet 过滤器的名称。标记定义了 Servlet 过滤器的.class 文件。标记对中的标记定义的是该 Servlet 过滤器为哪一个 Servlet 进行过滤。进行配置后,就可以运行本节中定义的 Servlet 程序,运行结果如图 6-14 所示。从运行结果中可以看出,页面中显示“#”号,而在 Servlet程序中是没有显示该内容的功能。这是因为该显示是来自 Servlet过滤器。由此可以看出,当运行 Servlet 程序时,将自动调用对该Servlet 进行过滤的 Serv

60、let 过滤器。图 6-14Servlet 过滤器6.6Servlet器在对 Servlet 的操作中,还可以编写 Servlet下文事件、会话事件和请求事件。通常编写 Servlet器。Servlet 事件主要分为三种:Servlet 上器程序对这三种事件进行。6.6.1编写 Servlet器程序由于 Servlet 事件分为三种,所以在编写 Servlet器时要根据不同的事件来编写器程序。整个编写过程都是相似的,需要首先实现相应的接口,接下来将按事件的不同,分别进行讲解。(1)对 Servlet 上下文进行使用 Servlet器可以ServletContext 对象的创建和删除以及属性的添

温馨提示

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

评论

0/150

提交评论