我有一个突然需要重新打包为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()
中引用它。但那就是我被困住的地方。提前谢谢。
答案 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()
方法。