规格 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;的:(
答案 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中的静态条目将始终有效。