Java Servlet映射:仅当文件或目录没有';不存在?

Java Servlet映射:仅当文件或目录没有';不存在?,java,servlets,jakarta-ee,glassfish,glassfish-3,Java,Servlets,Jakarta Ee,Glassfish,Glassfish 3,我正在GlassFish上设置一个web应用程序,我想知道是否有一种方法可以将URL根目录中的servlet映射配置为仅适用于指定URL中不存在文件或目录的情况 目前,这将通过我的Spring dispatcher路由所有内容: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.

我正在GlassFish上设置一个web应用程序,我想知道是否有一种方法可以将URL根目录中的servlet映射配置为仅适用于指定URL中不存在文件或目录的情况

目前,这将通过我的Spring dispatcher路由所有内容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
 <servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>
   org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>
   /jsp/index.jsp
  </welcome-file>
 </welcome-file-list>
</web-app>

调度员
org.springframework.web.servlet.DispatcherServlet
1.
调度员
/
/jsp/index.jsp
除非给定路径上存在文件或目录,否则是否有可能保留上述行为?我试图在错误的地方解决这个问题吗


更新:URL重写怎么样?GlassFish是否提供了Apache与mod_rewrite一样的灵活性?这样,我甚至可以在它到达servlet映射阶段之前拦截它。

很有技巧,但可行:在
404的
上将它映射为

<servlet>
    <servlet-name>errorServlet</servlet-name>
    <servlet-class>com.example.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>errorServlet</servlet-name>
    <url-pattern>/error</url-pattern>
</servlet-mapping>

<error-page>
    <error-code>404</error-code>
    <location>/error</location>
</error-page>
这样您就不会在URL中看到/需要
/pages


更新:根据您的新问题:

更新:URL重写怎么样?GlassFish是否提供了Apache与mod_rewrite一样的灵活性?这样我就可以在它到达servlet映射阶段之前拦截它

apachehttpd的
mod_rewrite
插件的JSP/Servlet等价物是

if (new File(servletContext.getRealPath(request.getRequestURI())).exists()) {
    chain.doFilter(request, response);
} else {
    request.getRequestDispatcher("/pages" + request.getRequestURI()).forward(request, response);
}