Jsp与servlet之间页面跳转及参数传递实例(转)

时间:2022-02-27 23:32:15

原网址:http://blog.csdn.net/ssy_shandong/article/details/9328985

分类: Java Web2013-07-17 16:24 16461人阅读 评论(12) 收藏 举报
 
 

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

    (1)使用request对象获取客户端提交的信息
    login.jsp页面代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <form action="getinfo.jsp">
  6. <input type="text" name="name">
  7. <input type="submit" value="Enter" name="submit">
  8. </form>
  9. </body>
  10. </html>

getinfo.jsp页面代码如下:

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

session2.jsp通过request对象提取session1.jsp表单中的thename值,并将其保存到session对象中,session2.jsp代码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. String name = request.getParameter("thename");
  7. session.setAttribute("thename",name);
  8. %>
  9. 您的姓名是:<%=name%>
  10. <p>
  11. <form action="session3.jsp?pwd=123456" method="post">
  12. 您喜欢吃什么?
  13. <input type="text" name="food"/>
  14. <p>
  15. <input type="submit" value="submit">
  16. </form>
  17. </body>
  18. </html>

session3.jsp的主要任务是显示结果,它从session对象提取thename的值并显示它,以证明在多个页面中可以通过session对象存储和维持信息,session3.jsp代码如下:

  1. <pre name="code" class="java"><%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. String food = request.getParameter("food");
  7. String name = (String)session.getAttribute("thename");
  8. String pwd = request.getParameter("pwd");
  9. %>
  10. 您的姓名是:<%=name%>
  11. <p>
  12. 您喜欢吃:<%=food%>
  13. <p>
  14. 您的密码是:<%=pwd%>
  15. </body>
  16. </html></pre>
  17. <pre></pre>
  18. <pre></pre>
  19. <pre></pre>
  20. <pre></pre>
  21. <pre></pre>
  22. <pre></pre>
  23. <pre></pre>
    程序运行结果如图2所示:
Jsp与servlet之间页面跳转及参数传递实例(转)
    (3)利用隐藏域传递数据
    使用隐藏空间记录用户提交日期的hiddenindex.jsp代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <form action="hidden.jsp" method="post" name="form1">
  6. <!-- 隐藏字段,系统时间,并转换为毫秒数 -->
  7. <input type="hidden" name="time" value="<%=new java.util.Date()%>">
  8. <p>
  9. 请输入您的姓名:<input type="text" name="name">
  10. </p>
  11. <input type="submit" name="submit" value="submit">
  12. </form>
  13. </body>
  14. </html>

显示隐藏空间信息的hidden.jsp代码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. String name = request.getParameter("name");
  7. String date = request.getParameter("time");
  8. %>
  9. <p>您的姓名是:
  10. <%=name %>
  11. </p>
  12. <p>提交时的系统时间为:
  13. <%=date %>
  14. </p>
  15. </body>
  16. </html>

程序运行结果如下:

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

接收显示分页showpage.jsp代码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. String toPage = request.getParameter("ToPage");
  7. out.println("第" + toPage + "页");
  8. %>
  9. </body>
  10. </html>

运行结果如下:

Jsp与servlet之间页面跳转及参数传递实例(转)

2.jsp页面传递参数给servlet

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

在web.xml中配置ForwardServlet类,代码如下:

  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. <!-- 配置servlet -->
  7. <servlet>
  8. <servlet-name>ForwardServlet</servlet-name>
  9. <servlet-class>com.shi.servlet.ForwardServlet</servlet-class>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>ForwardServlet</servlet-name>
  13. <url-pattern>/forward</url-pattern>
  14. </servlet-mapping>
  15. <welcome-file-list>
  16. <welcome-file>index.jsp</welcome-file>
  17. </welcome-file-list>
  18. </web-app>

