Web.xml 配置替换为 LoadOnStartup 的注解

Web.xml configuration replaced with Anotations for LoadOnStartup

规格 Tomcat 8.0.20,O/s:赢 7,Java:1.8

1) Servlet StartServletInit 扩展了 HttpServlet

2) StartServletInit 只有 1 个方法 "public void init(ServletConfig config)" 它在类路径中读取 "properties file" 并打印 在控制台上控制台注入 key/value 对。

3) Web.xml 的标题条目如下

version="3.1" 
  **metadata-complete="false"**  
  xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

3) Web.xml 启动时加载为

<servlet>
<servlet-name>StartServletInit</servlet-name>
<servlet-class>org.web.init.StartServletInit</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

O/p:完美执行并在控制台上打印。 ===> :)

问题

注释[注释了 web.xml 的 loadOnStartup 并注释了代码] "@WebServlet(名称 = "StartServletInit",loadOnStartup = 1)

O/p :不 - 将 key/value 打印到控制台。 ===> :(

我认为您不能为同一个 servlet 混合 web.xml 配置和注释。您可以使用 web.xml 或注释,但不能同时使用。

尝试从 web.xml 中完全删除 servlet 定义和 servlet 映射,并将 servlet 映射的 url-pattern 的值作为 "value" 属性放在注释中。使用注释时,servlet 名称并不是很有用。

示例:

@WebServlet(value="/your_url_pattern", loadOnStartup=1)

首先要尝试的是将 loadOnStartup 设置为“0”,这意味着立即加载 servlet。

如果您想 运行 在启动时编写代码,最好使用 ServletContextListener。这就是它的用途,而 servlet 大部分时间都在侦听请求:

@WebListener
public class BootListener implements ServletContextListener {

 @Override
 public void contextInitialized(ServletContextEvent sce) {
  // handle app start ...
 }

 @Override
 public void contextDestroyed(ServletContextEvent sce) {
  // handle app stop ...
 }
}

不要混淆注释和 web.xml 声明,使用其中任何一个。 metadata-complete="false" 将告诉 servlet 容器扫描类路径以获取注释。这可能适用于也可能不适用于不同的环境,而 web.xml 中的静态条目将始终有效。