基于内嵌Tomcat的应用开发 基于内嵌Tomcat的应用开发

 

为什么使用内嵌Tomcat开发?

    开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率.

 

怎么搭建内嵌Tomcat环境呢?(以tomcat6和tomcat7为例)

在开发工程(xxxx)的根目录下新建以下的目录:

xxxx/Embedded/conf

xxxx/Embedded/lib

xxxx/Embedded/webapps

xxxx/Embedded/work

扫描二维码关注公众号,回复: 726963 查看本文章

 

apache-tomcat-6.0.32

apache官方只提供了apache-tomcat5和apache-tomcat7的内嵌版本,apache-tomcat6是没有的,但我们同样可以提供内嵌版本。

1. 将apache-tomcat-6.0.32\lib下所有的jar包拷到xxxx/Embedded/lib下

 

  • annotations-api.jar
  • catalina.jar
  • catalina-ant.jar
  • catalina-ha.jar
  • catalina-tribes.jar
  • ecj-3.3.1.jar
  • el-api.jar
  • jasper.jar
  • jasper-el.jar
  • jsp-api.jar
  • servlet-api.jar
  • tomcat-coyote.jar
  • tomcat-dbcp.jar
  • tomcat-i18n-es.jar
  • tomcat-i18n-fr.jar
  • tomcat-i18n-ja.jar