新建index.jsp,其中<form>中的action属性值为Servlet类在web.xml中配置的url,提交方式为post,代码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <form action="forward" method="post">
  6. <table align="center">
  7. <tr>
  8. <td>用户名:</td>
  9. <td>
  10. <input type="text" name="name"/>
  11. </td>
  12. </tr>
  13. <tr>
  14. <td>密码:</td>
  15. <td>
  16. <input type="password" name="pwd"/>
  17. </td>
  18. </tr>
  19. <tr>
  20. <td colspan="2">
  21. <input type="submit" value="登录"/>
  22. </td>
  23. </tr>
  24. </table>
  25. </form>
  26. </body>
  27. </html>

登录成功页面success.jsp,代码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. 欢迎<%=request.getParameter("name") %>,登录成功!
  6. </body>
  7. </html>

程序的运行结果图5所示:

Jsp与servlet之间页面跳转及参数传递实例(转)

(2)使用session对象,url,form表单传递参数

    在jsp2servlet.jsp中,分别使用request对象,session对象,url,form表单设置需要传递的参数,代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. session.setAttribute("testSession","Hello session");
  7. request.setAttribute("testRequest","Hello request");
  8. %>
  9. <a href="http://localhost:8080/086/jsp2servlet?hrefAction=toServlet">单击此处</a>
  10. <form action="jsp2servlet?action=toServlet" method="post" name="form1">
  11. <input type="text" name="username"/>
  12. <input type="submit" value="submit"/>
  13. </form>
  14. </body>
  15. </html>

在Jsp2Servlet中接收jsp页面中传递的参数并将其显示,代码如下:

  1. package com.shi.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class Jsp2Servlet extends HttpServlet
  9. {
  10. /**
  11. * 自动生成
  12. */
  13. private static final long serialVersionUID = 1L;
  14. /**
  15. * 构造函数
  16. */
  17. public Jsp2Servlet()
  18. {
  19. super();
  20. }
  21. /**
  22. * 初始化
  23. */
  24. public void init()
  25. {}
  26. /**
  27. * doGet()
  28. */
  29. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  30. {
  31. doPost(request, response);
  32. }
  33. /**
  34. * doPost()
  35. */
  36. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  37. {
  38. String strSession = (String)request.getSession().getAttribute("testSession");
  39. String strRequest = (String)request.getAttribute("testRequest");
  40. String strHref = request.getParameter("hrefAction");
  41. String strForm = request.getParameter("action");
  42. String username = request.getParameter("username");
  43. PrintWriter out = response.getWriter();
  44. out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
  45. out.println("<html>");
  46. out.println("<body>");
  47. out.println("保存到session中的内容: " + strSession + "<br>");
  48. out.println("保存到request中的内容:" + strRequest + "<br>");
  49. out.println("超链接中传递的参数值为:" + strHref + "<br>");
  50. out.println("form表单中传递的action值为:" + strForm + "<br>");
  51. out.println("form表单内input标签中username的值: " + username + "<br>");
  52. out.println("</body>");
  53. out.println("</html>");
  54. }
  55. /**
  56. * 销毁
  57. */
  58. public void destroy()
  59. {
  60. super.destroy();
  61. }
  62. }

程序运行结果如图6所示:

