我已经将Spring MVC dispatcher映射为/*
上的全局前端控制器servlet。
<servlet>
<servlet-name>home</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
然而,这个映射阻止了对/res/
文件夹中的静态文件的访问,比如CSS、JS、图片等等。
我怎么才能访问它们呢?
发布于 2009-05-15 19:33:29
我也遇到过这种情况,但从来没有找到一个很好的解决方案。我最终将我的servlet映射到URL层次结构中更高的一层:
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
现在,基本上下文(以及您的/res目录中)中的所有内容都可以由容器提供。
发布于 2010-08-29 12:27:00
将控制器servlet映射到更具体的url-pattern
(如/pages/*
)上,将静态内容放在特定的文件夹(如/static
)中,并创建监听/*
的Filter
,它透明地继续任何静态内容的链,并将请求分派给控制器servlet以获取其他内容。
简而言之:
<filter>
<filter-name>filter</filter-name>
<filter-class>com.example.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>com.example.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>/pages/*</url-pattern>
</servlet-mapping>
在过滤器的doFilter()
中包含以下内容
HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI().substring(req.getContextPath().length());
if (path.startsWith("/static")) {
chain.doFilter(request, response); // Goes to default servlet.
} else {
request.getRequestDispatcher("/pages" + path).forward(request, response);
}
不,这不会在浏览器地址栏中以/pages
结尾。它是完全透明的。如有必要,您可以将"/static"
和/或"/pages"
作为过滤器的init-param
。
发布于 2010-08-18 01:33:14
您要做的就是在web.xml中添加一个欢迎文件
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
然后将其添加到servlet映射中,这样当有人转到应用程序的根目录时,就会在内部将其发送到index.html,然后映射会在内部将它们发送到映射到的servlet
<servlet-mapping>
<servlet-name>MainActions</servlet-name>
<url-pattern>/main</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MainActions</servlet-name>
<url-pattern>/index.html</url-pattern>
</servlet-mapping>
最终结果:您访问了/Application,但是出现了/Application/MainActions servlet,而没有中断任何其他根请求。
明白了吗?因此,您的应用程序仍然位于子url,但当用户转到您网站的根目录时,它会自动显示。这允许您让/images/bob.img仍然转到常规位置,但'/‘是您的应用程序。
https://stackoverflow.com/questions/870150
复制相似问题