关于servlet forward的疑惑 5C

在项目中要做个Request转发,代码如下
req.getRequestDispatcher("/WEB-INF/view/customer.jsp").forward(req,resp);

进行转发,如果单这样转发是不成功的,页面状态是200,但没有响应数据,如果动态创建响应jsp的servlet就可以成功转发,代码如下
//动态注册处理jsp的servlet
ServletContext servletContext = getServletContext();
ServletRegistration jspServlet = servletContext.getServletRegistration("jsp");
jspServlet.addMapping("/WEB-INF/view/*");

这是为什么呢,转发到jsp页面为什么不能响应?在网上查阅了大量资料都不得要领,哪位大神帮忙解答下,纠结,纠结,纠结……

10个回答

Forward是在服务器端的跳转,就是客户端一个请求发给服务器,服务器直接将请求相关的参数的信息原封不动的传递到该服务器的其他jsp或servlet去处理,它是直接跳转到你请求的customer.jsp,直接加载你的页面不做任何处理

Forward是在服务器端的跳转,就是客户端一个请求发给服务器,服务器直接将请求相关的参数的信息原封不动的传递到该服务器的其他jsp或servlet去处理,而sendredirect是在客户端的跳转,服务器会返回给客户端一个响应报头和新的URL地址,原来的参数什么的信息如果服务器端没有特别处理就不存在了,浏览器会访问新的URL所指向的servlet或jsp,这可能不是原先服务器上的webservce了。

redirect是重定位,forward是服务器端的跳转

response.sendRedirect 是重定向到某个页面上,相当于重新打开浏览器输入你要打开的网址req.getRequestDispatcher("/WEB-INF/view/customer.jsp").forward(req,resp);这个方法会将参数传会customer.jsp页面..而浏览器的地址栏也不会显示customer.jsp,显示的会是你处理操作的那个页面..如果当前页面是http://127.0.0.1/sell.jsp使用response.sendRedirect("customer.jsp")的话,地址栏将显示http://127.0.0.1/customer.jsp,而request.getRequestDispatcher(customer.jsp).forward(request,response)显示的还是http://127.0.0.1/sell.jsp..如果有参数,后面还会有参数

RequestDispatcher dispatcher=context.getRequestDispatcher("/path");
disptcher.forward(request,response);

path为servlet的映射地址,就是web.xml里配的servlet-mapping

fengqingyuebai19
fengqingyuebai19 ServletContext.getRequestDispatcher(String path)和ServletRequest.getRequestDispatcher(String path)是一样的,上面没注意
接近 2 年之前 回复

redirect是重定位,相当于服务器再发一次请求,forward是服务器将你的自己的请求转发出去

redirect是重定位,相当于服务器再发一次请求

redirect是重定位,相当于服务器再发一次请求,forward是服务器将你的自己的请求转发出去

不要纠结,等大神解决

不要纠结,等大神解决

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!