Web.xml配置替换为启动时加载的注释

时间:2015-03-25 20:30:22

标签: tomcat annotations servlet-3.0

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

1)Servlet StartServletInit扩展了HttpServlet

2)StartServletInit有 ONLY 1方法" public void init(ServletConfig    配置)"它读取"属性文件"在classpath中打印    在控制台上控制注入的键/值对。

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:完美执行并在控制台上打印。 ===&GT; :)

问题

Annotation [注释了web.xml&#39的loadOnStartup&amp;注释代码] &#34; @WebServlet(name =&#34; StartServletInit&#34;,loadOnStartup = 1)

O / p:不 - 将键/值打印到控制台。 ===&GT;的:(

2 个答案:

答案 0 :(得分:0)

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

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

示例:

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

答案 1 :(得分:0)

首先要尝试将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中的静态条目将始终有效。