JSP与Servlet技术.ppt_第1页
JSP与Servlet技术.ppt_第2页
JSP与Servlet技术.ppt_第3页
JSP与Servlet技术.ppt_第4页
JSP与Servlet技术.ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、JSP与Servlet技术,Servlet技术概述 什么是Servlet Servlet是用Java语言编写的运行在服务器端的小应用程序,能够接受Web客户端的请求,并能对Web客户端进行响应,通常是通过HTTP协议进行工作的。 在Java Web 开发中要编写servlet,通常会继承HttpServlet。,Applet、JSP、Javabean和Servlet,Applet和Serlvet中都没有main()方法,只有一些特定的方法用于启动、执行和退出,不同的是,Servlet不提供用户界面,运行在服务器端,而Applet提供用户界面,运行与客户端 Servlet和JavaBean一样,

2、使用Java编写,不同的是,JavaBean不能独立运行,只是提供接口供JSP等访问,而Serlvet可以独立运行 Servlet编写HTML脚本时,需要使用print或者println方法逐句打印输出,给开发人员带来了很大的麻烦,而JSP网页实在HTML脚本中嵌入Java代码,从根本上改变了Servlet的编程方式 JSP、JavaBean和Servlet可以进行交流。,Servlet的生命周期,(1)加载和实例化 (2)初始化事件 (3)执行处理请求和响应 (4)终止事件或卸载,图11-1 Servlet的生命周期,Servlet的生命周期始于将它装入Web服务器运行时,在终止或重新装入S

3、ervlet时结束。是当服务器装载运行servlets,接收来自客户端的多个请求并且返回数据给客户端,然后再删除移开servlets。,这个生命周期由javax.servlet.Servlet接口的init()、service()、destroy()方法表达。,Servlet工作原理,Web服务器,doGet()方法,doPost()方法,HTTP GET请求,HTTP POST请求,响应,响应,客户机,图 典型的servlet的继承结构,Servlet的编程接口,在Servlets API中,最常用的是Servlet interface,所有的servlets都执行这个接口。这些servle

4、ts或者是直接执行Servlet接口,或者是通过扩展类执行,Servlet类接口的分类 与Servlet实现相关定义用于实现Servlet相关的类和方法 与Servlet配置相关主要包括ServletConfig接口 与Servlet异常相关Servlet API定义了两个异常ServletException和Unavailable Exception 与请求和响应相关用于接收客户端的请求,并且做出对应的响应 会话跟踪用于跟踪和客户端的会话 Servlet上下文通过这个接口,可以在多个Web应用程序中共享数据 Servlet协作主要是RequestDispatcher接口,用于进行视图派发 过

5、滤器定义请求响应过滤的相关API和接口 其他类cookie和HttpUtils类,1HttpServlet 通常编写的Servlet类,一般从Javax包中的GenericServlet类 继承而来,在HttpServlet中加入了一些附加的方法,这些 方法可以协助处理HTTP 基本请求,这些基本请求由HttpServlet类中的方法service()自动地调用。这些方法有: doGet 用来处理HTTP的GET、头部HEAD请求 doPost 用来处理HTTP的POST请求 doPut用来处理HTTP的PUT请求 doDelete用来处理HTTP的DELETE请求 doHead 用来处理HT

6、TP的HEAD请求 doOptions用来处理HTTP的OPTIONS请求 doTrace用来处理HTTP的TRACE请求,2HttpServletRequest 这个接口中最常用的方法就是获得请求中的参数,这个请求中的参数是客户端表单中的数据。 该类拥有的主要方法: getCookies()获得客户端发送的cookie getSession()返回和客户端关联的HttpSession对象,如果没有给客户端分配Session对象,则返回null getSession(boolean create)和上一个方法类似,不同的是,如果没有给客户端分配Session对象,则创建一个新的Session并

7、返回 getParameter(String name)获得请求中名为name的参数值,如果请求中没有该参数,则返回null getParameterValues(String name )返回请求中名为name的参数值 getRequestDispatcher(Stringname)返回指定源名称的RequsetDispatcher对象。,示例见:paraForm.jsp 和 RequestParam.java,3HttpServletResponse 它代表了对客户端的Http响应,允许servlet设置内容长度和响应的MIME类型,并且提供输出流ServletOutputStream 常

8、用的方法有以下几种: addCookie(Cookie cookie)在响应中增加一个cookie encodeURL(String url)使用URL和一个SessionId重写这个URL SetCharacterEncoding(String charset)设置响应的字符编码类型 setContentType(String type)设置响应的MIME类型 ServletOutputStream getOutputStream()返回一个记录二进制的响应数据的输出流。 PrintWriter getWriter()返回一个PringWriter对象用来记录格式化的响应实体 sendRed

