重定向到jsp。为什么url没有结束/response.jsp?

时间:2014-06-11 09:35:36

标签: jsp servlets

我有通过以下方式重定向到jsp的servlet:

request.setAttribute("responseVar",responseVar);    request.getRequestDispatcher("response.jsp").include(request, response);

为什么浏览器网址看起来像localhost:8080/servletname/servletname而不像localhost:8080/servletname/response.jsp

我该如何解决?

2 个答案:

答案 0 :(得分:2)

您需要的是response.sendRedirect("response.jsp");,它也会更改网址,但不会记住请求中设置的任何属性。这是一个单独的请求。


HttpServletResponse#sendRedirect()提出了什么:

  

使用指定的重定向位置URL向客户端发送临时重定向响应。此方法可以接受相对URL;在将响应发送到客户端之前,servlet容器必须将相对URL转换为绝对URL。如果该位置是相对的,没有领先的' /'容器将其解释为相对于当前请求URI。如果该位置是相对于领先的' /'容器将其解释为相对于servlet容器根目录。

     

如果响应已提交,则此方法将抛出IllegalStateException。使用此方法后,应认为响应已提交,不应写入。


修改

如果您还需要访问属性,请尝试任何一个选项:

  1. 将值作为查询参数发送,但查询字符串长度存在限制

    的Servlet

    response.sendRedirect("response.jsp?responseVar="+responseVar);
    

    JSP

    ${param.responseVar}
    
  2. 设置为会话属性

    的Servlet

    request.getSession().setAttribute("responseVar",responseVar);
    

    JSP

    ${sessionScope.responseVar}
    
  3. 如下所示更改url-pattern中Servlet本身的web.xml,您也可以使用includeforward

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