服务方法中的request.getPathInfo()为什么返回null?
我编写了前端控制器模式并进行了测试。当request.getPathInfo()应该返回路径信息时,它以某种方式返回null。
<a href="tmp.do">Test link to invoke cool servlet</a>
具有.do扩展名(例如tmp.do)的任何内容都将调用Servlet“重定向器”
<!-- SERVLET (centralized entry point) --> <servlet>
<servlet-name>RedirectHandler</servlet-name>
<servlet-class>com.masatosan.redirector.Redirector</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RedirectHandler</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
public class Redirector extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//test - THIS RETURNS NULL!!!!
System.out.println(request.getPathInfo());
Action action = ActionFactory.getAction(request); //return action object based on request URL path
String view = action.execute(request, response); //action returns String (filename)
if(view.equals(request.getPathInfo().substring(1))) {
request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);
}
else {
response.sendRedirect(view);
}
}
catch(Exception e) {
throw new ServletException("Failed in service layer (ActionFactory)", e);
}
}
}//end class
问题是request.getPathInfo()返回null。根据《 Head First》一书,
Servlet生命周期从其构造函数开始,从
"does not exist"
状态到"initialized"
状态(即准备好服务客户的请求)在状态之间移动 。init()始终在第一次调用service()之前完成。
这告诉我,在构造函数和init()方法之间的某个地方,该servlet不是完全生长的servlet。
因此,这意味着,在调用service()方法时,该servlet应该是完全生长的servlet,而request方法应该能够调用getPathInfo()并期望返回的是有效值而不是null。
UDPATE
很有意思。(http://forums.sun.com/thread.jspa?threadID=657991)
如果网址如下所示:
http://www.myserver.com/mycontext/myservlet/hello/test?paramName=value。
如果web.xml将servlet模式描述为/ mycontext / *,则getPathInfo()将返回myservlet / hello /
test,而getQueryString()将返回paramName = value
如果网址如下所示:
http://hostname.com:80/mywebapp/servlet/MyServlet/a/b;c=123?d=789
字符串ServletPath = req.getServletPath();
它返回“ / servlet / MyServlet”
回答:
@Vivien是正确的。您想使用它HttpServletRequest#getServletPath()
忽略了这一点,我已经更新了答案)。
澄清:getPathInfo()
不
作为definied包括servlet路径web.xml
(仅在此后的路径)和getServletPath()
基本上返回
作为definied servlet路径web.xml
(并因此不是路径之后)。如果url模式包含通配符,则特别包含 该 部分。
以上是 服务方法中的request.getPathInfo()为什么返回null? 的全部内容, 来源链接: utcz.com/qa/432371.html