2.将apache-tomcat-6.0.32\bin下的tomcat-juli.jar包拷到xxxx/Embedded/lib下。
3.将JDK安装目录下的lib中的tools.jar包拷到xxxx/Embedded/lib下。
4.将apache-tomcat-6.0.32\conf下的context.xml和web.xml文件拷贝到xxxx/Embedded/conf下。
5.将xxxx/Embedded/lib下的所有Jar包都加到工程的classpath下。
6.在工程中新建EmbeddedTomcat类,该类代码如下:
Java代码    收藏代码
  1. public class EmbeddedTomcat {  
  2.     private static String CONTEXT_PATH = "/TestForTomcat6";  
  3.     private static String PROJECT_PATH = System.getProperty("user.dir");  
  4.     private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";  
  5.     private static String TOMCAT_HOME = PROJECT_PATH + File.separatorChar + "Embedded" + File.separatorChar + "Tomcat";  
  6.     private static String ENCODING = "UTF-8";  
  7.     private static int TOMCAT_PORT = 9080;  
  8.   
  9.     // 开始嵌入式Tomcat服务器  
  10.     public static void startTomcat() throws Exception {  
  11.         try {  
  12.             long startTime = System.currentTimeMillis();  
  13.             Embedded tomcat = new Embedded();  
  14.             // 设置Tomcat的工作目录:工程根目录/Embedded/Tomcat  
  15.             tomcat.setCatalinaHome(TOMCAT_HOME);  
  16.             System.out.println("TOMCAT_HOME:" + TOMCAT_HOME);  
  17.               
  18.             // 产生Tomcat引擎  
  19.             Engine engine = tomcat.createEngine();  
  20.             //"localhost"对应的是work下的"Catalina"  
  21.             engine.setName("Catalina");  
  22.               
  23.             //创建Host,设置Host的工作目录  
  24.             Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome());  
  25.             host.setAutoDeploy(true);  
  26.               
  27.             //把Host加入Engine  
  28.             engine.addChild(host);  
  29.             engine.setDefaultHost(host.getName());  
  30.               
  31.             //创建Context,并加入Host中  
  32.             Context context = null;  
  33.             context = tomcat.createContext(CONTEXT_PATH, WEB_APP_PATH);  
  34.               
  35.             host.addChild(context);  
  36.             host.addChild(tomcat.createContext(""""));  
  37.             if (!new File(WEB_APP_PATH).exists()) {  
  38.                 System.err.println("请检查应用的目录以及相关资源是否存在.");  
  39.             }  
  40.             tomcat.addEngine(engine);  
  41.               
  42.             Connector connector = tomcat.createConnector((java.net.InetAddress) null, TOMCAT_PORT, false);  
  43.             connector.setURIEncoding(ENCODING);  
  44.             connector.setUseBodyEncodingForURI(true);  
  45.             tomcat.addConnector(connector);  
  46.             AprLifecycleListener listener = new AprLifecycleListener();  
  47.             tomcat.addLifecycleListener(listener);  
  48.             tomcat.start();  
  49.             //停住一个小时(3600秒)  
  50.             Thread.sleep(3600000);  
  51.             tomcat.stop();  
  52.             System.err.println("Tomcat started in " + (System.currentTimeMillis() - startTime) + " ms.");  
  53.         } catch (Exception e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.     }  
  57.       
  58.     public static void main(String[] args) {  
  59.         try {  
  60.             EmbeddedTomcat.startTomcat();  
  61.         } catch (Exception e) {  
  62.             e.printStackTrace();  
  63.         }   
  64.     }  
  65.   
  66.   
  67. }  
 

apache-tomcat-7.0.22

1.请先到apache-tomcat官方网站下载apache-tomcat-7.0.23-embed内嵌版本,解压后将apache-tomcat-7.0.23-embed下的所有jar包拷贝到xxxx/Embedded/lib下,具体的jar如下:
  • ecj-3.7.jar
  • tomcat-dbcp.jar
  • tomcat-embed-core.jar
  • tomcat-embed-jasper.jar
  • tomcat-embed-logging-juli.jar
  • tomcat-embed-logging-log4j.jar
2.将apache-tomcat-7.0.23/ conf下的context.xml和web.xml文件拷贝到xxxx/Embedded/conf下。
3.将xxxx/Embedded/lib下的所有Jar包都加到工程的classpath下。
4.在工程中新建EmbeddedTomcat类,该类代码如下:
Java代码    收藏代码
  1. public class EmbededTomcat {  
  2.     private final Log log=LogFactory.getLog(getClass());  
  3.     private static String CONTEXT_PATH = "/TestForTomcat7";  
  4.     private static String PROJECT_PATH = System.getProperty("user.dir");  
  5.     private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";  
  6.     private static String CATALINA_HOME = PROJECT_PATH + "/Embedded/Tomcat";  
  7.     private Tomcat tomcat = new Tomcat();  
  8.     private int port;  
  9.       
  10.     public EmbededTomcat(int port){  
  11.         this.port=port;  
  12.     }  
  13.       
  14.     public void start()throws Exception{  
  15.         tomcat.setPort(port);  
  16.         tomcat.setBaseDir(CATALINA_HOME);  
  17.         tomcat.getHost().setAppBase(WEB_APP_PATH);  
  18.         try{  
  19.             StandardServer server = (StandardServer)tomcat.getServer();  
  20.             AprLifecycleListener listener = new AprLifecycleListener();  
  21.             server.addLifecycleListener(listener);  
  22.             tomcat.addWebapp(CONTEXT_PATH, WEB_APP_PATH);  
  23.         }catch(ServletException e){  
  24.             e.printStackTrace();  
  25.             log.error(e.getMessage());  
  26.             throw e;  
  27.         }  
  28.         try{  
  29.             tomcat.start();  
  30.             tomcat.getServer().await();  
  31.         }catch(LifecycleException e){  
  32.             e.printStackTrace();  
  33.             log.error(e.getMessage());  
  34.             throw e;  
  35.         }  
  36.         log.info("Tomcat started.");  
  37.     }  
  38.       
  39.     public void stop()throws Exception{  
  40.             try{  
  41.                 tomcat.stop();  
  42.             }  
  43.             catch(LifecycleException ex){  
  44.                 ex.printStackTrace();  
  45.                 log.error(ex.getMessage());  
  46.                 throw ex;  
  47.             }  
  48.             log.info("Tomcat stoped");  
  49.     }  
  50.           
  51.     public void setPort(int port){  
  52.         this.port=port;  
  53.     }  
  54.     public int getPort(){  
  55.         return this.port;  
  56.     }  
  57.       
  58.     public static void main(String[] args) throws Exception {  
  59.         EmbededTomcat embededTomcat = new EmbededTomcat(7080);  
  60.         embededTomcat.start();  
  61.     }  
  62. }  
 

遇到问题怎么办?

1. 内嵌Tomcat启动时报OutOfMemoryError异常,如何设置JVM的内存大小?

答:请按照以下步骤设置JVM的内存大小:

1点击“Window->Preferences->Java->Installed JREs”可以看到所有的JRE

2点中当前使用的JRE,再点击右边的“Edit”。

3为该JRE的“Default VM Arguments”配置参数值:-Xmx1024M -Xms512M -XX:MaxPermSize=256m。

 

 

2.如何配置数据库的JNDI数据源?

答:打开XXXX\Embedded\Tomcat\conf\context.xml配置文件,添加<Resource>节点的属性来新建数据源配置,如下:

 

Java代码    收藏代码
  1. <Resource name="xxxxDataSource" auth="Container"  
  2.               type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"  
  3.               url="jdbc:oracle:thin:@localhost:1521:xxxxx"  
  4.               username="xxxx" password="xxxx" maxActive="15" maxIdle="10" initialSize="2"  
  5.               testWhileIdle="true" validationQuery="select 1 from dual" testOnBorrow="true"/>  
 

 

为什么使用内嵌Tomcat开发?

    开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率.

 

怎么搭建内嵌Tomcat环境呢?(以tomcat6和tomcat7为例)

在开发工程(xxxx)的根目录下新建以下的目录:

xxxx/Embedded/conf

xxxx/Embedded/lib

xxxx/Embedded/webapps

xxxx/Embedded/work

 

apache-tomcat-6.0.32

apache官方只提供了apache-tomcat5和apache-tomcat7的内嵌版本,apache-tomcat6是没有的,但我们同样可以提供内嵌版本。

1. 将apache-tomcat-6.0.32\lib下所有的jar包拷到xxxx/Embedded/lib下

 

  • annotations-api.jar
  • catalina.jar
  • catalina-ant.jar
  • catalina-ha.jar
  • catalina-tribes.jar
  • ecj-3.3.1.jar
  • el-api.jar
  • jasper.jar
  • jasper-el.jar
  • jsp-api.jar
  • servlet-api.jar
  • tomcat-coyote.jar
  • tomcat-dbcp.jar
  • tomcat-i18n-es.jar
  • tomcat-i18n-fr.jar
  • tomcat-i18n-ja.jar
2.将apache-tomcat-6.0.32\bin下的tomcat-juli.jar包拷到xxxx/Embedded/lib下。
3.将JDK安装目录下的lib中的tools.jar包拷到xxxx/Embedded/lib下。
4.将apache-tomcat-6.0.32\conf下的context.xml和web.xml文件拷贝到xxxx/Embedded/conf下。
5.将xxxx/Embedded/lib下的所有Jar包都加到工程的classpath下。
6.在工程中新建EmbeddedTomcat类,该类代码如下:
Java代码    收藏代码
  1. public class EmbeddedTomcat {  
  2.     private static String CONTEXT_PATH = "/TestForTomcat6";  
  3.     private static String PROJECT_PATH = System.getProperty("user.dir");  
  4.     private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";  
  5.     private static String TOMCAT_HOME = PROJECT_PATH + File.separatorChar + "Embedded" + File.separatorChar + "Tomcat";  
  6.     private static String ENCODING = "UTF-8";  
  7.     private static int TOMCAT_PORT = 9080;  
  8.   
  9.     // 开始嵌入式Tomcat服务器  
  10.     public static void startTomcat() throws Exception {  
  11.         try {  
  12.             long startTime = System.currentTimeMillis();  
  13.             Embedded tomcat = new Embedded();  
  14.             // 设置Tomcat的工作目录:工程根目录/Embedded/Tomcat  
  15.             tomcat.setCatalinaHome(TOMCAT_HOME);  
  16.             System.out.println("TOMCAT_HOME:" + TOMCAT_HOME);  
  17.               
  18.             // 产生Tomcat引擎  
  19.             Engine engine = tomcat.createEngine();  
  20.             //"localhost"对应的是work下的"Catalina"  
  21.             engine.setName("Catalina");  
  22.               
  23.             //创建Host,设置Host的工作目录  
  24.             Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome());  
  25.             host.setAutoDeploy(true);  
  26.               
  27.             //把Host加入Engine  
  28.             engine.addChild(host);  
  29.             engine.setDefaultHost(host.getName());  
  30.               
  31.             //创建Context,并加入Host中  
  32.             Context context = null;  
  33.             context = tomcat.createContext(CONTEXT_PATH, WEB_APP_PATH);  
  34.               
  35.             host.addChild(context);  
  36.             host.addChild(tomcat.createContext(""""));  
  37.             if (!new File(WEB_APP_PATH).exists()) {  
  38.                 System.err.println("请检查应用的目录以及相关资源是否存在.");  
  39.             }  
  40.             tomcat.addEngine(engine);  
  41.               
  42.             Connector connector = tomcat.createConnector((java.net.InetAddress) null, TOMCAT_PORT, false);  
  43.             connector.setURIEncoding(ENCODING);  
  44.             connector.setUseBodyEncodingForURI(true);  
  45.             tomcat.addConnector(connector);  
  46.             AprLifecycleListener listener = new AprLifecycleListener();  
  47.             tomcat.addLifecycleListener(listener);  
  48.             tomcat.start();  
  49.             //停住一个小时(3600秒)  
  50.             Thread.sleep(3600000);  
  51.             tomcat.stop();  
  52.             System.err.println("Tomcat started in " + (System.currentTimeMillis() - startTime) + " ms.");  
  53.         } catch (Exception e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.     }  
  57.       
  58.     public static void main(String[] args) {  
  59.         try {  
  60.             EmbeddedTomcat.startTomcat();  
  61.         } catch (Exception e) {  
  62.             e.printStackTrace();  
  63.         }   
  64.     }  
  65.   
  66.   
  67. }  
 

apache-tomcat-7.0.22

1.请先到apache-tomcat官方网站下载apache-tomcat-7.0.23-embed内嵌版本,解压后将apache-tomcat-7.0.23-embed下的所有jar包拷贝到xxxx/Embedded/lib下,具体的jar如下:
  • ecj-3.7.jar
  • tomcat-dbcp.jar
  • tomcat-embed-core.jar
  • tomcat-embed-jasper.jar
  • tomcat-embed-logging-juli.jar
  • tomcat-embed-logging-log4j.jar
2.将apache-tomcat-7.0.23/ conf下的context.xml和web.xml文件拷贝到xxxx/Embedded/conf下。
3.将xxxx/Embedded/lib下的所有Jar包都加到工程的classpath下。
4.在工程中新建EmbeddedTomcat类,该类代码如下:
Java代码    收藏代码
  1. public class EmbededTomcat {  
  2.     private final Log log=LogFactory.getLog(getClass());  
  3.     private static String CONTEXT_PATH = "/TestForTomcat7";  
  4.     private static String PROJECT_PATH = System.getProperty("user.dir");  
  5.     private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";  
  6.     private static String CATALINA_HOME = PROJECT_PATH + "/Embedded/Tomcat";  
  7.     private Tomcat tomcat = new Tomcat();  
  8.     private int port;  
  9.       
  10.     public EmbededTomcat(int port){  
  11.         this.port=port;  
  12.     }  
  13.       
  14.     public void start()throws Exception{  
  15.         tomcat.setPort(port);  
  16.         tomcat.setBaseDir(CATALINA_HOME);  
  17.         tomcat.getHost().setAppBase(WEB_APP_PATH);  
  18.         try{  
  19.             StandardServer server = (StandardServer)tomcat.getServer();  
  20.             AprLifecycleListener listener = new AprLifecycleListener();  
  21.             server.addLifecycleListener(listener);  
  22.             tomcat.addWebapp(CONTEXT_PATH, WEB_APP_PATH);  
  23.         }catch(ServletException e){  
  24.             e.printStackTrace();  
  25.             log.error(e.getMessage());  
  26.             throw e;  
  27.         }  
  28.         try{  
  29.             tomcat.start();  
  30.             tomcat.getServer().await();  
  31.         }catch(LifecycleException e){  
  32.             e.printStackTrace();  
  33.             log.error(e.getMessage());  
  34.             throw e;  
  35.         }  
  36.         log.info("Tomcat started.");  
  37.     }  
  38.       
  39.     public void stop()throws Exception{  
  40.             try{  
  41.                 tomcat.stop();  
  42.             }  
  43.             catch(LifecycleException ex){  
  44.                 ex.printStackTrace();  
  45.                 log.error(ex.getMessage());  
  46.                 throw ex;  
  47.             }  
  48.             log.info("Tomcat stoped");  
  49.     }  
  50.           
  51.     public void setPort(int port){  
  52.         this.port=port;  
  53.     }  
  54.     public int getPort(){  
  55.         return this.port;  
  56.     }  
  57.       
  58.     public static void main(String[] args) throws Exception {  
  59.         EmbededTomcat embededTomcat = new EmbededTomcat(7080);  
  60.         embededTomcat.start();  
  61.     }  
  62. }  
 

遇到问题怎么办?

1. 内嵌Tomcat启动时报OutOfMemoryError异常,如何设置JVM的内存大小?

答:请按照以下步骤设置JVM的内存大小:

1点击“Window->Preferences->Java->Installed JREs”可以看到所有的JRE

2点中当前使用的JRE,再点击右边的“Edit”。

3为该JRE的“Default VM Arguments”配置参数值:-Xmx1024M -Xms512M -XX:MaxPermSize=256m。

 

 

2.如何配置数据库的JNDI数据源?

答:打开XXXX\Embedded\Tomcat\conf\context.xml配置文件,添加<Resource>节点的属性来新建数据源配置,如下:

 

Java代码    收藏代码
  1. <Resource name="xxxxDataSource" auth="Container"  
  2.               type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"  
  3.               url="jdbc:oracle:thin:@localhost:1521:xxxxx"  
  4.               username="xxxx" password="xxxx" maxActive="15" maxIdle="10" initialSize="2"  
  5.               testWhileIdle="true" validationQuery="select 1 from dual" testOnBorrow="true"/>  
 

猜你喜欢

转载自rongdmmap-126-com.iteye.com/blog/1410104