Jsp与servlet之间页面跳转及参数传递实例(转)
    servlet无法获取request.setAttribute()中的内容,因为在jsp2servlet.jsp中提交时,生成的一个新的request,因此无法取到jsp页面中request.setAttribute()中设置的值。
 

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

    从servlet到jsp页面传递参数,可以使用URL,request对象,session对象,新建Servlet2Jsp.java,代码如下:
  1. package com.shi.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. public class Servlet2Jsp extends HttpServlet
  8. {
  9. /**
  10. * 自动生成
  11. */
  12. private static final long serialVersionUID = 1L;
  13. /**
  14. * 构造函数
  15. */
  16. public Servlet2Jsp()
  17. {
  18. super();
  19. }
  20. /**
  21. * 初始化
  22. */
  23. public void init()
  24. {}
  25. /**
  26. * doGet()
  27. */
  28. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  29. {
  30. doPost(request, response);
  31. }
  32. /**
  33. * doPost()
  34. */
  35. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  36. {
  37. String url = "result.jsp?first=传递第一个参数&second=传递第二个参数";
  38. String strRequest = "request传值";
  39. String strSession = "session传值";
  40. request.setAttribute("strRequest", strRequest);
  41. request.getSession().setAttribute("strSession", strSession);
  42. /**
  43. * 客户端跳转:效率低
  44. * session范围属性,url中的参数会传递下去,request范围属性不传递
  45. */
  46. //response.sendRedirect(url);
  47. /**
  48. * 服务器端跳转:常用,效率高
  49. * request范围属性,session范围属性,url中的参数会传递
  50. */
  51. request.getRequestDispatcher(url).forward(request, response);
  52. }
  53. /**
  54. * 销毁
  55. */
  56. public void destroy()
  57. {
  58. super.destroy();
  59. }
  60. }
    在web.xml中配置该servlet后,新建参数接收页result.jsp,代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. String strURL = request.getParameter("first");
  7. String strRequest = (String)request.getAttribute("strRequest");
  8. String strSession = (String)request.getSession().getAttribute("strSession");
  9. %>
  10. <p>
  11. URL中取得的属性值为:<%=strURL%>
  12. </p>
  13. <p>
  14. request中取得的属性值为:<%=strRequest%>
  15. </p>
  16. <p>
  17. session中取得的属性值为:<%=strSession%>
  18. </p>
  19. </body>
  20. </html>

程序的运行结果如图7所示:

Jsp与servlet之间页面跳转及参数传递实例(转)

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

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

接收servlet中传递参数的代码如下:

  1. package com.shi.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class ServletB extends HttpServlet
  9. {
  10. /**
  11. * 自动生成
  12. */
  13. private static final long serialVersionUID = 1L;
  14. /**
  15. * 构造函数
  16. */
  17. public ServletB()
  18. {
  19. super();
  20. }
  21. /**
  22. * 初始化
  23. */
  24. public void init()
  25. {}
  26. /**
  27. * doGet()
  28. */
  29. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  30. {
  31. doPost(request, response);
  32. }
  33. /**
  34. * doPost()
  35. */
  36. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  37. {
  38. String name = request.getParameter("name");
  39. String username = request.getParameter("username");
  40. response.setContentType("text/html;charset=gb2312");
  41. PrintWriter out = response.getWriter();
  42. out.println("<html>");
  43. out.println("<body>");
  44. out.println("超链接传递的参数值为:" + name);
  45. out.println("form表单中提交的用户名为:" + username);
  46. out.println("</body>");
  47. out.println("</html>");
  48. out.flush();
  49. }
  50. /**
  51. * 销毁
  52. */
  53. public void destroy()
  54. {
  55. super.destroy();
  56. }
  57. }

程序运行结果如图8所示:

Jsp与servlet之间页面跳转及参数传递实例(转)

(2)使用setAttribute()和getAttribute()方法传递参数

    设置参数的ServletA代码如下:
  1. package com.shi.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class ServletA extends HttpServlet
  9. {
  10. /**
  11. * 自动生成
  12. */
  13. private static final long serialVersionUID = 1L;
  14. /**
  15. * 构造函数
  16. */
  17. public ServletA()
  18. {
  19. super();
  20. }
  21. /**
  22. * 初始化
  23. */
  24. public void init()
  25. {}
  26. /**
  27. * doGet()
  28. */
  29. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  30. {
  31. doPost(request, response);
  32. }
  33. /**
  34. * doPost()
  35. */
  36. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  37. {
  38. /**
  39. * setAttribute()和getAttribute()
  40. */
  41. String data = "This is a test, we need more test for this";
  42. request.setAttribute("strAtt", data);
  43. request.getRequestDispatcher("/ServletB").forward(request, response);
  44. }
  45. /**
  46. * 销毁
  47. */
  48. public void destroy()
  49. {
  50. super.destroy();
  51. }
  52. }

