如何重定向但保持URL相同

时间:2014-12-29 16:22:01

标签: servlets url-redirection

我正在执行以下操作,但地址栏中的网址会发生变化。从/ test到localhost:8080 ...... 是否可以在地址栏中保持URL相同?

<servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>xxx.xxxx.Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

Servlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String path = request.getRequestURI();
        response.sendRedirect("http://localhost:8080"+path);
    }

2 个答案:

答案 0 :(得分:1)

您必须首先了解您的Servlet(HttpServlet)和它们正在运行的Servlet容器正在实现HTTP堆栈。 HTTP是一种请求 - 响应协议。

客户端发送HTTP请求,服务器(您的Servlet容器)回复HTTP响应。在这种情况下,

response.sendRedirect("http://localhost:8080"+path);

它以302响应,表示重定向。您的客户如何处理这个问题取决于他们。通常,浏览器客户端将向重定向目标发送新的HTTP GET请求。这将强制页面刷新/续订。

如果这不是您想要的行为,则需要更改您的客户行为。例如,您可以将部分客户端逻辑放在iframe中。然后,您才能重定向,只刷新iframe。

答案 1 :(得分:1)

您可以使用转发而不是重定向。我写了一个获取servlet名称并发送它的方法:

protected void gotoServlet(HttpServletRequest req, HttpServletResponse resp,String servletName) throws ServletException, IOException {

    RequestDispatcher dispatcher = this.getServletContext().getNamedDispatcher(servletName);
    dispatcher.forward(req,resp);
}