精华内容
下载资源
问答
  • 1.从一个jsp页面跳转到另一个jsp页面时的参数传递  (1)使用request对象获取客户端提交的信息  login.jsp页面代码如下: [java] view plain copy "java" import="java.util.*...

      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/

    展开全文
  • a.jsp页面写的是 ; charset=UTF-8" pageEncoding="UTF-8"%> <!... ; charset=UTF-8"> <title>Insert title here ... <jsp:forward page="b....标签跳转到页面的话,就会出现乱码。这是为什么呢?应该如何解决呢?
  • servlet中jsp跳转另一个jsp参数传递

    千次阅读 2018-02-28 10:15:58
    1.从一个jsp页面跳转到另一个jsp页面时的参数传递 (1)使用request对象获取客户端提交的信息 login.jsp页面代码如下:[java] view plain copy&lt;%@ page language="java" import="java....

    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.   
    [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 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>  
    
     
    
     
    
     
    
     
    
     
    
     
    
    
        程序运行结果如图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


    展开全文
  • 页面 "archivesInput.jsp?studentId=${studentId}">点击跳转   页面二 ${param.studentId} 获取参数studentId

    页面一

    <a href = "archivesInput.jsp?studentId=${studentId}">点击跳转</a>

     

    页面二

    ${param.studentId} 获取参数studentId

    展开全文
  • ${pageContext.request.contextPath}/foodtype_list?method=list">菜系管理这段代码如何跳转到相同下的foodlist_list.jsp页面直接这样跳转可以吗?我看到案例是/后面直接跟foodType?method也可以访问,为什么?_
  • JSP页面跳转页面带参数

    万次阅读 2014-12-10 19:11:00
    JSP页面跳转页面带参数

    1、

    <script type="text/javascript">
    window.location.href='index2.jsp?xxx=123'
    </script>

    或者

    2、<a href="index2.jsp?xxx=123">传参数测试</a>

    3、<jsp:forward page="index2.jsp">
           <jsp:param name="xxx" value="123" />
    </jsp:forward>

    都可以在 index2.jsp 页面中通过${param.xxx }或者 <%=request.getParameter("xxx") %> 都 可以 取得到

    注:

    param  它的取值范围Page,Request,Session,Application。 

    ${param.name}等价于request.getParameter("name"),{param[name]}也是一样的

    ${params.name}等价于request.getParameterValues("name")

    注意:

    1、${requestScope.name} 等价于 request.getAttribute("name")

    2、上面没有指出从哪个scope中取,所以按顺序检测那四个scope

    3、最好用${xxsScope.name} ,不用 ${param.name}


    展开全文
  • JSP界面中如何用a标签带参数跳转到控制器? 你好! 这是你第次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们...
  • ![图片说明](https://img-ask.csdn.net/upload/201911/11/1573458317_303227.png) web.xml —————————————————————————— ![图片说明]...
  • function directUrl() { window.location.href=”Servlet地址“ + 参数列表; return; } 两种跳转的方式 跳转路径为url中的路径 另外种使用javascript跳转
  • 一个jsp页面中如何把用户输入的值传递到另一个jsp页面呢? 我们可以通过form的方式:
  • 个jsp页面间跳转

    千次阅读 2018-11-29 13:30:58
    b=2 携带参数跳转。 那么在b页面中如何取出所携带的参数a、b中的值? 就我所知,有两种方式: 第种: 在b.jsp页面中,直接使用EL表达式,${param.a} 、${param.b};即可取出参数的值 其中的 param表示参数。 .....
  • Jquery实现一个jsp另一个jsp跳转并传参 jquery代码:  $(document).ready(function(){  $("#changnum").click(function(){  var devicedetailmodel = $("#devicedetailmodel").val();  document....