获取参数的ServletB代码如下:

  1. package com.shi.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class ServletB extends HttpServlet
  9. {
  10. /**
  11. * 自动生成
  12. */
  13. private static final long serialVersionUID = 1L;
  14. /**
  15. * 构造函数
  16. */
  17. public ServletB()
  18. {
  19. super();
  20. }
  21. /**
  22. * 初始化
  23. */
  24. public void init()
  25. {}
  26. /**
  27. * doGet()
  28. */
  29. public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  30. {
  31. doPost(request, response);
  32. }
  33. /**
  34. * doPost()
  35. */
  36. public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  37. {
  38. String strAtt = (String)request.getAttribute("strAtt");
  39. response.setContentType("text/html;charset=gb2312");
  40. PrintWriter out = response.getWriter();
  41. out.println("<html>");
  42. out.println("<body>");
  43. out.println("getAttribute()得到的数据值为:" + strAtt);
  44. out.println("</body>");
  45. out.println("</html>");
  46. out.flush();
  47. }
  48. /**
  49. * 销毁
  50. */
  51. public void destroy()
  52. {
  53. super.destroy();
  54. }
  55. }

程序的运行结果如图9所示:

Jsp与servlet之间页面跳转及参数传递实例(转)
    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()方法的印记。
    如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出至客户端,那么该语句将不起作用,这一点应该特别注意。
    另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交。
    测试代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <link rel="stylesheet" type="text/css" href="css/style.css">
  6. </head>
  7. <body>
  8. <jsp:forward page="UpdateServlet">
  9. <jsp:param value="list" name="action" />
  10. </jsp:forward>
  11. </body>
  12. </html>

程序运行结果如图10所示:

Jsp与servlet之间页面跳转及参数传递实例(转)
    (4)修改HTTP header的Location属性来重定向
    通过设置直接修改地址栏来实现页面的重定向。
    索引页1.jsp代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
  7. String newLocn = "2.jsp";
  8. response.setHeader("Location",newLocn);
  9. %>
  10. </body>
  11. </html>

转向页2.jsp代码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. 从1.jsp跳转至此页
  6. </body>
  7. </html>

程序运行结果如图11所示:

Jsp与servlet之间页面跳转及参数传递实例(转)
    (5)JSP中实现在某页面停留若干秒后,自动重定向到另一页面
    在jsp文件中,下面的代码:
  1. <meta http-equiv="refresh" content="5; url=target.jsp"

含义是:在5秒后正在浏览的页面将会自动变为target.jsp页。代码中5为刷新的延迟时间,以秒为单位。target.jsp为你想转向的目标页,若为本页则自动刷新本页。

    由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。
    索引页5_1.jsp代码如下:
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <%
  6. String content = "5; url=5_2.jsp";
  7. response.setHeader("REFRESH",content);
  8. %>
  9. 5_1.jsp页面,5秒后转向5_2.jsp页面。
  10. </body>
  11. </html>

转向页5_2.jsp代码如下:

  1. <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. 从5_1.jsp转到的页面
  6. </body>
  7. </html>

程序运行结果如下:

Jsp与servlet之间页面跳转及参数传递实例(转)
 
 
 
    参考资料:
    [1].五种JSP页面跳转方法http://developer.51cto.com/art/200902/109939.htm

