当前位置:编程学习 > JS >>

JSP跳转方式

 

一:RequestDispatcher.forward()

 

       是在服务器端起作用,当使用forward()时,Servlet engine 传递HTTP请求从当前的Servlet  or jsp  到另外一个Servlet JSP 或普通HTML文件

 

       可以进行参数传递 如:

 

 

RequestDispatcher rd = context.getRequestDispatcher("/jsp/forward.jsp?name=zhangsan"); 

RequestDispatcher rd = context.getRequestDispatcher("/F?name=jingjing"); 

 

 

             重定向后浏览器地址栏URL不变

 

 

<p>     例:在servlet中进行重定向</p><p>          </p><pre class="java" name="code">public void doPost(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        ServletContext context = getServletContext(); 

        //forward()到jsp  

        RequestDispatcher rd = context.getRequestDispatcher("/jsp/forward.jsp?name=zhangsan"); 

        //forward()到令一个servlet F为servlet的url-pattern  servlet也可进行参数传递 

        //RequestDispatcher rd = context.getRequestDispatcher("/F?name=jingjing"); 

        request.setAttribute("info", "hello");  //参数传递 

        rd.forward(request, response); 

    } 

 

路径前必须带有"/" ,"/"的含义时项目名称  否则报如下异常:

 

 

java.lang.IllegalArgumentException: Path F does not start with a "/" character 

    com.org.MyServlet.doGet(MyServlet.java:31) 

    javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 

    javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

 

 

在forward.jsp中取得参数为:

 

 

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

 

在servlet中取得参数为: 

 

<pre class="java" name="code">  String name = request.getParameter("name"); 

  String info = (String)request.getAttribute("info"); 

 

二:response.sendRedirect()

 

        是在用户的浏览器端工作,sendRedirect() 可以带参数传递,比如servlet?name=zhangsan

 

        重定向后在浏览器地址栏上会出现重定向页面的URL

 

       例:重定向jsp

 

           

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        response.sendRedirect("jsp/forward.jsp"); 

 

//可传参 

 

//response.sendRedirect("jsp/forward.jsp?name=zhangsan"); 

 

            重定向servlet

 

         

 

public void doGet(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        response.sendRedirect("F"); 

        //可传递参数 

        //response.sendRedirect("F?name=zhagnsan"); 

    } 

 

 

比较:

 

      a) 两个都可以实现页面的跳转forward是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址

 

        response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接,这样,从浏览器的地址栏中可以看到跳转后的链接地址

 

       b) 两者都可以跳转到jsp或者servlet  都可以传递参数

        但response.sendRedirect()跳转后后面的代码将不会再执行

 

       例:

 

  

 

 

public void doGet(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

 

        response.setContentType("text/html"); 

        PrintWriter out = response.getWriter(); 

 

        out.println("hello kity");   //不会输出 

        response.sendRedirect("F?name=zhagnsan"); 

        out.println("good");         //不会输出 

    } 

         前者更加高效,在前者可以满足基本需要时,尽量使用RequestDispatcher.forward()方法

三:其他跳转方式

 

       a)修改HTTP header的Location属性来重定向

 

       b)通过设置直接修改地址栏来实现页面的重定向

 

       c)设置jsp若干秒后 自动重定向

 

 

response.setHeader("refresh","3;url=forward2.jsp"); 

 

注:有不完善或错误之处还请指出。   

 

摘自 itmyhome的专栏

补充:Web开发 , Jsp ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,