9、irect(String location)把响应发送到另一个页面或者Servlet进行处理,示例见:cookie.jsp writeCookie.jsp cookie.java,4HttpSession HttpSession接口被Servlet用来实现在HTTP客户端和HTTP会话两者之间的关联。这种关联可能在多处连接和请求中持续一段给定的时间。session用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。一个session可以通过Cookie或重写URL 来维持。常用方法有: getId()返回分配给这个Session的标识符 getCreate()返回创建sessio

10、n 的时间 getValue(String name)返回一个以给定的名称绑定到Session上的对象。如果不存在这样的绑定,返回空值 setMaxInactiveInterval(Int interval)设置一个秒数以表示客户端在不发出请求时,Session被Servlet引擎维持的最长时间。,5. RequestDispatcher 从客户端接收请求,然后将它发给服务器的可用资源(例如Servlet、CGI、HTML文件、JSP文件) 包含两个方法: forward(ServletRequest request, ServletReponse response)把请求转发到服务器上的另一

11、个资源( Servlet、HTML文件、JSP文件) include(ServletRequest request, ServletResponse response)把服务器上的另一个资源( Servlet、HTML文件、JSP文件)包含到响应中 forward方法和include方法的区别: forward方法调用后在响应中的没有提交的内容被自动消除。 include方法使原先的Servlet和转发到的Servlet都可以输出响应信息。,过滤 在Web应用中实施过滤是常用的技术,通过过滤,可以对请求进行统一编码、认证等。有一种特殊的servlet成为Filter(过滤器) 1.Filter

12、接口Filter必须实现的接口 Init(FilterConfig filterConfig):用于初始化Filter doFilter(ServletRequest request,ServletResponse response,FilterChain chain):Filter的业务方法就在这里实现 Destory():释放Filter占用的资源 2.FilterChain接口过滤链 通过此接口可以把过滤的任务在不同的Filter之间转移。 doFilter(ServletRequest request,ServletResponse response) 3.FilterConfig接口

13、代表Filter的配置 getFilterName():返回Filter的名称 getInitParameter(String name):获得名称为name的初始化参数 getServletContext():返回这个Filter所在Servlet上下文对象 getInitParameterNames():获得Fliter配置中的所有初始化参数的名称,编写简单的Servlet步骤,1.编写Servlet A.创建一个包 假设包名是servlets ,创建包的代码如下: package servlets ; B.引入用到的包 需要导入的包有javax.servlet.*, javax.serv

14、let.http.*,通常还需要导入的包是java.io.*。 C.定义类的基本框架并继承HttpServlet 每个Servlet都必须实现接口Servlet,而这里要编写的Servlet主要是用于Http协议的,可以继承实现了Servlet接口的HttpServlet。 public class HelloServlet extends HttpServlet D.编写成员方法 通常不需要成员变量,成员方法包括了init,service和destroy等。 如果需要对servlet进行初始化,就需要实现init方法。 如果需要在卸载servlet的时候执行一些功能,可以实现destory方

15、法。 一般情况下,根据需要完成的功能只需实现服务类方法即可。,如下所示的代码: public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html;charset=GB2312); PrintWriter out = response.getWriter(); out.println(); out.println(Hello World!); out.println();

16、out.println(“Hello World! ); out.println(); out.println(); out.close(); ,Servlet基本结构,public class serlvet类名 extends HttpServlet / 必须继承自HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException request.setCharacterEncoding(gb2312); res

17、ponse.setCharacterEncoding(gb2312); response.setContentType(text/html); / 使用“request”读取和请求有关的信息(比如Cookies)和表单数据 / 使用“response”指定HTTP应答状态代码和应答头(比如指定内容类型,设置Cookie) PrintWriter out = response.getWriter(); / 使用 out把应答内容发送到浏览器 public void doPost(HttpServletRequest request, HttpServletResponse response) t

18、hrows ServletException, IOException ,2.编译Servlet 编译Servlet,与编译JavaBean相同。 3.配置Servlet 包括两部分,首先是申明使用元素。代码如下: hello servlets. HelloServlet 然后是Servlet映射,主要配置访问该Servlet的方式,使用元素,代码如下: hello /hello 4.部署Servlet 部署Servlet,与部署JavaBean相同,5.访问Servlet a.通过在浏览器中直接输入地址访问 :8080/wll/hello b. 通过超链接的形式

