JSP页面跳转五法详解:forward vs redirect
本文将详细介绍JSP页面跳转的五种方法,包括RequestDispatcher的forward()方法和response.sendRedirect()方法,以及它们在处理表单提交、重定向、框架页面和URL编码时的具体应用。首先,我们来看第一种方法——`RequestDispatcher.forward()`。 `forward()`是Servlet API提供的一个功能,用于在同一个Servlet容器中,由一个Servlet或JSP页面将请求转发到另一个Servlet或JSP。当你调用`RequestDispatcher rd = getServletContext().getDispatcher("/index.jsp"); rd.forward(request, response);`时,请求的状态(如会话变量)将被保留,并且用户不会看到新的URL地址。例如,当你在a.jsp中通过`forward()`跳转到b.jsp时,虽然用户浏览器的URL改变了,但表单数据会在b.jsp中继续处理,因为实际上还是在同一个Servlet上下文中。 另一种方法是`response.sendRedirect()`,它主要用于页面的完全重定向。与`forward()`不同,`sendRedirect()`会导致浏览器发送一个新的HTTP请求到指定的URL,这可能会清除当前页面的所有会话信息。例如,`response.sendRedirect("/index.jsp");`会导致浏览器跳转到"/index.jsp",并且如果是在框架中使用,可能需要额外注意重定向后的URL是否适合框架结构。此外,`sendRedirect()`在使用时需要注意,因为它可能会导致浏览器缓存问题,比如在设置`response.sendRedirect()`后,第一次访问新页面可能会从服务器缓存的旧版本加载,因此建议在重定向前清理缓存或者设置禁止缓存的响应头。 在使用`sendRedirect()`时,需要注意的是,由于浏览器对同一域名下的URL重定向限制,可能需要确保URL的安全性,避免跨域问题。同时,由于`sendRedirect()`不涉及服务器端的响应内容发送,所以在跳转过程中,浏览器不会看到重定向之前的HTML代码,因此通常不会在浏览器历史记录中留下痕迹。 总结来说,JSP页面跳转的两种主要方法各有优缺点。`forward()`适合保持请求状态,但可能不适用于需要清除会话信息的情况;而`sendRedirect()`提供了一种简单的页面替换方式,但需要注意缓存和安全问题。在实际开发中,根据具体需求选择合适的方法可以提高用户体验和性能。
是在服务器端起作用,当使用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=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面。
重定向后浏览器地址栏URL不变。
例:在servlet中进行重定向
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
response.setContentType("text/html; charset=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文件.
下载后可阅读完整内容,剩余3页未读,立即下载
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展