从一个jsp页面跳转到另一个jsp页面时的参数传递

转载 2017年07月24日 19:51:31

  1.从一个jsp页面跳转到另一个jsp页面时的参数传递

    (1)使用request对象获取客户端提交的信息
    login.jsp页面代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <form action="getinfo.jsp">  
  7.             <input type="text" name="name">  
  8.             <input type="submit" value="Enter" name="submit">  
  9.         </form>  
  10.     </body>  
  11. </html>  
    getinfo.jsp页面代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <p>获取文本框提交的信息:  
  7.         <%  
  8.             String textContent = request.getParameter("name");  
  9.          %>  
  10.          <br/>  
  11.          <%=textContent%>  
  12.            
  13.         </p>获取按钮的名字:  
  14.          <%  
  15.             String buttonName = request.getParameter("submit");  
  16.           %>  
  17.          <br/>  
  18.          <%=buttonName%>  
  19.           
  20.     </body>  
  21. </html>  
                                                       
    (2)使用session对象获取从客户端提交的信息
    session1.jsp页面代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <form action="session2.jsp" method="post">  
  7.             请输入您的姓名:  
  8.             <input type="text" name="thename">  
  9.             <input type="submit" value="submit">  
  10.         </form>  
  11.     </body>  
  12. </html>  

    session2.jsp通过request对象提取session1.jsp表单中的thename值,并将其保存到session对象中,session2.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.             String name = request.getParameter("thename");  
  8.             session.setAttribute("thename",name);  
  9.          %>  
  10.          您的姓名是:<%=name%>  
  11.          <p>  
  12.         <form action="session3.jsp?pwd=123456" method="post">  
  13.             您喜欢吃什么?  
  14.             <input type="text" name="food"/>  
  15.             <p>  
  16.             <input type="submit" value="submit">  
  17.         </form>          
  18.     </body>  
  19. </html>  

    session3.jsp的主要任务是显示结果,它从session对象提取thename的值并显示它,以证明在多个页面中可以通过session对象存储和维持信息,session3.jsp代码如下:
[java] view plain copy
  1. <pre name="code" class="java"><%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.             String food = request.getParameter("food");  
  8.             String name = (String)session.getAttribute("thename");  
  9.             String pwd = request.getParameter("pwd");  
  10.          %>  
  11.          您的姓名是:<%=name%>  
  12.          <p>  
  13.          您喜欢吃:<%=food%>  
  14.          <p>  
  15.          您的密码是:<%=pwd%>  
  16.     </body>  
  17. </html></pre>  
  18. <pre></pre>  
  19. <pre></pre>  
  20. <pre></pre>  
  21. <pre></pre>  
  22. <pre></pre>  
  23. <pre></pre>  
  24. <pre></pre>  
    程序运行结果如图2所示:

    (3)利用隐藏域传递数据
    使用隐藏空间记录用户提交日期的hiddenindex.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <form action="hidden.jsp" method="post" name="form1">  
  7.             <!-- 隐藏字段,系统时间,并转换为毫秒数 -->  
  8.             <input type="hidden" name="time" value="<%=new java.util.Date()%>">  
  9.             <p>  
  10.                 请输入您的姓名:<input type="text" name="name">  
  11.             </p>  
  12.             <input type="submit" name="submit" value="submit">  
  13.         </form>  
  14.     </body>  
  15. </html>  

     显示隐藏空间信息的hidden.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.             String name = request.getParameter("name");  
  8.             String date = request.getParameter("time");  
  9.         %>  
  10.         <p>您的姓名是:  
  11.             <%=name %>  
  12.         </p>  
  13.         <p>提交时的系统时间为:  
  14.             <%=date %>  
  15.         </p>  
  16.     </body>  
  17. </html>  

    程序运行结果如下:
 
                                        
    使用隐藏域的一个缺点是用户可通过查看网页源程序读到隐藏域的值。
    (4)通过超链接传递数据
    建立链接到其他分页的超级链接page.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <%  
  5.     int PageCount = 15;  
  6. %>  
  7. <html>  
  8.     <body>  
  9.         <table>  
  10.             <tr>  
  11.                 <td>  
  12.                     <a href=showpage.jsp?ToPage=<%=1%>>到第1页</a>  
  13.                 </td>  
  14.                 <td>  
  15.                     <a href=showpage.jsp?ToPage=<%=PageCount%>>到最后一页</a>  
  16.                 </td>  
  17.             </tr>  
  18.         </table>        
  19.     </body>  
  20. </html>  

    接收显示分页showpage.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.         String toPage = request.getParameter("ToPage");  
  8.         out.println("第" + toPage + "页");  
  9.         %>  
  10.     </body>  
  11. </html>  

    运行结果如下:

    2.jsp页面传递参数给servlet

    (1)使用request对象接收参数
    新建名为ForwardServlet的Servlet类,代码如下:
[java] view plain copy
  1. package com.shi.servlet;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. /** 
  11.  * 本类用来获得表单请求信息,并根据请求信息转发页面 
  12.  */  
  13. public class ForwardServlet extends HttpServlet  
  14. {  
  15.     private static final long serialVersionUID = 1L;  
  16.   
  17.     /** 
  18.      * 构造函数 
  19.      */  
  20.     public ForwardServlet()  
  21.     {  
  22.         super();  
  23.     }  
  24.       
  25.     /** 
  26.      * 初始化 
  27.      */  
  28.     public void init() throws ServletException  
  29.     {}  
  30.       
  31.     /** 
  32.      * doGet()方法 
  33.      */  
  34.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  35.     {  
  36.         doPost(request, response);  
  37.     }  
  38.       
  39.     /** 
  40.      * doPost()方法 
  41.      */  
  42.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  43.     {  
  44.         String name = request.getParameter("name");  
  45.         String pwd = request.getParameter("pwd");  
  46.         if((name!=null && !name.equals("")) && (pwd!=null && !pwd.equals("")))  
  47.         {  
  48.             if(name.equals("mr")&&pwd.equals("123"))  
  49.             {  
  50.                 request.getRequestDispatcher("success.jsp").forward(request, response);  
  51.             }  
  52.             else  
  53.             {  
  54.                 request.getRequestDispatcher("error.jsp").forward(request, response);  
  55.             }  
  56.         }  
  57.     }  
  58.       
  59.     /** 
  60.      * 销毁 
  61.      */  
  62.     public void destroy()  
  63.     {  
  64.         super.destroy();  
  65.     }  
  66. }  

    在web.xml中配置ForwardServlet类,代码如下:
[java] view plain copy
  1. <?xml version="1.0" encoding="GB2312"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.       
  7.     <!-- 配置servlet -->  
  8.     <servlet>  
  9.         <servlet-name>ForwardServlet</servlet-name>  
  10.         <servlet-class>com.shi.servlet.ForwardServlet</servlet-class>  
  11.     </servlet>  
  12.     <servlet-mapping>  
  13.         <servlet-name>ForwardServlet</servlet-name>  
  14.         <url-pattern>/forward</url-pattern>  
  15.     </servlet-mapping>  
  16.       
  17.     <welcome-file-list>  
  18.         <welcome-file>index.jsp</welcome-file>  
  19.     </welcome-file-list>  
  20. </web-app>  
    新建index.jsp,其中<form>中的action属性值为Servlet类在web.xml中配置的url,提交方式为post,代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <form action="forward" method="post">  
  7.             <table align="center">  
  8.                 <tr>  
  9.                     <td>用户名:</td>  
  10.                     <td>  
  11.                         <input type="text" name="name"/>  
  12.                     </td>  
  13.                 </tr>  
  14.                 <tr>  
  15.                     <td>密码:</td>  
  16.                     <td>  
  17.                         <input type="password" name="pwd"/>  
  18.                     </td>  
  19.                 </tr>  
  20.                 <tr>  
  21.                     <td colspan="2">  
  22.                         <input type="submit" value="登录"/>  
  23.                     </td>  
  24.                 </tr>  
  25.             </table>  
  26.         </form>  
  27.     </body>  
  28. </html>  

    登录成功页面success.jsp,代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         欢迎<%=request.getParameter("name") %>,登录成功!  
  7.     </body>  
  8. </html>  
    程序的运行结果图5所示:
    (2)使用session对象,url,form表单传递参数
    在jsp2servlet.jsp中,分别使用request对象,session对象,url,form表单设置需要传递的参数,代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.         session.setAttribute("testSession","Hello session");  
  8.         request.setAttribute("testRequest","Hello request");  
  9.         %>  
  10.         <a href="http://localhost:8080/086/jsp2servlet?hrefAction=toServlet">单击此处</a>  
  11.         <form action="jsp2servlet?action=toServlet" method="post" name="form1">  
  12.             <input type="text" name="username"/>  
  13.             <input type="submit" value="submit"/>  
  14.         </form>  
  15.     </body>  
  16. </html>  
    在Jsp2Servlet中接收jsp页面中传递的参数并将其显示,代码如下:
[java] view plain copy
  1. package com.shi.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class Jsp2Servlet extends HttpServlet  
  12. {  
  13.     /** 
  14.      * 自动生成 
  15.      */  
  16.     private static final long serialVersionUID = 1L;  
  17.   
  18.     /** 
  19.      * 构造函数 
  20.      */  
  21.     public Jsp2Servlet()  
  22.     {  
  23.         super();  
  24.     }  
  25.       
  26.     /** 
  27.      * 初始化 
  28.      */  
  29.     public void init()  
  30.     {}  
  31.       
  32.     /** 
  33.      * doGet() 
  34.      */  
  35.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  36.     {  
  37.         doPost(request, response);  
  38.     }  
  39.       
  40.     /** 
  41.      * doPost() 
  42.      */  
  43.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  44.     {  
  45.         String strSession = (String)request.getSession().getAttribute("testSession");         
  46.         String strRequest = (String)request.getAttribute("testRequest");          
  47.         String strHref = request.getParameter("hrefAction");          
  48.         String strForm = request.getParameter("action");          
  49.         String username = request.getParameter("username");  
  50.           
  51.         PrintWriter out = response.getWriter();  
  52.         out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");  
  53.         out.println("<html>");  
  54.         out.println("<body>");  
  55.         out.println("保存到session中的内容: " + strSession + "<br>");  
  56.         out.println("保存到request中的内容:" + strRequest + "<br>");  
  57.         out.println("超链接中传递的参数值为:" + strHref + "<br>");  
  58.         out.println("form表单中传递的action值为:" + strForm + "<br>");  
  59.         out.println("form表单内input标签中username的值: " + username + "<br>");  
  60.         out.println("</body>");  
  61.         out.println("</html>");         
  62.     }  
  63.       
  64.     /** 
  65.      * 销毁 
  66.      */  
  67.     public void destroy()  
  68.     {  
  69.         super.destroy();  
  70.     }  
  71. }  
    程序运行结果如图6所示:
    servlet无法获取request.setAttribute()中的内容,因为在jsp2servlet.jsp中提交时,生成的一个新的request,因此无法取到jsp页面中request.setAttribute()中设置的值。

    3.从servlet到jsp页面中传递参数

    从servlet到jsp页面传递参数,可以使用URL,request对象,session对象,新建Servlet2Jsp.java,代码如下:
