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

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");
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值