jsp数据交互(一) getRequestDispatcher()与sendRedirect()的区别

 jsp内置对象这里看别人的总结http://www.cnblogs.com/xiaotangtang/p/4943610.html 

一、jsp中java小脚本
    1.<% java代码段%>
    2.<% =java表达式%>不能有分号
    3.<%!成员变量和函数声明%>
二、注释
    1.<!--html注释-->客户端可以看到
    2.<%--jsp注释--%>客户端不能看到
三、jsp页面的的执行过程
    1.客户端请求(输入URL)
    2.服务器
       (1)现将jsp翻译成.java文件(第一次请求)
            如果是第二次请求,并且jsp页面内容未改变
       (2)将java文件编译成.class文件
       (3)执行.class文件
    3.将执行后的结果和html静态内容发送到客户端
    4.断开连接
四、jsp内置对象
  是由web容器创建的对象,可以直接用,不用再new
     1.out:方法print(文本)向客户端输出内容
     2.request:客户端请求内容
        方法:
            getParameter(“键”),获取客户端提交的单个数据
            getParameterValues(“键”)获取客户端提交的多个数据
            setCharacterEncoding("编码")解决post提交方式的乱码
            getRequestDispatcher("页面"):进行页面转发
      3.response:响应客户端的请求,向客户端输出内容
         方法
         sendRedirect("页面");//进行页面重定向

六、会话:session
     浏览器与服务器的一次通话(类似一次打电话)
     1.会话跟浏览器是一一对应的
     2.同一个浏览器不同请求是一次会话
     3.不同浏览器就是不同会话
     4.一般用于保存客户端特定的信息(临时)
  session失效:
     1.原则上,浏览器关闭,session就失效(实际过程中不一定)
     2.超过有效期失效
     3.调用invalidate(),立即失效
    方法:
       setAttribute(String key,object value),向session保存数据
       object setAttribute(String key)向session读取数据
       setMaxInactiveIntervals设置有效期
       invalidate()使session失效
       removeAttribute(String key)移除指定的session
七、inlude指令:将页面信息包含到另一个页面(静态包含)
    <%@ include file="页面"%>
八、application:应用程序级别的对象
   各个客户端共享的数据
       方法:
          setAttribute(String key ,object value)
          getAttribute(String key)
          getRealPath("虚拟路径");根据虚拟路径获取物理路径
九、Cookie: 保存特定客户端的信息
    用法:
      1.创建
        Cookie ck=new Cookie(String key,String value)
        ck.setMaxAge("时间"),设置有效时间,不设置默认浏览器关闭时失效
      2.保存
        response.addCookie(ck);
      3.读取cookie
         a.Cookie[]cks=request.getCookies();
         b.遍历
           getName():获取当前cookie的名字(键名)
           getValue():获取当前cookie的值
十、session与cookie的区别
          session                    cookie
    保存在服务器的内存中         保存在客户端的硬盘上
    保存object类型               保存String类型
    保存临时数据                 保存永久数据
    安全性高                     安全性差
十一、JavaBean
   是一个java类
   从功能上来说,java类分为:业务类和数据类
   一个java类符合以下要求才是JavaBean:
        1.是一个公有类
        2.有无参的公共的构造方法
        3.属性私有:第一个字母小写
        4.有getter和setter方法
            (方法名格式:get属性名(大写),set属性名(大写))

Validate:验证
Context:上下文
Request:请求  :当前请求(别的请求无效)
Response:响应
Redirect:重定向
Session:会话:当前会话 (可以包含多个请求)在该会话有效期内可以访问
Application:当前服务器(可以包含多个会话):
当服务器启动后就会创建一个application对象,被所有用户共享
page、request、session、application四个作用域对象都有
setAttribute()和getAttribute()方法
而且作用域范围越来越大

1:request对象

是从客户端向服务器端发出请求,包括用户提交的信息以及客户端的一些信息。request对象是javax.servlet.http.HttpServletRequest类的实现实例。

request对象封装了浏览器的请求信息,通过request对象的各种方法可以获取客户端以及用户提交的各项请求信息。

使用request对象获取客户端提交的请求参数的常用方法如下:

1.String getParameter(String name),获取上一页面所提交的参数值的参数值,并以字符串形式返回指定参数的值,如果参数不存在则返回空值。用于表单、链接或网址栏传递参数时,使用此方法。

例如,获取客户端name的参数值:

String name = request.getParameter("name");

2.String[ ] getParameterValues(String name),获取以相同名称命名的表单组件提交的数据,主要用于获取复选框的值,返回值类型是字符串数组String[ ]

例如,获取客户端hobby复选框的所有取值:

