我有一个看起来像这样的servlet:
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println(request.getPathInfo());
}
}
Run Code Online (Sandbox Code Playgroud)
使用web.xml映射,如:
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>com.example.ExampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/example/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
它给了我我期望的结果......如果我去http:// localhost:8080/example/foo它打印"/ foo".但是,如果我将servlet更改为转发到JSP文件:
public class ExampleServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// do something here to check the value of request.getPathInfo()
request.getRequestDispatcher("whatever.jsp").forward(request, response);
}
}
Run Code Online (Sandbox Code Playgroud)
然后当我检查getPathInfo()的值时,它现在报告"whatever.jsp"而不是"foo".
编辑:以防万一,这是在谷歌应用引擎上.不要以为应该这样.
Bal*_*usC 14
问题是含糊不清的(servlet是否会在每个前锋上再次调用?),但听起来很像你需要的request.getAttribute("javax.servlet.forward.request_uri").