servlet重定向:有关JSP/Servlet中的重定向技术的综述来源: 发布时间:星期六, 2009年2月21日 浏览:0次 评论:0
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无法重定向至有framejsp文件,可以重定向至有framehtml文件,同时forward无法在后面带参数传递,比如servlet?name=frank,这样不行,可以内通过response.Attribute("name",name)来传至下个页面. 重定向后浏览器地址栏URL不变. 例:在servlet中进行重定向 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.ContentType("text/html; char=gb2312"); ServletContext sc = getServletContext; RequestDispatcher rd = null; rd = sc.getRequestDispatcher("/index.jsp"); //定向页面 rd.forward(request, response); } 通常在servlet中使用不在jsp中使用 2.response.sendRedirect 是在用户浏览器端工作,sendRedirect可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至区别主机上,sendRedirect可以重定向有frame.jsp文件. 重定向后在浏览器地址栏上会出现重定向页面URL 例:在servlet中重定向 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.ContentType("text/html; char=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的后应该紧跟句; 我们已经知道response.sendRedirect是通过浏览器来做转向所以只有在页面处理完成后才会有实际动作既然你已经要做转向了那么后输出还有什么意义呢?而且有可能会后面输出导致转向失败 比较: (1).Request Dispatcher.forward是容器中控制权转向在客户端浏览器地址栏中不会显示出转向后地址; (2).response.sendRedirect则是完全跳转浏览器将会得到跳转地址并重新发送请求链接这样从浏览器地址栏中可以看到跳转后链接地址 前者更加高效在前者可以满足需要时尽量使用RequestDispatcher.forward思路方法. 注:在有些情况下比如需要跳转到个其它服务器上资源则必须使用HttpServletResponse.sendRequest思路方法 3. <jsp:forward page="" /> 它底层部分是由RequestDispatcher来实现因此它带有RequestDispatcher.forward思路方法印记 如果在 jsp:forward 的前有很多输出,前面输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这点应该特别注意 另外要注意:它不能改变浏览器地址刷新话会导致重复提交 4.修改HTTP headerLocation属性来重定向 通过设置直接修改地址栏来实现页面重定向 jsp文件代码如下: <% response.Status(HttpServletResponse.SC_MOVED_PERMANENTLY); String Locn = "/path/jsa.jsp"; response.Header("Location",Locn); %> 5.JSP中实现在某页面停留若干秒后,自动重定向到另页面 在html文件中下面代码: <meta http-equiv="refresh" c> 它含义:在5分钟的后正在浏览页面将会自动变为target.html这页代码中300为刷新延迟时间以秒为单位targer.html为你想转向目标页,若为本页则为自动刷新本页 由上可知可以通过Header来实现某页面停留若干秒后,自动重定向到另页面 关键代码: String content=stayTime+";URL="+URL; response.Header("REFRESH",content); TAG: JSP Jsp Servlet 技术 0
相关文章
读者评论发表评论 |