我试图在我的 中设置多个 servlet WebApplicationInitializer
,一个用于默认请求(触发 jsp 并返回 html,使用 a DispatcherServlet
,另一个用于静态资源,使用自定义StaticServlet
。令我困惑的是如何将路由应用到将请求发送到正确的 servlet,实际上其中一个静态 servlet 从未被调用来解决请求似乎证实了我的怀疑。到目前为止,这是我在以下位置的代码WebApplicationInitializer
:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setSessionTrackingModes(
Collections.<SessionTrackingMode>emptySet());
// Create the 'root' Spring application context
// which will contain the application components
AnnotationConfigWebApplicationContext rootContext
= new AnnotationConfigWebApplicationContext();
rootContext.register(RootConfig.class);
// Manage the lifecycle of the root application context
servletContext.addListener(new ContextLoaderListener(rootContext));
// Create the dispatcher servlet's Spring application context
// to contain dispatched beans such as controllers
AnnotationConfigWebApplicationContext dispatcherContext
= new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet under /
ServletRegistration.Dynamic dispatcher = servletContext.addServlet(
"dispatcher",
new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
// Register and map the static dispatcher servlet under /static/*
ServletRegistration.Dynamic staticDispatcher = servletContext.addServlet(
"staticDispatcher",
new FileServlet());
staticDispatcher.setLoadOnStartup(1);
staticDispatcher.setInitParameter("basePath", "/static/fonts/");
staticDispatcher.addMapping("/static/*");
静态Servlet
不需要Configuration
(Is a base HttpServlet
),但困扰我的是我使用两个ServletRegistration
来定义两个不同的映射。有没有办法使用相同的方法并定义到特定 servlet 的映射?还是应该在另一个级别(可能是的侦听器rootContext
)完成映射?我试图环顾四周,但似乎没有人解决或有任何问题(可能)以编程方式设置多个 servlet。
知道为什么我对静态没有任何影响Servlet
吗?
编辑:
这是我的 .jsp 文件之一中的静态文件请求,应该通过FileServlet
:
<style type="text/css">
@font-face {
font-family: 'DinWeb';
src: url(/static/fonts/DINWeb.eot?) format('eot'), url(/static/fonts/DINWeb.woff) format('woff'), url(/static/fonts/DINComp.ttf) format('truetype');
font-weight: normal;
}
</style>
我期望的是请求被重定向到FileServlet
(因为 url 以 /static/ 开头),并从那里被操纵/管理,以便它返回字体(或文件或其他媒体)