• 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不变

         例:在servlet中进行重定向

             

    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中取得参数为:
      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");
    注:有不完善或错误之处还请指出。


     

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    [Web] 被遗忘的知识点 XHTML
    [项目实践进阶篇] Android 项目中使用Ant + Groovy能干什么?
    使用Ant,第1部分:将Ant脚本引入Java项目
    [Web] 被遗忘的知识点 JavaScript加载管理最佳实践
    [Web] 被遗忘的知识点 iFrames(HTML)过时了没有?
    Android ProGuard
    stream.js
    GUID(全球唯一标识符)
    解析算术表达式
    LCG(linear congruential generator)伪随机数生成器
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131610.html
Copyright © 2020-2023  润新知