zoukankan      html  css  js  c++  java
  • 页面跳转的方法

    感谢脚本之家的贡献

    1. RequestDispatcher.forward()
      在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet或者是JSP到另外的一个Servlet、JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面。
      重定向后浏览器地址栏URL不变
      例:在servlet中进行重定向

      publicvoid doPost(HttpServletRequest request,HttpServletResponse response)
       throwsServletException,IOException{
      response.setContentType("text/html; charset=gb2312");
      ServletContext sc = getServletContext();
      RequestDispatcher rd =null;
      rd = sc.getRequestDispatcher("/index.jsp");//定向的页面,站内查找,因此不要写web应用的名字
      rd.forward(request, response);
      }

      通常在servlet中使用,不在jsp中使用


    2. response.sendRedirect()
      在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.
      重定向后在浏览器地址栏上会出现重定向页面的URL
      例:在servlet中重定向

      publicvoid doPost(HttpServletRequest request,HttpServletResponse response)
       throwsServletException,IOException{
       response.setContentType("text/html; charset=gb2312");
       response.sendRedirect("/index.jsp");
      }

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


    3. <jsp:forward page="" />
      它的底层部分是由RequestDispatcher来实现的,因此它带有RequestDispatcher.forward()方法的印记。
      如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意。
      注意:它不能改变浏览器地址,刷新的话会导致重复提交


    4. 修改HTTP header的Location属性来重定向
      通过设置直接修改地址栏来实现页面的重定向。
      jsp文件代码如下:
      <%
      response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
      String newLocn = "/newpath/jsa.jsp";
      response.setHeader("Location",newLocn);
      %>


    5. JSP中实现在某页面停留若干秒后,自动重定向到另一页面
      在html文件中,下面的代码:
      <meta http-equiv="refresh" content="300; url=target.jsp">
      它的含义:在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。
      由上可知,可以通过setHeader来实现某页面停留若干秒后,自动重定向到另一页面。代码:
      String content=stayTime+";URL="+URL;
      response.setHeader("REFRESH",content);

    下面是其他网友的文章
    1. request.getRequestDispatcher("/admin.jsp").forward(request, response);//转发到admin.jsp 

    2. RequestDispatcher rd=request.getRequestDispatcher("/admin.jsp"); 
    rd.forward(request, response); 

    3. getServletConfig().getServletContext().getRequestDispatcher("/admin.jsp").forward(request, response); 

    其它的方法当然可以用html js,的方法,需要jsp输出的,根据需要选择。


    作者:禅楼望月
    出处:http://www.cnblogs.com/yaoyinglong
    如果,您认为阅读这篇博文让您有些收获,不妨点击一下右下角的【推荐】
    如果,您希望这篇博文也能帮助到其他人,不妨点击一下右边的【分享到…】
    如果,您希望更容易地发现我的新博客,不妨点击一下左下角的【关注我】
    如果,您对我的博客内容感兴趣,请继续关注我的后续博客,我是【禅楼望月】

    本文版权归作者和博客园共有,欢迎转载,但请注明出处,且在文章页面明显位置给出原文连接。

    *\(^o^)/* 请您毫不留情的指出错误和不足,或者发表您的见解(ɔˆ ³(ˆ⌣ˆc)我们共同进步(ง •̀_•́)ง

    ”google 有道  订阅本站到QQ邮箱
  • 相关阅读:
    apache安全—用户访问控制
    hdu 3232 Crossing Rivers 过河(数学期望)
    HDU 5418 Victor and World (可重复走的TSP问题,状压dp)
    UVA 11020 Efficient Solutions (BST,Splay树)
    UVA 11922 Permutation Transformer (Splay树)
    HYSBZ 1208 宠物收养所 (Splay树)
    HYSBZ 1503 郁闷的出纳员 (Splay树)
    HDU 5416 CRB and Tree (技巧)
    HDU 5414 CRB and String (字符串,模拟)
    HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
  • 原文地址:https://www.cnblogs.com/yaoyinglong/p/4097911.html
Copyright © 2011-2022 走看看