## jsp重定向与请求转发的路径404问题
程序员文章站
2022-03-02 13:50:43
...
jsp重定向与请求转发的路径404问题
请求转发特点:
1. 浏览器地址栏路径不发生变化 还停留在首次访问的Servlet的URL
2. 只能转发到当前服务器内部资源中。
3. 转发是一次请求,可以使用request共享数据
4. 自我归纳:forward方式究竟是get还是post方式取决于第一次访问servlet方式 另外 href是get方式访问。
重定向:
1. 地址栏发生变化
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使用request对象来共享数据
对于request.getRequestDispatcher方法,它具有请求转发的功能,当通过service层查找到jsp页面需要的数据,需要将数据带给jsp页面的时候,就需要请求转发,于是servlet充当了“控制层”的作用。当然还可以根据数据的存活周期去判断采用什么方式去跳转页面,sendRedirect方式适合将数据存储到sesson中,这样再次请求服务器的时候可以得到session对象,通常应用于在登录成功后,采取重定向的方式。
如果想跳转页面,就必须告诉这两个函数资源的路径是什么?这里的资源当然指的是servlet和jsp。而今天所遇到的问题是,何时需要通过request.getContextPath。相信你也遇到过下面的错误。
路径使用引导:
1.判断定义的路径是谁在用?是浏览器还是服务器?
2.当你遇到下面几种情况,说明是浏览器,需要加虚拟目录。
1.当你遇到表单的时候,需要结合EL表达式引入request域对象中的虚拟路径。
<form action="${pageContext.request.contextPath}/addUserServlet" method="post" id="form">
2.当你遇到超链接的时候,同样的方式引入虚拟目录。
<a
href="${pageContext.request.contextPath}/ControllerServlet">
</a>
<a
href="javascript:deleteUser(${user.id});">删除
</a>
注意超链接方式是get方式,因此有时可以传参数。比如删除表格中的某一项需要获取其id的时候。
3.给服务器使用不需要加虚拟路径。
//提供提示信息
request.setAttribute("msg", "验证码错误");
request.getRequestDispatcher("/login.jsp").forward(request, response);
4.特殊:sendRedirect方式必须加虚拟路径。
response.sendRedirect(request.getContextPath()+"/ControllerServlet");
上一篇: java保存文件出现异常的解决办法
下一篇: Java 数据结构基本分析