【发布时间】:2016-08-25 00:25:19
【问题描述】:
我有一个带有非常简单的 web.xml 的 webapp。
<?xml version="1.0"?>
<web-app version="3.0" 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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
</web-app>
我设置了这个 contextConfigLocation 属性,以便类 org.glassfish.jersey.server.spring.SpringWebApplicationInitializer 不会像我希望手动添加的那样自动添加 ContextLoadListener 和 RequestContextListener。
然后我有自己的 WebApplicationInitializer 类来以编程方式而不是通过 web.xml 添加 servlet。
public class MyWebAppInitializer implements WebApplicationInitializer {
private static final Logger LOGGER = Logger.getLogger(SpringWebApplicationInitializer.class.getName());
@Override
public void onStartup(ServletContext sc) throws ServletException {
//Setup spring listeners
{
LOGGER.config(LocalizationMessages.REGISTERING_CTX_LOADER_LISTENER());
sc.addListener(ContextLoaderListener.class);
sc.addListener(RequestContextListener.class);
}
//Jersey Rest Servlet
{
final ServletRegistration.Dynamic registration = sc.addServlet(ServletContainer.class.getName(), ServletContainer.class);
registration.setInitParameter("javax.ws.rs.Application", com.tervita.portal.RestApplication.class.getName());
registration.addMapping("/rest/*");
}
//Normal Servlets
{
final ServletRegistration.Dynamic registration = sc.addServlet(LoginAction.class.getName(), LoginAction.class);
registration.addMapping("/LoginAction");
}
//Apache Default Servlet
{
ServletRegistration.Dynamic dispatcher = sc.addServlet("dispatcher", DispatcherServlet.class);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/test");
}
}
}
当我运行我的 web 应用程序时,我无法访问我添加的静态文件,例如 /css/app/ui-grid.css。
当我运行 Tomcat 时,我得到了这个...
所以我很困惑,我的 servlet 配置中没有任何条目覆盖 Tomcat 中应该是 /* 的默认 servlet。为什么默认 servlet 不会被点击并提供我的内容?
【问题讨论】:
-
在 tomcat 管理控制台中,您能看到您的 Web 应用程序部署到的上下文(路径)吗?也许它被部署到根上下文(
/)而不是/tervita360? -
是的,它肯定在 /tervita360。我的测试 servlet 也可以访问。
-
你的 WAR 文件的内容怎么样?他们是正确的吗?您是否查看了 WAR 文件以确认所有必要的文件都在其中? - 现在只介绍基础知识
-
是的,我的 .war 输出看起来是正确的@ochi
-
您有任何映射到应用根目录的内容吗?即
dispatcher.addMapping("/");?类似于默认/包罗万象的东西?
标签: spring servlets web.xml servlet-3.0