测试环境:
tomcat-6.0.14
ubuntu gusty
sun-jdk-1.6
多个人合作的项目里只要修改tomcat-conf.properties文件后即可使用。我这里用了slf4j做LOG,不用LOG的把相关类去掉即可。还有我是把tomcat/lib下的jar都加进classpath的。
目录结构
/-|projectHome
|
|--src
| |--TomcatServer.java
| |--tomcat-conf.properties
|
|--webapp
| |--WEB-INF
| | |-web.xml
TomcatServer.java:
1 /**
2 * http://www.blogjava.net/jarod
3 * @author jarod
4 */
5 public class TomcatServer {
6
7 private static final Logger logger = LoggerFactory.getLogger(TomcatServer.class);
8
9 public static void main(String[] args) {
10 try {
11 new TomcatServer();
12 } catch (Throwable t) {
13 logger.error("", t);
14 }
15 }
16
17 private Embedded tomcat;
18
19 // tomcat根目录路径
20 private String catalinaHome;
21
22 // web项目所在路径
23 private String projectHome;
24
25 public TomcatServer() {
26 initConf();
27
28 tomcat = new Embedded();
29 tomcat.setCatalinaHome(catalinaHome);
30 Engine engine = tomcat.createEngine();
31 Host host = tomcat.createHost("localhost", projectHome);
32 host.addChild(tomcat.createContext("", ""));
33 host.addChild(tomcat.createContext("/", "webapp"));
34 engine.addChild(host);
35 engine.setDefaultHost("localhost");
36 tomcat.addEngine(engine);
37 tomcat.addConnector(tomcat.createConnector("", 8081, false));
38 registerShutdownHook();
39 try {
40 tomcat.start();
41 } catch (Exception e) {
42 throw new RuntimeException(e);
43 }
44 }
45
46 private void initConf() {
47 Properties properties = new Properties();
48 try {
49 properties.load(TomcatServer.class.getResourceAsStream("/tomcat-conf.properties"));
50 catalinaHome = properties.getProperty("catalina.home");
51
52 File f = new File(".");
53 projectHome = f.getAbsolutePath();
54 } catch (IOException e) {
55 throw new RuntimeException(e);
56 }
57 }
58
59 private void registerShutdownHook() {
60 Runtime.getRuntime().addShutdownHook(new Thread() {
61 @Override
62 public void run() {
63 try {
64 tomcat.stop();
65 } catch (LifecycleException e) {
66 throw new RuntimeException(e);
67 }
68 }
69 });
70 }
71 }
tomcat-conf.properties:
catalina.home=/home/jarod/server/tomcat/apache-tomcat-6.0.14
为什么要setCatalinaHome?
设了该值,tomcat启动时会在该目录加载默认的一些配置,如MIME mapping等,如果要自己手动添加配置太麻烦了,而如果不要这些配置,这个embedded tomcat用处也不大