String[ ] hobbys = request.getParameterValues("hobby");
       if(hobbys != null)
       {
       out.println("您的爱好有:");
       for(int i=0;i<hobbys.length;i++)
          out.println(hobbys[i]);
       }

3.void setCharacterEncoding(String encoding),设置字符编码方式,用来解决传递非英文字符所出现的乱码问题。

对于以post提交的表单数据

在第一行写:
request.setCharacterEncoding("UTF-8");

对于以get提交的表单数据

提交的数据作为查询字符串被附加到URL 的末端发送到服务器,此时字服务器端调用

setCharacterEncoding()方法就没有作用了,我们需要得到请求参数值之后,进行编码转换

String name=request.getParameter("name");

name=new String(name.getBytes("ISO-8859-1"),"UTF-8"); 
也可以通过TomCat目录下的conf下的server.xml文件,在<Connector>元素中添加URIEncoding 属性,将它的值设置为“utf-8”

<Connector

    port="8080"

    protocol="HTTP/1.1"

     reidrectPort="8433"

    URIEncoding ="UTF-8"

/>

4.RequestDispatcher getRequestDispatcher(String path)----获取请求分配器

返回一个javax.servlet.RequestDispatcher对象该方法的forward()方法用于 转发请求

例如,request.setCharacterEncoding("UTF-8");

实例:使用request对象实现用户注册功能

zhuce.html源代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>个人信息注册</title>
 
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
   
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
 
  <body>
    <h1 align="center">个人信息注册</h1>
    <form action="zhuce.jsp" method="post">
        姓名:<input type="text" name="name"><br>
        密码:<input type="password" name="pwd"><br>
        请选择你的职业:
        <input type="radio" name="career" value="农民">农民
     <input type="radio" name="career" value="工人">工人
     <input type="radio" name="career" value="学生" checked>学生
     <input type="radio" name="career" value="教师">教师
     <br>
     你喜欢的城市:
     <select name="city">
       <option value="辽宁省">辽宁省</option>
       <option value="湖北省">湖北省</option>
       <option value="河南省">河南省</option>
       <option value="山东省">山东省</option>
       <option value="江苏省">江苏省</option>
       <option value="湖南省" selected>湖南省</option>
     </select>
     <br>
     请选择你的爱好:
     <input type="checkbox" name="hobby" value="旅游">旅游
     <input type="checkbox" name="hobby" value="看书" checked>看书
     <input type="checkbox" name="hobby" value="游戏">游戏
     <input type="checkbox" name="hobby" value="琴棋书画">琴棋书画
     <br>
     自我介绍:
     <textarea name="intro">自我介绍</textarea>
     <br>
     <input type="submit" name="submit" value="提交">
    </form>
  </body>
</html>
zhuce.jsp源代码如下:

<%@ page language="java" import="java.util.*" contentType="text/html;charset=UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
   
    <title>个人信息注册</title>
   

  </head>
 
  <body>
    <%request.setCharacterEncoding("UTF-8"); %>
     您的姓名是:<%=request.getParameter("name") %><br>
     您的密码是:<%=request.getParameter("pwd") %><br>
     您的职业是:<%=request.getParameter("career") %><br>
     您喜欢的城市是:<%=request.getParameter("city") %><br>
     您的爱好有:<%String[] hobbys = request.getParameterValues("hobby");
       if(hobbys != null)
       {
       out.println("您的爱好有:");
       for(int i=0;i<hobbys.length;i++)
          out.print(hobbys[i]);
       }
      %>
      <br>
     自我介绍:<%=request.getParameter("intro") %><br>
  </body>
</html>

2:response对象
常用方法:
void addCookie(Cookie cookie):在客户端添加cookie
void sentRedirect(String location);重新定位到新的URL
 

getRequestDispatcher()与sendRedirect()的区别

 

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。

request.getRequestDispather();返回的是一个RequestDispatcher对象。

2.RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。

3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而

ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为

ServletRequest具有相对路径的概念;而ServletContext对象无次概念。

RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或

jsp。它有两个方法:


1.void forward(ServletRequest request,ServletResponse response)
用来传递request的,可以一个Servlet接收request请求,另一个Servlet用这个request请求来产生response。request传递的请求,response是客户端返回的信息。forward要在response到达客户端之前调用,也就是 before response body output has been flushed。如果不是的话,它会报出异常。


2.void include(ServletRequest request,ServletResponse response)
用来记录保留request和response,以后不能再修改response里表示状态的信息。

如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:
1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).

2. 调用ServletContext.getRequestDispatcher(String url)方法。

eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,response);

http://lanew.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-3690834-uid-327434.html