[java] view plain copy
  1. package com.shi.servlet;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. public class Servlet2Jsp extends HttpServlet  
  11. {  
  12.     /** 
  13.      * 自动生成 
  14.      */  
  15.     private static final long serialVersionUID = 1L;  
  16.   
  17.     /** 
  18.      * 构造函数 
  19.      */  
  20.     public Servlet2Jsp()  
  21.     {  
  22.         super();  
  23.     }  
  24.       
  25.     /** 
  26.      * 初始化 
  27.      */  
  28.     public void init()  
  29.     {}  
  30.       
  31.     /** 
  32.      * doGet() 
  33.      */  
  34.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  35.     {  
  36.         doPost(request, response);  
  37.     }  
  38.       
  39.     /** 
  40.      * doPost() 
  41.      */  
  42.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  43.     {  
  44.         String url = "result.jsp?first=传递第一个参数&second=传递第二个参数";  
  45.         String strRequest = "request传值";  
  46.         String strSession = "session传值";  
  47.         request.setAttribute("strRequest", strRequest);  
  48.         request.getSession().setAttribute("strSession", strSession);  
  49.           
  50.         /** 
  51.          * 客户端跳转:效率低 
  52.          * session范围属性,url中的参数会传递下去,request范围属性不传递 
  53.          */  
  54.         //response.sendRedirect(url);  
  55.           
  56.         /** 
  57.          * 服务器端跳转:常用,效率高 
  58.          * request范围属性,session范围属性,url中的参数会传递 
  59.          */  
  60.         request.getRequestDispatcher(url).forward(request, response);  
  61.     }  
  62.       
  63.     /** 
  64.      * 销毁 
  65.      */  
  66.     public void destroy()  
  67.     {  
  68.         super.destroy();  
  69.     }  
  70. }  


    在web.xml中配置该servlet后,新建参数接收页result.jsp,代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.         String strURL = request.getParameter("first");  
  8.         String strRequest = (String)request.getAttribute("strRequest");  
  9.         String strSession = (String)request.getSession().getAttribute("strSession");  
  10.           
  11.         %>  
  12.         <p>  
  13.             URL中取得的属性值为:<%=strURL%>  
  14.         </p>        
  15.         <p>  
  16.             request中取得的属性值为:<%=strRequest%>  
  17.         </p>  
  18.         <p>  
  19.             session中取得的属性值为:<%=strSession%>  
  20.         </p>  
  21.     </body>  
  22. </html>  
    程序的运行结果如图7所示:

    4.从一个servlet到另一个servlet时的参数传递

    (1)通过超链接和表单传递数据
    通过超链接后面给定要传递参数的值,但长度有限制,通过超链接和表单传递数据,使用request.getParamter()方法,代码如下:
[java] view plain copy
  1. package com.shi.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class ServletA extends HttpServlet  
  12. {  
  13.     /** 
  14.      * 自动生成 
  15.      */  
  16.     private static final long serialVersionUID = 1L;  
  17.   
  18.     /** 
  19.      * 构造函数 
  20.      */  
  21.     public ServletA()  
  22.     {  
  23.         super();  
  24.     }  
  25.       
  26.     /** 
  27.      * 初始化 
  28.      */  
  29.     public void init()  
  30.     {}  
  31.       
  32.     /** 
  33.      * doGet() 
  34.      */  
  35.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  36.     {  
  37.         doPost(request, response);  
  38.     }  
  39.       
  40.     /** 
  41.      * doPost() 
  42.      */  
  43.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  44.     {  
  45.         response.setContentType("text/html");  
  46.         PrintWriter out = response.getWriter();  
  47.         String name = "hello, servlet";  
  48.         out.println("<html>");  
  49.         out.println("<body>");  
  50.         /** 
  51.          * 超链接 
  52.          */  
  53.         out.println("<a href='ServletB?name="+name+"'>this is a test</a>");  
  54.         /** 
  55.          * 表单 
  56.          */  
  57.         out.println("<form action='ServletB' method='post'>");          
  58.         out.println("用户名:");  
  59.         out.println("<input type='text' name='username'>");  
  60.         out.println("<input type='submit' vlue='提交'>");  
  61.         out.println("</form>");  
  62.         out.println("</body>");  
  63.         out.println("</html>");  
  64.         out.flush();  
  65.   
  66.     }  
  67.       
  68.     /** 
  69.      * 销毁 
  70.      */  
  71.     public void destroy()  
  72.     {  
  73.         super.destroy();  
  74.     }  
  75. }  
    接收servlet中传递参数的代码如下:
