服务方法中的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

回到顶部