二者区别:
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参
数,如:
url?id=1.
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求
能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而
sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
更具体来说就是这样的:
redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后
服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面
收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页
面可直接用request.getAttribute获得数据。
最基本的用法就如上了,其他的一些应注意的地方如下:
跳转方式
http://localhost:8080/Test应用
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何
URL。
表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如 http://localhost:8080/Test
用(则提交至 http://localhost:8080/uu);
Forward代码中的"/uu"则代表相对与WEB应用的路径。如 http://localhost:8080/Test应用(则提交至
http://localhost:8080/Test/uu);
(运用RequestDispatcher接口的Forward)方法
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,
同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过
response.setAttribute("name",name)来传至下一个页面.
重定向后浏览器地址栏URL不变.
只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用
forward方法前必须先清空缓冲区。
"/"代表相对与web应用路径
RequestDispatcher rd = request.getRequestDispatcher("/ooo");
rd.forward(request, response);提交至 http://localhost:8080/Test/ooo
RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");
rd.forward(request, response);提交至 http://localhost:8080/Test/ooo
RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");(TestServlet为一个
<servlet-name>)
rd.forward(request, response);提交至名为TestServlet的servlet
如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,
这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
http://localhost:8080/Test/gw/page.jsp中转发
<jsp:forward page="OtherPage.jsp"/>在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp");
"/OtherPage.jsp"提交到 http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到 http://localhost:8080/Test/gw/OtherPage.jsp
(运用HttpServletResponse接口的sendRedirect)方法302
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,
同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
绝对路径:response.sendRedirect(" http://www.brainysoftware.com
根路径:response.sendRedirect("/ooo")发送至 http://localhost:8080/ooo
相对路径:response.sendRedirect("ooo")发送至 http://localhost:8080/Test/ggg/ooo,
sendRedirect等同于此方式
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
(Meta Refresh)方法200
这种方法是由HTML提供的,Meta本身就是HTML标签。使用方法是:<meta http-equiv="refresh" content="5;
url=http://www.dreamdu.com/" />
相应的java代码
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);
------------------------------------------------------------------------------------------------
--------------------------
使用response.sendRedirect()地址栏将改变
使用request.getRequestDispatcher().forward(request,response)地址栏中的信息保持不变.
------------------------------------------------------------------------------------------------
--------------------------
request.setAttribute存的东西
只用通过方法2跳转 才能在新页取出来

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 
response.sendRedirect()是重新定向,前后页面不是一个request。

2.RequestDispatcher.forward()是在服务器端运行; 
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成. 

3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而

ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为

ServletRequest具有相对路径的概念;而ServletContext对象无此概念。

RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或

jsp。它有两个方法:


2.void include(ServletRequest request,ServletResponse response) 
用来记录保留request和response,以后不能再修改response里表示状态的信息。

二者区别: 
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参 
数,如: 
url?id=1. 
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求 
能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而 
sendRedirect()会新建request对象,所以上一个request中的数据会丢失。 
更具体来说就是这样的: 
redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后 
服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的. 
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的响应. 这时页面 
收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页 
面可直接用request.getAttribute获得数据。 


 
 
重定向的重要应用:
 
使用重定向技术实现超链接的数据传递
<a href="color.jsp?color=黄色">黄色</a>  
 
使用超链接进行数据传递时,采用的是get方式提交请求,如果在传递数据中存在中文,就会造成乱码,因为request.setCharacterEncoding("utf-8")只适用于post方法提交 所以可以通过 设置tomcat字符集实现
当传递多个数据时,可以用&连接
<a href="color.jsp?color=黄色&id=1">黄色</a>  

Session
//设置10分钟后失效
session.setMaxInactiveInterval(10*60);  
也可以在项目的web.xml中设置  代码片段如下:
<session-config>
    <session-timeout>30</session-timeout>       ------这里的单位是分钟  系统默认会话超时是30分钟  0表示失效   -1表示永不超时
</session-config>
 
使整个session会话失效:session.invalidate();
如果只想清空session的某个对象 ,则可以调用session.removeAttribute(String key)方法,将指定的对象从session中清除
此时session对象仍然有效
1、概念:Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,session指的是HttpSession类的对象,这个概念到此结束了,也许会很模糊,但只有看完本文,才能真正有个深刻理解。
 
2、Session创建的时间是:
JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
 
引申:
2)、当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:
Cookie:JSESSIONID=客户端第一次拿到的session ID
这样,服务器端在接到请求时候,就会收到session ID,并根据ID在内存中找到之前创建的session对象,提供给请求使用。这也是session使用的基本原理----搞不懂这个,就永远不明白session的原理。
下面是两次请求同一个jsp,请求头信息:
通过图可以清晰发现,第二次请求的时候,已经添加session ID的信息。
 
3、Session删除的时间是:
1)Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间。
2)程序调用HttpSession.invalidate()
3)服务器关闭或服务停止
 