[java] view plain copy
  1. package com.shi.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class ServletB extends HttpServlet  
  12. {  
  13.     /** 
  14.      * 自动生成 
  15.      */  
  16.     private static final long serialVersionUID = 1L;  
  17.   
  18.     /** 
  19.      * 构造函数 
  20.      */  
  21.     public ServletB()  
  22.     {  
  23.         super();  
  24.     }  
  25.       
  26.     /** 
  27.      * 初始化 
  28.      */  
  29.     public void init()  
  30.     {}  
  31.       
  32.     /** 
  33.      * doGet() 
  34.      */  
  35.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  36.     {  
  37.         doPost(request, response);  
  38.     }  
  39.       
  40.     /** 
  41.      * doPost() 
  42.      */  
  43.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  44.     {  
  45.         String name = request.getParameter("name");  
  46.         String username = request.getParameter("username");  
  47.   
  48.           
  49.         response.setContentType("text/html;charset=gb2312");  
  50.         PrintWriter out = response.getWriter();  
  51.         out.println("<html>");  
  52.         out.println("<body>");  
  53.         out.println("超链接传递的参数值为:" + name);  
  54.         out.println("form表单中提交的用户名为:" + username);  
  55.         out.println("</body>");  
  56.         out.println("</html>");  
  57.         out.flush();  
  58.     }  
  59.       
  60.     /** 
  61.      * 销毁 
  62.      */  
  63.     public void destroy()  
  64.     {  
  65.         super.destroy();  
  66.     }  
  67. }  

    程序运行结果如图8所示:
    (2)使用setAttribute()和getAttribute()方法传递参数
    设置参数的ServletA代码如下:
[java] view plain copy
  1. package com.shi.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class ServletA extends HttpServlet  
  12. {  
  13.     /** 
  14.      * 自动生成 
  15.      */  
  16.     private static final long serialVersionUID = 1L;  
  17.   
  18.     /** 
  19.      * 构造函数 
  20.      */  
  21.     public ServletA()  
  22.     {  
  23.         super();  
  24.     }  
  25.       
  26.     /** 
  27.      * 初始化 
  28.      */  
  29.     public void init()  
  30.     {}  
  31.       
  32.     /** 
  33.      * doGet() 
  34.      */  
  35.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  36.     {  
  37.         doPost(request, response);  
  38.     }  
  39.       
  40.     /** 
  41.      * doPost() 
  42.      */  
  43.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  44.     {  
  45.         /** 
  46.          * setAttribute()和getAttribute() 
  47.          */  
  48.         String data = "This is a test, we need more test for this";  
  49.         request.setAttribute("strAtt", data);  
  50.         request.getRequestDispatcher("/ServletB").forward(request, response);  
  51.     }  
  52.       
  53.     /** 
  54.      * 销毁 
  55.      */  
  56.     public void destroy()  
  57.     {  
  58.         super.destroy();  
  59.     }  
  60. }  
    获取参数的ServletB代码如下:
