欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

## 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。相信你也遇到过下面的错误。

## jsp重定向与请求转发的路径404问题

路径使用引导:

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");