4、session存放在哪里:服务器端的内存中。不过session可以通过特殊的方式做持久化管理。
 
5、session的id是从哪里来的,sessionID是如何使用的:当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象,当浏览器下次(session继续有效时)请求别的资源的时候,浏览器会偷偷地将sessionID放置到请求头中,服务器接收到请求后就得到该请求的sessionID,服务器找到该id的session返还给请求者(Servlet)使用。一个会话只能有一个session对象,对session来说是只认id不认人。
 
6、session会因为浏览器的关闭而删除吗?
不会,session 存在于服务器内存中

ServletContext application=this.getServletContext();
            List<User> listUser = (List<User>)application.getAttribute("currentListUser");
            if(listUser == null){
                listUser = new ArrayList<User>();
            }
            listUser.add(user);
            application.setAttribute("currentListUser", listUser);  
 
 
 

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。

request.getRequestDispather();返回的是一个RequestDispatcher对象。

2.RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;
而HttpServletResponse.sendRedirect()则不是。

3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而

ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为

ServletRequest具有相对路径的概念;而ServletContext对象无次概念。

RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或

jsp。它有两个方法:


1.void forward(ServletRequest request,ServletResponse response)
用来传递request的,可以一个Servlet接收request请求,另一个Servlet用这个request请求来产生response。request传递的请求,response是客户端返回的信息。forward要在response到达客户端之前调用,也就是 before response body output has been flushed。如果不是的话,它会报出异常。


2.void include(ServletRequest request,ServletResponse response)
用来记录保留request和response,以后不能再修改response里表示状态的信息。

如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:
1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).

2. 调用ServletContext.getRequestDispatcher(String url)方法。

eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,response);

http://lanew.blog.ccidnet.com/blog-htm-do-showone-type-blog-itemid-3690834-uid-327434.html

二者区别:
response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参
数,如:
url?id=1.
request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求
能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而
sendRedirect()会新建request对象,所以上一个request中的数据会丢失。
更具体来说就是这样的:
redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后
服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.
forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面
收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页
面可直接用request.getAttribute获得数据。
最基本的用法就如上了,其他的一些应注意的地方如下:
跳转方式
http://localhost:8080/Test应用
运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何
URL。
表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如 http://localhost:8080/Test
用(则提交至 http://localhost:8080/uu);
Forward代码中的"/uu"则代表相对与WEB应用的路径。如 http://localhost:8080/Test应用(则提交至
http://localhost:8080/Test/uu);
(运用RequestDispatcher接口的Forward)方法
forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,
同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过
response.setAttribute("name",name)来传至下一个页面.
重定向后浏览器地址栏URL不变.
只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用
forward方法前必须先清空缓冲区。
"/"代表相对与web应用路径
RequestDispatcher rd = request.getRequestDispatcher("/ooo");
rd.forward(request, response);提交至 http://localhost:8080/Test/ooo
RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");
rd.forward(request, response);提交至 http://localhost:8080/Test/ooo
RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");(TestServlet为一个
<servlet-name>)
rd.forward(request, response);提交至名为TestServlet的servlet
如果在<jsp:forward>之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,
这一点应该特别注意。
另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交
http://localhost:8080/Test/gw/page.jsp中转发
<jsp:forward page="OtherPage.jsp"/>在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp");
"/OtherPage.jsp"提交到 http://localhost:8080/Test/OtherPage.jsp
"OtherPage.jsp"提交到 http://localhost:8080/Test/gw/OtherPage.jsp
(运用HttpServletResponse接口的sendRedirect)方法302
是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,
同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:
绝对路径:response.sendRedirect(" http://www.brainysoftware.com
根路径:response.sendRedirect("/ooo")发送至 http://localhost:8080/ooo
相对路径:response.sendRedirect("ooo")发送至 http://localhost:8080/Test/ggg/ooo,
sendRedirect等同于此方式
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
response.setHeader("Location",newLocn);
(Meta Refresh)方法200
这种方法是由HTML提供的,Meta本身就是HTML标签。使用方法是:<meta http-equiv="refresh" content="5;
url=http://www.dreamdu.com/" />
相应的java代码
String content=stayTime+";URL="+URL;
response.setHeader("REFRESH",content);
------------------------------------------------------------------------------------------------
--------------------------
使用response.sendRedirect()地址栏将改变
使用request.getRequestDispatcher().forward(request,response)地址栏中的信息保持不变.
------------------------------------------------------------------------------------------------
--------------------------
request.setAttribute存的东西
只用通过方法2跳转 才能在新页取出来

猜你喜欢

转载自www.cnblogs.com/ct0217/p/9206484.html
今日推荐