[java] view plain copy
  1. package com.shi.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. public class ServletB extends HttpServlet  
  12. {  
  13.     /** 
  14.      * 自动生成 
  15.      */  
  16.     private static final long serialVersionUID = 1L;  
  17.   
  18.     /** 
  19.      * 构造函数 
  20.      */  
  21.     public ServletB()  
  22.     {  
  23.         super();  
  24.     }  
  25.       
  26.     /** 
  27.      * 初始化 
  28.      */  
  29.     public void init()  
  30.     {}  
  31.       
  32.     /** 
  33.      * doGet() 
  34.      */  
  35.     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  36.     {  
  37.         doPost(request, response);  
  38.     }  
  39.       
  40.     /** 
  41.      * doPost() 
  42.      */  
  43.     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  44.     {  
  45.         String strAtt = (String)request.getAttribute("strAtt");  
  46.           
  47.         response.setContentType("text/html;charset=gb2312");  
  48.         PrintWriter out = response.getWriter();  
  49.         out.println("<html>");  
  50.         out.println("<body>");  
  51.         out.println("getAttribute()得到的数据值为:" + strAtt);       
  52.         out.println("</body>");  
  53.         out.println("</html>");  
  54.         out.flush();  
  55.     }  
  56.       
  57.     /** 
  58.      * 销毁 
  59.      */  
  60.     public void destroy()  
  61.     {  
  62.         super.destroy();  
  63.     }  
  64. }  
    程序的运行结果如图9所示:
  
    5.JSP页面跳转方法
    (1)RequestDispatcher.forward()
    在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP或普通HTML文件,即你的form提交至a.jsp,在a.jsp用到了forward()重定向到b.jsp,此时form提交的所有信息在b.jsp都可以获得,参数自动传递。但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法再后面带参数传递,比如servlet?name=tom,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面。
    重定向后浏览器地址栏URL不变。
    通常在Servlet中使用,不在jsp中使用。

    (2)response.sendRedirect()
    在用户的浏览器端工作,sengRedirect()可以带参数传递,比如servlet?name=tom传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向至有frame的jsp文件。
    重定向后在浏览器地址栏上会出现重定向页面的URL。
    上述两种方式代码见图7。
    由于response是jsp页面中的隐含对象,故在jsp页面中可以用response.sendRedirect()直接实现重定位。
    注意:
    ①.使用response.sendRedirect()时,前面不能有HTML输出
    这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的Server都有cache机制,一般在8K(JSP SERVER),这意味着,除非你关闭了cache,或者你用out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
    ②.response.sendRedirect()之后,应该紧跟一句return
    我们已经知道response.sendRedirect()是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后面的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
    比较:
    ①.Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会出现转向后的地址
    ②.response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
   前者更加高效,在前者可以满足需要时,尽量使用RequestDispatcher.forward()方法。
    注:在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用HttpServletResponse.sendRedirect()方法。

    (3)<jsp:forward page=""/>
    它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。
    如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出至客户端,那么该语句将不起作用,这一点应该特别注意。
    另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交。
    测试代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <head>  
  6.         <link rel="stylesheet" type="text/css" href="css/style.css">  
  7.     </head>  
  8.     <body>  
  9.         <jsp:forward page="UpdateServlet">  
  10.             <jsp:param value="list" name="action" />  
  11.         </jsp:forward>  
  12.     </body>  
  13. </html>  
    程序运行结果如图10所示:
    (4)修改HTTP header的Location属性来重定向
    通过设置直接修改地址栏来实现页面的重定向。
    索引页1.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.         response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);  
  8.         String newLocn = "2.jsp";  
  9.         response.setHeader("Location",newLocn);  
  10.         %>  
  11.     </body>  
  12. </html>  
    转向页2.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         从1.jsp跳转至此页  
  7.     </body>  
  8. </html>  
    程序运行结果如图11所示:
   
    (5)JSP中实现在某页面停留若干秒后,自动重定向到另一页面
    在jsp文件中,下面的代码:
[java] view plain copy
  1. <meta http-equiv="refresh" content="5; url=target.jsp"  

    含义是:在5秒后正在浏览的页面将会自动变为target.jsp页。代码中5为刷新的延迟时间,以秒为单位。target.jsp为你想转向的目标页,若为本页则自动刷新本页。
    由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
    索引页5_1.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         <%  
  7.         String content = "5; url=5_2.jsp";  
  8.         response.setHeader("REFRESH",content);        
  9.         %>  
  10.         5_1.jsp页面,5秒后转向5_2.jsp页面。  
  11.     </body>  
  12. </html>  

    转向页5_2.jsp代码如下:
