zoukankan      html  css  js  c++  java
  • 基于内嵌Tomcat的应用开发

    为什么使用内嵌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.32lib下所有的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.32in下的tomcat-juli.jar包拷到xxxx/Embedded/lib下。
    3.将JDK安装目录下的lib中的tools.jar包拷到xxxx/Embedded/lib下。
    4.将apache-tomcat-6.0.32conf下的context.xml和web.xml文件拷贝到xxxx/Embedded/conf下。
    5.将xxxx/Embedded/lib下的所有Jar包都加到工程的classpath下。
    6.在工程中新建EmbeddedTomcat类,该类代码如下:
    Java代码  
    1.  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 }  
      View Code
     
     
    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.  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 }  
      View Code
     
     
    遇到问题怎么办?
     
    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数据源?

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

    Java代码  
    1. 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"/>  
      View Code
     
     
  • 相关阅读:
    微信授权登录
    mpvue 试水的一天
    小程序请求接口统一封装到一个js文件中
    工作中vue项目前后端分离,调用后端本地接口出现跨域问题的完美解决
    百度小程序授权更好体验
    关于智能小程序网络请求封装
    vue 开发webapp 手机返回键 退出问题
    MySQL解决存入数据库和取出数据库时间格式问题
    关于小程序授权更好体验
    关于vue项目中在js中引入图片问题
  • 原文地址:https://www.cnblogs.com/HeroZearin/p/5207833.html
Copyright © 2011-2022 走看看