19、访问 第一个servlet c.通过表单提交的方式访问 ,示例参见:HelloServlet.java Servlet1.jsp,Servlet的跳转,通常在Servlet中通过验证调用相关的业务以后经常需要跳转到其他页面显示,通常有两种跳转方式 1. SendRedirect方式 response.sendRedirect(url) 2. Forward方式 request.getRequestDispatcher(url).forward(request,response),sendRedirect()方法原理: 1.客户端发送请求,Servlet1做出处理。 2.Servlet1调用se

20、ndRedirect()方法,将客户端的请求 重新定位 到Servlet2。 3.客户端浏览器访问Servlet2. 4.Servlet2对客户端浏览器做出响应。 forward()方法原理: 1.客户端发送请求,Servlet1做出处理。 2.Servlet1调用forward()方法,将请求转发给Servlet2来处理请求,为客户端服务。 3.Servlet2对客户端浏览器做出响应。,区别: 在使用的RequestDispatcher的时候,当前文件和要转向的文件属于同一次请求,可以共享request对象。 在使用response对象的sendRedirect方法时,当前文件和要转向的文件

21、不属于同一次请求,属于两次请求,所以不能共享request。 注:如果需要通过request对象传递信息,就不能使用response的sendRedirect方法。,示例: 利用request共享信息见: Dispatcher.htm-request.java-requestshow.jsp 利用session共享信息见: Dispatcher.htm-session.java-sessionshow.jsp,11.3.1 JSP开发网站的两种模式 JSP技术正是利用了Java的“一次开发,处处使用”的性能,成为了网站开发技术人员的首选技术。当然,JSP技术的最大优势在于它能够将页面的表现形式

22、和页面的商业逻辑分开。 模式一 JSP+JavaBeans就是指JSP+JavaBeans技术。,Servlet的应用,模式二JSP+Servlet+JavaBeans就是指JSP+Servlet+JavaBeans技术。,在模式二中,结合了JSP和Servlet技术,模式二充分利用了JSP和Servlet两种技术原有的优点。,JSP+Servlet+JavaBeans结合应用开发,对于大规模的应用系统开发,考虑到开发的效率、维护的可能性和扩展的方便性,可应用MVC标准模式,这个模式经过多年的应用经验积累,已经被广泛采纳接受。 MVC模式由三个部分组成 Model 数据层:应用系统的数据存放

23、View 表示层:Model中的存储数据的可视化表示 Control 控制层:接受用户的输入,通知Model发生的事件。 JSP、Servlet和JavaBean分别对应了MVC的三个部分 Model 数据层:全部封装与JavaBean组件中 View 表示层:由JSP负责处理页面的表示 Control 控制层:Servlet接受用户在页面的输入以及提交动作,并根据动作指示,进行相应的业务处理、调用相应的JavaBean组件,然后根据处理结果交给相应的View表示层JSP程序,由他们负责表示。,1. 利用Servlet获取HTML表单信息,从而实现客户与服务器之间的交互 通过Sample1.h

24、tml和SampleServlet2.java来完成 a. Sample1.html源代码:, Servlet获取HTML表单信息 姓名: ,应用举例,性别: E-mail: ,package ch7; import javax.servlet.*; SampleServlet2.java import javax.servlet.http.*; import java.io.*; public class SampleServlet2 extends HttpServlet public void doPost(HttpServletRequest request, HttpServletR

25、esponse response) throws ServletException, IOException response.setContentType(text/html;charset=GB2312); PrintWriter out = response.getWriter(); request.setCharacterEncoding(GB2312); String name = request.getParameter(name); String sex = request.getParameter(sex); String email = request.getParamete

26、r(email); out.println(); out.println(“Servlet获取HTML表单信息 ); out.println(); out.println(姓名:+name+); out.println(性别:+sex+); out.println(E-mail:+email+); out.println(); out.println(); out.close(); , SampleServlet2 ch7.SampleServlet2 SampleServlet2 /SampleServlet2 ,b. 修改Web.xml,2.JSP+JavaBean+Serlvet示例 设

27、计个人所得税计算器 采用JavaBean+JSP+Servlet模式,其中basetax.html用来接受用户输入当月个人总收入和当地个人所得税起征额,JSP网页showtax.jsp用来显示 计算出的个人所得税,JavaBean程序computetax.java用来计算个人所得税, servlet程序taxservlet接受输入并调用beans a. basetax.html网页代码如下:, 个人所得税计算器 , 个人所得税计算器 当月个人总收入: 当地个人所得税起征额: ,basetax.html运行结果,package ch7; import javax.servlet.*; impor

28、t javax.servlet.http.*; import java.io.*; public class SampleServlet3 extends HttpServlet public SampleServlet3() private String sumincom; private String taxstart; private double tax; public void setSumincom(String sumincom) this.sumincom = sumincom; public String getSumincom() return sumincom; publ