[java] view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.     <body>  
  6.         从5_1.jsp转到的页面  
  7.     </body>  
  8. </html>  
    程序运行结果如下:



    参考资料:

    [1].五种JSP页面跳转方法 http://developer.51cto.com/art/200902/109939.htm

转载自:http://blog.csdn.net/ssy_shandong/article/details/9328985/

servlet、jsp跳转(传值)总结及URL传参数

Servlet传值总结 1) redirect方式[效率不高]   request和response没有传给目标页面   response.sendRedirect("/a.jsp");   ...
  • qq_23052951
  • qq_23052951
  • 2016年04月30日 21:01
  • 3257

JSP 使用URL传递多个参数

c#中使用Java语句利用URL传递多个参数, 原始语句:String str = "window.showModalDialog('xmjl_editor.aspx?id=" + txt_nodei...
  • whx_1113
  • whx_1113
  • 2010年11月21日 10:34
  • 5798

JSP中四种传递参数的方法

今天老师讲了jsp中四种传递参数的方法,我觉得总结一下,挺好的,以备后用! 1、form表单 2、request.setAttribute();和request.getAttribute(); ...
  • hackerain
  • hackerain
  • 2011年09月14日 23:04
  • 70637

11. jsp与servlet之间页面跳转及参数传递实例

1.从一个jsp页面跳转到另一个jsp页面时的参数传递     (1)使用request对象获取客户端提交的信息     login.jsp页面代码如下: ...
  • ssy_shandong
  • ssy_shandong
  • 2013年07月17日 16:24
  • 144041

jsp页面间的传值方法,jsp 获取 url参数

直接在URL请求后添加 如:直接传递参数 特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码: response.sendRedirect("t...
  • lili518
  • lili518
  • 2017年06月06日 10:35
  • 1142

jsp url 传多个参数时出现“&amp”,得不到正确的传递参数

在使用JSP的s:param传参数时,一个参数可以成功,但多个参数时就不成功了,开始第一感觉是jsp的url不能使用s:param传多个参数,但是在网上搜到的结果是可以,传多个参数,而且这是strut...
  • AMWIHIHC
  • AMWIHIHC
  • 2009年05月09日 22:03
  • 15418

JSP页面之间传递中文参数的解决方法

本文转载自: 关于JSP页面之间传值的中文乱码总结 用过滤器来解决JSP中文乱码问题 URLEncoder.encode与URLDecoder.docode传递中文参数编码与解码 URLEnco...
  • gongxifacai_believe
  • gongxifacai_believe
  • 2016年06月07日 18:42
  • 8930

JSP页面之间传值的方法总结

B/S页面间通信 HTTP是无状态的协议。Web页面本身无法向下一个页面传递信息,如果需要让下一个页面得知该页面中的值,除非通过服务器。因此,Web页面保持状态并传递给其它页面,是一个重要的技术。 W...
  • HLK_1135
  • HLK_1135
  • 2016年10月13日 21:03
  • 11388

jsp页面跳转传值(变量)

最近写几个jsp页面,需要实现从URL获得参数,并将该参数在页面跳转的过程中进行参数的传递,实现如下: 首先从URL获得参数: 可以通过request.getParameter(“index”)来获得...
  • abbcbbd
  • abbcbbd
  • 2016年04月05日 16:04
  • 578

jsp页面间的传值方法

JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数。下面介绍一下实现的方法。(1)直接在URL请求后添加如:直接传递参数特别的在使用response.sendRedirec...
  • f_zhuimeng
  • f_zhuimeng
  • 2010年10月22日 15:06
  • 124089
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从一个jsp页面跳转到另一个jsp页面时的参数传递
举报原因:
原因补充:

(最多只允许输入30个字)