基本最小WAR配置

时间:2012-06-06 15:58:03

标签: java tomcat servlets war web.xml

我有一个突然需要重新打包为WAR的JAR(不要问为什么)。它将部署在Tomcat上。我想知道最小的设置是什么(根据web.xml和任何其他conf文件)来指示Tomcat部署应用程序并运行通常由JAR调用的方法{{1方法:

main(String[])

由于我没有使用Spring或任何其他类型的MVC框架,并且由于没有servlet或需要CDI /上下文,我想我的public class AppDriver { public static void main(String[] args) { AppDriver app = new AppDriver(); app.run(); } // This is the method I need ran by Tomcat at deploy-time. public void run() { // ... } } 可以非常简单;但令人惊讶的是,我找不到任何解释我需要的东西。

我还想象我需要以某种方式注释web.xml方法,或者在run()中引用它。但那就是我被困住的地方。提前谢谢。

3 个答案:

答案 0 :(得分:0)

您可以实现ServletContextListener,在这种情况下,当tomcat部署您的应用程序并启动它时,将调用您的contextInialized方法,在该方法中您可以调用run方法。

然后在web.xml中,您将在listener标记下为您的班级添加条目。

上述方法适用于servlet规范2.5

如果您使用的是Servlet Spec 3.0,只需在您的类中添加@ServletContextListener注释,而无需在web.xml中进行任何配置,当您的应用程序启动时,它将由您的容器调用。

答案 1 :(得分:0)

修改AppDriver类,如Daemon thread,然后从ServletContextListener.contextInitialized()方法启动帖子。

@WebListener
//Use the above annotation if it is Servlet 3.0
AppDriverInitializer implements ServletContextListener
{

   public void contextInitialized(ServletContext ctx)
   { 
      Thread appDriverThread = new Thread() {
         public void run() {
         //Have your AppDriver class run() method implemented here...
         }
      }
      appDriverThread.start();
   }
}

在WAR中以两种方式定义ServletContextListener侦听器

  • 在web.xml中定义侦听器

    <听众>     <监听级> AppDriverInitializer< /监听级>  < / listener>

  • 如果使用Servlet 3.0容器,使用@WebListener注释

答案 2 :(得分:0)

如果您想与Web应用程序进行外部通信,则需要WSDL。除此之外,这是一个示例web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
  xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">
  <display-name>SemanticAdaptationCoreService</display-name>
  <welcome-file-list>
    <!-- You can skip this part -->
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  <!-- context-params allow you to pass parameters to your app at runtime -->
  <context-param>
    <param-name>param1</param-name>
    <param-value>value1</param-value>
  </context-param>

  <!-- You can provide a listener class to handle WSDL requests -->
  <listener>
    <listener-class>your.listener.AClass</listener-class>
  </listener>

  <!-- the initializer servlet allows you to run custom methods when the webapp is loaded -->
  <servlet>
    <servlet-name>initializer</servlet-name>
    <servlet-class>your.Initializer</servlet-class>
    <!-- a 1 value requests running the class at load time -->
    <load-on-startup>1</load-on-startup>
  </servlet>
</web-app>

确保您的类扩展HttpServlet并覆盖将在加载时调用的public void init()方法。