29、ic void setTaxstart(String taxstart) this.taxstart = taxstart public String getTaxstart() return taxstart; public void setTax(double tax) this.tax = tax; public double getTax() return tax; ,b. computetax.java,public void calculate() double totalmoney = Double.parseDouble(sumincom); double basemoney

30、= Double.parseDouble(taxstart); double balance = totalmoney - basemoney; try if(balance0 ,c. Servlet程序taxservlet.java,public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException request.setCharacterEncoding(gb2312); response.setContentType(text/htm

31、l); computetax tax = new computetax(); String sumincom = request.getParameter(sumincom); String taxstart = request.getParameter(taxstart); tax.setSumincom(sumincom); tax.setTaxstart(taxstart); tax.calculate(); request.setAttribute(totaltax,tax.getTax(); request.getRequestDispatcher(/servlet/showtax.

32、jsp).forward(request, response); ,d. showtax.jsp, 个人所得税计算器 当月应缴个人所得税额为: $requestScope.totaltax元 依法纳税是每个公民应尽的义务! ,Servlet过滤器,在Web应用中可以使用过滤器对所有的访问和请求进行统一的处理,IP访问限制,用户发送请求的字符编码转换等,在进行具体的业务逻辑处理之前,首先要经过过滤器的统一处理,然后才开始进入真正的逻辑处理阶段。在本节内容中,将介绍过滤器的原理的实际应用。,Servlet过滤器是Servlet的一种特殊用法,是一个程序,它先于与之相关的servlet或JSP页面运

33、行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。 在实际开发中,过滤器器可以用来对用户进行统一的身份判断、IP访问限制,用户发送请求的字符编码转换、对请求和响应进行加密和解密、记录用户登录日志等。,过滤器的功能就是在服务器和客户中间增加了一个中间层,可以对两者之间的交互进行统一的处理,每一个从客户端提交的请求都需要通过过滤器的处理,可以决定是否将请求继续传递给 Servlet 程序,以及对请求和相应信息是否进行修改,过滤器的基本原理,建立基本过滤器 建立一个过滤器涉及下列四个步骤: 1)建立一个实现Filter接口的类。 这个类需要三个方

34、法,分别是:doFilter、init和destroy。doFilter方法包含主要的过滤代码(见第2步),init方法初始化操作,而destroy方法进行销毁操作。 2)在doFilter方法中放入过滤行为。 doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。 第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。 最后一个参数为FilterChain,此参数用来调用后续的过滤器或servlet或JSP页。,3)调用FilterChain对象的doFilter方法

35、。 Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。 在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。 4)对相应的servlet和JSP页面注册过滤器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。,1.建立一个实现Filter接口的类 所有过滤器都必须实现javax.servlet.Filter。同时需要继承HttpServlet。这个接口包含三个方法,分别为doFilter、init和destroy。 p

36、ublic void init(FilterConfig config)thows ServletException public void doFilter(ServletRequset request, ServletResponse response,FilterChain chain)thows ServletException, IOException public void destroy( ),package ch7; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public cla

37、ss LoginFilter extends HttpServlet implements Filter private FilterConfig filterConfig; public void init(FilterConfig filterConfig) this.filterConfig = filterConfig; /Process the request/response pair public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) Str

38、ing username = request.getParameter(userid); String userpass = request.getParameter(userpass); if(username.length()=0,try PrintWriter out = response.getWriter(); out.print(用户名和口令均为空,请重新输入!); out.flush(); return; catch(Exception e) try filterChain.doFilter(request, response); catch(ServletException s

39、x) filterConfig.getServletContext().log(sx.getMessage(); catch(IOException iox) filterConfig.getServletContext().log(iox.getMessage(); /Clean up resources public void destroy() ,2.Servlet过滤器配置 和servlet一样需要在web.xml中配置 1)servlet过滤器的声明,通过元素声明 过滤器名字 过滤器类名 参数名 参数值 2)servlet过滤器的映射,与url进行关联,通过元素声明 过滤器名字 访问

40、路径 ,关联的url,当访问这个url时,会触发该过滤器。,LoginFilter过滤器配置, LoginFilter ch7.LoginFilter - LoginFilter /login 示例见: Login.jsp-LoginFilter.java-LoginServlet.java UserBean.class,failure.jsp,success.jsp,未输入用户名和密码,过滤器,输入用户名和密码,登陆失败,登陆成功,用filter控制用户访问权限 假设我们要保护的页面是admin/index.jsp 编写SecurityFilter.java,控制用户访问权限 public class SecurityFilter implements Filter public void doFilter(ServletRequest request, ServletResponse respons

温馨提示

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

评论

0/150

提交评论