响应重定向与请求转发的比较.doc_第1页
响应重定向与请求转发的比较.doc_第2页
响应重定向与请求转发的比较.doc_第3页
响应重定向与请求转发的比较.doc_第4页
响应重定向与请求转发的比较.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

响应重定向与请求转发的比较(1)RequestDispatcher对象是一个Web资源的包装器,可以用来把当前请求转发到该资源。这种转发是在服务器端控制权的转向,客户端发来的请求将交由新的页面进行处理。使用请求转发,在客户的浏览器地址栏中不会显示转发后的资源地址。使用请求转发,可以将前一个页面的数据、状态等信息传到转发的页面。(2) sendRedirect()方法实际是服务器向浏览器发送一个特殊的响应头(Location,状态码302),它命令浏览器连接到新的位置。因此,使用这种方法在浏览器的地址栏中可以看到地址的变化。重定向是作为不同请求来看待的,因此,所有请求作用域的参数在重定向到下一个页面时都会失效。使用sendRedirect()方法重定向时,资源不能位于WEB-INF目录中。名为bookstore的Web应用程序 webapps bookstore html (包含所有的HTML文件) images (包含所有的GIF、JPEG和BMP图象文件) javascripts (包含所有的*.js文件) jsp (包含所有的JSP文件) index.html (默认的欢迎文件)WEB-INF classes(应用程序的类文件) com mycompany MyClass.class lib(驱动程序包和标签库包文件) *.jar(jdbcdriver.jar,mytaglib.jar) web.xml(部署描述文件)使用HttpSession对象通常需要三步:(1)为客户创建或获得与请求关联的会话对象;(2)在会话对象中添加或删除名/值对属性;(3)如果需要可使会话失效。创建和使用自定义标签一般包含下面3个步骤:创建标签处理类(tag handler);创建标签库描述文件(TLD);在JSP文件中导入标签库和使用标签。JDBC的基本功能包括:建立与数据库的连接;发送SQL语句;处理数据库操作结果。使用JSP表达式访问作用域变量一般做法是:在Servlet中使用setAttribute()方法将一个变量存储到某个作用域对象上,如HttpServletRequest、HttpSession及ServletContext等。然后使用RequestDispatcher对象的forward()方法将请求转发到JSP页面,在JSP页面中调用隐含变量的getAttribute()方法返回作用域变量的值。 把cokie加入响应头1)创建Cookie对象 Cookie userCookie = new Cookie(username, hacker);2)设置Cookie的最大存活期 userCookie. setMaxAge(60*60*24*7);3)向客户发送Cookie对象 response.addCookie(userCookie);JSP中9个隐含对象 隐含对象所属的类说明requestjavax.servlet.http.HttpServletRequest客户端的请求信息responsejavax.servlet.http.HttpServletResponse网页传回客户端的响应sessionjavax.servlet.http.HttpSession与请求有关的会话outjavax.servlet.jsp.JSPWriter向客户端浏览器输出数据的数据流applicationjavax.servlet.ServletContext提供全局的数据,一旦创建就保持到服务器关闭pageContext javax.servlet.jsp.PageContextJSP页面的上下文,用于访问页面属性pagejava.lang.Object同Java中的this,即JSP页面本身configjavax.servlet.servletConfigServlet的配置对象exceptionjava.lang.Throwable针对错误网页,捕捉一般网页中未捕捉的异常过滤器是如何工作的当容器接收到对某个资源的请求,它要检查是否有过滤器与之关联。如果有过滤器与该资源关联,容器将把该请求发送给过滤器,而不是直接发送给资源。在过滤器处理完请求后,它将做下面3件事:产生响应并将其返回给客户;如果有过滤器链,它将把(修改过或没有修改过)请求传递给下一个过滤器;将请求传递给不同的资源。当请求返回到客户时,它是以相反的方向经过同一组过滤器返回。过滤器链中的每个过滤器够可能修改响应。过滤器概念从技术上来说,过滤器(filter)是一个对象,它用来在源数据和目的地数据之间截获信息,然后对在它们之间传递的数据进行过滤。对Web应用来说,过滤器是Web服务器上的组件,它们对客户和资源之间的请求和响应进行过滤。过滤器的用途Servlet规范中提到的过滤器的一些常见应用包括:登录和审计过滤器;验证过滤器;图像转换过滤器;数据压缩过滤器;加密过滤器;XSLT过滤器Jsp作用域对象的生命周期page(页面作用域): jsp页面被执行到执行完毕request(请求作用域): 浏览器发送请求到当次请求结束 浏览器发送请求,web容器创建request对象,请求结束,该对象销毁session(会话作用域): 开始一个会话,服务器创建session,一直到session失效application(应用作用域): web应用发布到服务器,服务器启动,对象就创建,直到web应用被移除或服务器关闭该对象被销毁EL 表达式定义了11个隐含对象,applicationScope 应用程序范围内的scoped变量组成的集合cookie 所有cookie组成的集合header TTP请求头部,字符串headerValues HTTP请求头部,串字符集合initParam 全部应用程序参数名组成的集合pageContext 当前页面的javax.servlet.jsp.PageContext对象pageScope 页面范围内所有对象的集合param 所有请求参数字符串组成的集合paramValues 所有作为字符串集合的请求参数requestScope 所有请求范围的对象的集合sessionScope 所有会话范围的对象的集合下面的代码展示了在部署描述文件中元素的一个典型的使用: helloServlet com.myserver.HelloServlet email limit 200 1下面是在DD文件中使用元素的例子: helloServlet /helloServlet/hello/*使用HttpSession对象import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.Date;public class ShowSessionServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException response.setContentType(text/html); HttpSession session = request.getSession(true); String heading =null;Integer accessCount = (Integer)session.getAttribute(accessCount); if(accessCount=null) accessCount = new Integer(1); heading = Welcome, Newcomer; else heading = Welcome Back.; accessCount = accessCount +1; session.setAttribute(accessCount,accessCount); PrintWriter out = response.getWriter(); out.println(); out.println(Session Tracking Example); out.println(); out.println(+heading+); out.println(Information about your session.); out.println();out.println(Info TypeValuen); out.println(ID+session.getId()+n); out.println(Creation Time:); out.println(+new Date(session.getCreationTime()+n); out.println(Time of last access:); out.println(+new Date(session.getLastAccessedTime()+n); out.println(Access number:+accessCount+n); out.println(); Servlet向客户端发送一个Cookie对象import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class SendCookie extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException Cookie userCookie = new Cookie(username, hacker); userCookie. setMaxAge(60*60*24*7); response.addCookie(userCookie); response.setContentType(text/html); PrintWriter out=response.getWriter();out.println(add cookies); out.println(A cookie has been sent to brower);out.println(); JSP页面产生的Servlet类实现了javax.servlet.jsp.HttpJspPage接口。HttpJspPage接口扩展了同一个包中的JspPage接口,该接口又扩展了javax.servlet包的Servlet接口。因此,JSP页面产生的Servlet类实现了这三个接口中所有的方法,故也被称为页面实现类。JspPage接口只声明了两个方法:jspInit()和jspDestroy()。 HttpJspPage接口,该接口中声明了一个方法:_jspService()。 public void jspInit();public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException;public void jspDestroy(); 检索请求参数 Login Page 用户名: 密  码:   HTTP请求结构请求行 POST /bookstore/selectBook HTTP/1.1 Accept = */* Accept-Language = zh-cn Accept-Encoding = gzip, deflate请求头 User-Agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Host = localhost:8080 Connection = Keep-Alive空行数据 name=Java+EE检索请求参数import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class LoginServlet extends HttpServlet public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException String userid = req.getParameter(userid); if( userid.equals(shen) RequestDispatcher rd = req.getRequestDispatcher(/hello.jsp); rd.forward(req, res); return; else RequestDispatcher rd = req.getRequestDispatcher(/login.html); rd.forward(req, res); return; pageContex是javax.servlet.jsp.PageContext类型的隐含变量三个作用:(1)存储隐含对象的引用。 session、application、config与out这些隐含变量是调用pageContext对象的相应方法得到的。(2)提供了在不同作用域内返回或设置属性的方便的方法。(3)提供了forward()方法和include()方法实现将请求转发到另一个资源和将一个资源的输出包含到当前页面中的功能 .public void include(String relativeURL)public void forward(String relativeURL)例如,从Servlet中将请求转发到另一个资源,我们需要写下面两行:RequestDispatcher view = request.getRequestDispatcher(other.jsp);view.forward(request, response);在JSP页面中,通过使用pageContext变量仅需一行就可以完成上述功能:pageContext.forward(other.jsp);JSP页面在转换阶段被转换成Servlet,这说明在JSP页面中使用的bean实际上是在Servlet中使用的,因此我们也可以直接在Servlet中使用JavaBean。并且可以在JSP页面中和Servlet中共享bean实例。 客户名:Email地址:电话:使用请求对象存储数据package com.demo;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class LoginServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException String username = request.getParameter(username); String password = request.getParameter(password); String location=; if(username.equals(admin)&password.equals(admin) request.setAttribute(username, username); location = /hello.jsp; else location = /login.html; RequestDispatcher dispatcher = request.getRequestDispatcher(location); dispatcher.forward(request, response); request和response分别是HttpServletRequest和HttpServletResponse类型的隐含变量 它们是作为参数传递给_jspService()方法的 Hi! Your IP address is 是javax.servlet.jsp.JspWriter类型的隐含变量 例如:产生的Servlet代码都使用out变量打印出值 public void _jspService(.)/其他代码 out.print(Hello World!); out.print(Hello User!); 创建标签描述类文件 1.0 /sample hello sampleLib.HelloTag emptyapplication是javax.servlet.ServletContext类型的隐含变量 。下面两段小脚本是等价的:session是javax.servlet.http.HttpSession类型的隐含变量。如果page指令的session属性设置为true,那么在页面转换的类中就会声明一个session隐含变量。如果明确将session属性设置为f

温馨提示

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

评论

0/150

提交评论