我有通过以下方式重定向到jsp的servlet:
request.setAttribute("responseVar",responseVar);
request.getRequestDispatcher("response.jsp").include(request, response);
为什么浏览器网址看起来像localhost:8080/servletname/servletname
而不像localhost:8080/servletname/response.jsp
?
我该如何解决?
答案 0 :(得分:2)
您需要的是response.sendRedirect("response.jsp");,它也会更改网址,但不会记住请求中设置的任何属性。这是一个单独的请求。
HttpServletResponse#sendRedirect()提出了什么:
使用指定的重定向位置URL向客户端发送临时重定向响应。此方法可以接受相对URL;在将响应发送到客户端之前,servlet容器必须将相对URL转换为绝对URL。如果该位置是相对的,没有领先的' /'容器将其解释为相对于当前请求URI。如果该位置是相对于领先的' /'容器将其解释为相对于servlet容器根目录。
如果响应已提交,则此方法将抛出
IllegalStateException
。使用此方法后,应认为响应已提交,不应写入。
如果您还需要访问属性,请尝试任何一个选项:
将值作为查询参数发送,但查询字符串长度存在限制
的Servlet
response.sendRedirect("response.jsp?responseVar="+responseVar);
JSP
${param.responseVar}
设置为会话属性
的Servlet
request.getSession().setAttribute("responseVar",responseVar);
JSP
${sessionScope.responseVar}
如下所示更改url-pattern
中Servlet本身的web.xml
,您也可以使用include
和forward
。
的web.xml
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.x.y.z.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/response.jsp</url-pattern>
</servlet-mapping>
答案 1 :(得分:-2)
无法使用include
方法使用forward
方法
request.getRequestDispatcher("response.jsp").forward(request, response);
包含RequestDispatcher的方法,包括RequestDispatcher的资源和转发方法,将您的请求和响应转发给您想要的资源。
获取更多帮助,请转到HERE
是但是它不会在url中显示你的response.jsp
为此你必须使用
response.sendRedirect("response.jsp");