`

基于内嵌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.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类,该类代码如下:
public class EmbeddedTomcat {
	private static String CONTEXT_PATH = "/TestForTomcat6";
	private static String PROJECT_PATH = System.getProperty("user.dir");
	private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";
	private static String TOMCAT_HOME = PROJECT_PATH + File.separatorChar + "Embedded" + File.separatorChar + "Tomcat";
	private static String ENCODING = "UTF-8";
	private static int TOMCAT_PORT = 9080;

	// 开始嵌入式Tomcat服务器
	public static void startTomcat() throws Exception {
		try {
			long startTime = System.currentTimeMillis();
			Embedded tomcat = new Embedded();
			// 设置Tomcat的工作目录:工程根目录/Embedded/Tomcat
			tomcat.setCatalinaHome(TOMCAT_HOME);
			System.out.println("TOMCAT_HOME:" + TOMCAT_HOME);
			
			// 产生Tomcat引擎
			Engine engine = tomcat.createEngine();
			//"localhost"对应的是work下的"Catalina"
			engine.setName("Catalina");
			
			//创建Host,设置Host的工作目录
			Host host = tomcat.createHost("localhost", tomcat.getCatalinaHome());
			host.setAutoDeploy(true);
			
			//把Host加入Engine
			engine.addChild(host);
			engine.setDefaultHost(host.getName());
			
			//创建Context,并加入Host中
			Context context = null;
			context = tomcat.createContext(CONTEXT_PATH, WEB_APP_PATH);
			
			host.addChild(context);
            host.addChild(tomcat.createContext("", ""));
			if (!new File(WEB_APP_PATH).exists()) {
				System.err.println("请检查应用的目录以及相关资源是否存在.");
			}
			tomcat.addEngine(engine);
			
			Connector connector = tomcat.createConnector((java.net.InetAddress) null, TOMCAT_PORT, false);
			connector.setURIEncoding(ENCODING);
			connector.setUseBodyEncodingForURI(true);
			tomcat.addConnector(connector);
			AprLifecycleListener listener = new AprLifecycleListener();
			tomcat.addLifecycleListener(listener);
			tomcat.start();
			//停住一个小时(3600秒)
			Thread.sleep(3600000);
			tomcat.stop();
			System.err.println("Tomcat started in " + (System.currentTimeMillis() - startTime) + " ms.");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		try {
			EmbeddedTomcat.startTomcat();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}


}
 

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类,该类代码如下:
public class EmbededTomcat {
	private final Log log=LogFactory.getLog(getClass());
	private static String CONTEXT_PATH = "/TestForTomcat7";
	private static String PROJECT_PATH = System.getProperty("user.dir");
	private static String WEB_APP_PATH = PROJECT_PATH + File.separatorChar + "WebRoot";
	private static String CATALINA_HOME = PROJECT_PATH + "/Embedded/Tomcat";
	private Tomcat tomcat = new Tomcat();
    private int port;
	
    public EmbededTomcat(int port){
        this.port=port;
    }
    
	public void start()throws Exception{
		tomcat.setPort(port);
		tomcat.setBaseDir(CATALINA_HOME);
		tomcat.getHost().setAppBase(WEB_APP_PATH);
		try{
			StandardServer server = (StandardServer)tomcat.getServer();
		    AprLifecycleListener listener = new AprLifecycleListener();
		    server.addLifecycleListener(listener);
			tomcat.addWebapp(CONTEXT_PATH, WEB_APP_PATH);
		}catch(ServletException e){
			e.printStackTrace();
			log.error(e.getMessage());
			throw e;
		}
		try{
			tomcat.start();
			tomcat.getServer().await();
		}catch(LifecycleException e){
			e.printStackTrace();
			log.error(e.getMessage());
			throw e;
		}
		log.info("Tomcat started.");
	}
	
	public void stop()throws Exception{
            try{
                tomcat.stop();
            }
            catch(LifecycleException ex){
                ex.printStackTrace();
                log.error(ex.getMessage());
                throw ex;
            }
            log.info("Tomcat stoped");
	}
        
    public void setPort(int port){
        this.port=port;
    }
    public int getPort(){
        return this.port;
    }
    
    public static void main(String[] args) throws Exception {
    	EmbededTomcat embededTomcat = new EmbededTomcat(7080);
    	embededTomcat.start();
	}
}
 

遇到问题怎么办?

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>节点的属性来新建数据源配置,如下:

 

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

分享到:
评论
2 楼 guduyishuai 2017-02-10  
context = tomcat.createContext(CONTEXT_PATH, WEB_APP_PATH); 
host.addChild(context); 
host.addChild(tomcat.createContext("", "")); 
???
1 楼 di1984HIT 2014-03-18  
写的不错,学习了。

相关推荐

    基于内嵌apache-tomcat-8.0.24的应用开发

    为什么使用内嵌Tomcat开发?...基于内嵌apache-tomcat-8.0.24的应用开发解决了网上提供省了el-ri相关jar 包的问题,此项目可以直接部署到myeclispe中直接运行EmbededTomcat类就可以执行内嵌tomcat运行web程序

    基于 Spring Boot 框架的人事管理系统的设计与实现 完整论文 +代码+毕设 +ppt

    本设计在技术方面采用了较前沿的技术,应用端基于 Java EE 体系中开源应用框架 Spring Boot(集成 IOC, MVC, ORM),Spring Security (安全框架),内嵌 Tomcat 服务器;前端基于 JavaScript 的渐进式框架 Vue.js;页面设计...

    49道Spring Boot面试题带答案(很全)

    Spring Boot是一个用于简化Spring应用程序创建和开发过程的框架。它的设计目标是通过...内嵌Servlet容器:Spring Boot的应用程序内嵌了Tomcat或Jetty等Servlet容器,使得开发人员无需单独部署和配置应用程序的容器。

    SpringBoot框架学习

    (2)内嵌Tomcat或Jetty等Servlet容器; (3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置; (4)尽可能自动配置Spring容器; (5)提供准备好的特性,如指标、健康检查和外部化配置; (6)...

    SpringBoot应用回顾

    2. 内嵌服务器:Spring Boot默认内嵌了常用的Web服务器(如Tomcat、Jetty等),无需手动部署到独立的服务器上,可以直接运行。 3. 自动化依赖管理:Spring Boot提供了一个强大的依赖管理工具,可以根据项目的需求...

    完结16章SpringBoot2 仿B站高性能前端+后端项目

    2、内嵌服务器:Spring Boot 提供内嵌的 Tomcat、Jetty 和 Undertow 等 Web 服务器,使得应用程序的部署变得非常简单,开发人员只需要将应用程序打包成一个jar文件,即可在任何地方运行应用程序 3、简化依赖...

    spring系列框架之SpringBoot框架

    内嵌的容器:Spring Boot 可以打包成一个独立的 JAR 文件,并且内置了 Tomcat、Jetty 或 Undertow 等容器,使得应用程序可以直接运行,而无需外部容器的支持。 自动化的依赖管理:Spring Boot 通过 Starter POMs ...

    基于Spring Boot的疗养院管理系统的设计与实现.zip

    高并发支持:利用Spring Boot内嵌的Tomcat服务器,能够很好地支持并发访问,保证系统稳定运行。系统实现了疗养院的核心业务流程,包括但不限于客户资料管理、预约登记、疗养服务安排、费用计算与收取等。通过本系统...

    SpringBoot2.0教程.pdf

    简言之,Spring Boot 是一个快速开发的框架,能够快速的整合第三方框架,简化 XML 配置,全部采用注解 形式,内置 Tomcat 容器,帮助开发者能够实现快速开发,简化了应用系统的初始搭建以及开发过程。 本节主要目标...

    TongWeb嵌入式版本用户手册-7.0.E.5

    本手册主要适用对象为使用嵌入式版应用服务器进行应用开发的开发人员,以及生产环 境的系统管理人员,应用发布人员等具有 TongWeb 嵌入式版的使用和配置经验的用户。因 此,具备如下的技能可能会有助于使用者更好的...

    Jetty中文手册

    Porting from Tomcat Jetty版本比较列表 参考 Jetty 7 Latest JavaDoc Jetty 7 Latest Source XRef Index of Generated Release Documents–API and XRef documentation for previous releases. 通用参考 Jetty体系...

    springboot参考指南

    开发你的第一个Spring Boot应用 v. 11.1. 创建POM vi. 11.2. 添加classpath依赖 vii. 11.3. 编写代码 i. 11.3.1. @RestController和@RequestMapping注解 ii. 11.3.2. @EnableAutoConfiguration注解 iii. 11.3.3. ...

    atm-restful-service:一个示例 atm 服务

    查看余额存钱提款运行应用程序请执行Application.java中的main方法来启动内嵌的tomcat服务器。无需身份验证'atm-restful-service' 提供基于令牌的身份验证。 如何在开发中禁用身份验证。 通过在 env.properties ...

Global site tag (gtag.js) - Google Analytics