web.xml中的url-pattern无法识别多个url

时间:2017-02-23 03:01:25

标签: java servlets web.xml url-pattern

我有这样的web.xml:

  <servlet>
    <servlet-name>MyDisplayCourse</servlet-name>
    <servlet-class>edu.itn.controller.MyDisplayCourse</servlet-class>
</servlet>

和servlet的servlet映射是:

 <servlet-mapping>
    <servlet-name>MyDisplayCourse</servlet-name>
     <url-pattern>/admin/displaystudent</url-pattern>    
    <url-pattern>/displaystudent</url-pattern>    
 </servlet-mapping>

当我使用时:

 <url-pattern>/displaystudent</url-pattern>   

它找到servlet MyDisplayCourse,但是当我使用append / admin /

 <url-pattern>/admin/displaystudent</url-pattern> 

这会在我的网络应用中显示404错误代码。有人可以帮助我为什么不支持/ admin / displaystudent这样的网址,但只支持像/ displaystudent这样的单个网址。

1 个答案:

答案 0 :(得分:1)

url-pattern

没有问题

问题在于您在DisplayStudent.java中的代码

替换

RequestDispatcher rd=request.getRequestDispatcher("StudentTable.jsp");

RequestDispatcher rd=request.getRequestDispatcher("/StudentTable.jsp");

ServletRequestSpec

  

如果路径以“/”开头,则将其解释为相对于   当前上下文根

否则它会在您的案例'/admin/StudentTable.jsp'中以相对路径连接

以下代码是getRequestDispatcher

的实现
@Override
public RequestDispatcher getRequestDispatcher(final String path) {
String realPath;
 if (path.startsWith("/")) {
    realPath = path;
 } else {
    String current = exchange.getRelativePath();
    int lastSlash = current.lastIndexOf("/");
    if (lastSlash != -1) {
        current = current.substring(0, lastSlash + 1);
    }
    realPath = CanonicalPathUtils.canonicalize(current + path);
 }
 return new RequestDispatcherImpl(realPath, servletContext);
}