Jsp与servlet之间页面跳转及参数传递实例(转)的更多相关文章

  1. 【转】(超详细)jsp与servlet之间页面跳转及参数传递实例

    初步学习JavaEE,对其中jsp与Servlet之间的传值没弄清楚,查看网上资料,发现一篇超详细的文章,收获大大,特此记录下来.具体链接:http://blog.csdn.net/ssy_shand ...

  2. jsp与servlet之间的参数传递【转】

    JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP. 通过对象 request和 session (不考虑 application) ...

  3. Servlet——提交表单信息,Servlet之间的跳转

    HTML表单标签:<form></form> 属性: actoion:  提交到的地址,默认为当前页面 method:  表单提交方式 有get和post两种方式,默认为get ...

  4. JSP与Servlet之间传值

    Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp:使用request.response对象完成传值,具体实现如下: 1.JSP传值给Servl ...

  5. JSP与Servlet之间传值的一般方法,适合新手做练习

    #JSP与Servlet之间传值 Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp:使用request.response对象完成传值,具体实现 ...

  6. Web jsp开发学习——实现页面跳转和传参

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  7. Java开发之Servlet之间的跳转

    一.转向(Forward) 1.要点说明 转向是通过RequestDispatcher对象的forward()方法来实现的.RequestDispatcher可以通过HttpServletReques ...

  8. js、JSP、servlet之间的传递小结

    @ JS 与 JSP :JSP无法直接获取JS的值,只能通过隐藏表单或者dom节点设置. JSP中设置隐藏表单input,或者设置任意一个隐藏或者不隐藏的节点比如div, 而JS就通过document ...

  9. JSP和servlet之间的传值(总结的很全面)

    转自:http://blog.csdn.net/ssy_shandong/article/details/9328985 1.从一个jsp页面跳转到另一个jsp页面时的参数传递     (1)使用re ...

随机推荐

  1. rqnoj378 约会计划

    题目描述 cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的调解各各妹妹间的关系.mm之间的关系及其复杂,cc必须严格 ...

  2. 堪称最好的A&ast;算法

    原文地址:http://theory.stanford.edu/~amitp/GameProgramming/ 相关链接:http://www-cs-students.stanford.edu/%7E ...

  3. android窗体动画&colon;activity启动从底部向上滑动出现&comma;关闭的时候从顶部向下滑动消失的动画实现

    在IOS系统里,我们打开app都是有启动动画的,这样子在打开一个新窗体,用户感觉有个过渡动画,体验效果很好,不会觉得很突然就冒出一个窗体,下面就实现一个android 的activity启动和关闭动画 ...

  4. 利用java解压,并重命名

    由于工作需要,写了一个小工具,利用java来解压文件然后对文件进行重命名 主要针对三种格式,分别是zip,rar,7z,经过我的多次实践我发现网上的类库并不能解压最新的压缩格式 对于zip格式: ma ...

  5. IWMS后台上传文章,嵌入视频,调用优酷通用代码

    <a href="http://player.youku.com/player.php/sid/XODcxNjM3OTYw/v.swf " target="_bla ...

  6. Windows常用命令实例

    熟练使用DOS常用命令有助于提高工作效率. 1.windows+R:打开运行程序窗口 2.cmd:调用DOS命令窗口 3.mstsc:调用远程桌面命令窗口.mstsc -v 192.168..0.1 ...

  7. 8&period;mysql-基础&period;md

    目录 数据库管理 查看当前软件中的数据库 工具 创建数据库 删除数据 查看字符集 修改数据库 表管理 进入数据库 查看表 创建表 查看表结构 删除表 修改表 添加字段 删除字段 修改字段名称 修改字段 ...

  8. Gitlab-通过API管理问题

    1. 首先获取想要创建问题的project_id字段. 2. 现在获取到了project_id字段, 现在可以通过API创建新的问题,该终端节点请求几个字段,project_id字段和问题的标题. 3 ...

  9. ambari删除脚本

    #.删除hdp.repo和hdp-util.repo cd /etc/yum.repos.d/ rm -rf hdp* rm -rf HDP* #rm -rf ambari* #.删除安装包 #用yu ...

  10. IE7、IE8下使用escape、encodeURI传递中文参数乱码的问题及解决方案

    js跳转到指定页面,一旦escape()中文数据,浏览器就会终止和没有反应.上网搜了半天始终不得解.一种说法是,escape中文之后,url中出现了%u,IE7和IE8拒绝执行.目前看来差不多是这样的 ...