我正在执行以下操作,但地址栏中的网址会发生变化。从/ 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);
}
答案 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);
}