gpt4 book ai didi

java - JBoss 作为 7 : Map Servlet to Context Root ("/") via Code Config

转载 作者:搜寻专家 更新时间:2023-10-31 19:57:13 26 4
gpt4 key购买 nike

使用 JBoss AS 7,我尝试使用 Java 代码而不是 web.xml 配置我的 Servlet 3.0 容器。我的问题是,当我注册一个映射到上下文根 ("/") 的 Servlet 时,默认的 servlet 优先处理请求。我试过 ServletContextListener 和 ServletContainerInitializer 都没有成功。

尝试 1:ServletContextListener

@WebListener
public class AppInitializer implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();

ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
homeServlet.addMapping("/");
homeServlet.setLoadOnStartup(1);
}

@Override
public void contextDestroyed(ServletContextEvent event) {
// Do nothing.
}
}

尝试 2:ServletContainerInitializer

public class AppInitializer2 implements ServletContainerInitializer {

@Override
public void onStartup(Set<Class<?>> classes, ServletContext context) throws ServletException {
ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
homeServlet.addMapping("/");
homeServlet.setLoadOnStartup(1);
}
}

附加信息

  • 如果我将映射从 / 更改为 /example,我的 Servlet 会正确处理对新路径的请求。
  • 如果我通过 web.xml 而不是 Java 代码将我的 Servlet 注册到 /,我的 Servlet 会正确处理对上下文根的请求。

那么……我该怎么做才能通过 Java 代码将 Servlet 注册到上下文根而不被 DefaultServlet 覆盖?

谢谢!

最佳答案

我在使用 JBoss AS 7.1.1 和 Spring MVC 3.2.3.RELEASE 时遇到了同样的问题。基于此来自WebApplicationInitializer javadocs :

Mapping to '/' under Tomcat

Apache Tomcat maps its internal DefaultServlet to "/", and on Tomcat versions <= 7.0.14, this servlet mapping cannot be overridden programmatically. 7.0.15 fixes this issue. Overriding the "/" servlet mapping has also been tested successfully under GlassFish 3.1.

我认为没有任何方法可以将您的 servlet 映射到没有 web.xml 的上下文根,除非升级或替换 servlet 容器。看起来 JBoss AS 7.1.1.Final 使用 JBoss Web 7.0.13,我假设它与 Tomcat 7.0.13 一致,并且在版本 7.0.15 之前以编程方式覆盖 DefaultServlet 上下文根映射显然是不可能的。

与此同时,要么在 web.xml 中定义您的 servlet 映射,要么不映射到上下文根。无赖。

关于java - JBoss 作为 7 : Map Servlet to Context Root ("/") via Code Config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com