基于内嵌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
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();
}
} }
- 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
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();
}
}
答:请按照以下步骤设置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"/>
基于内嵌Tomcat的应用开发的更多相关文章
- 如何优雅的关闭基于Spring Boot 内嵌 Tomcat 的 Web 应用
背景 最近在搞云化项目的启动脚本,觉得以往kill方式关闭服务项目太粗暴了,这种kill关闭应用的方式会让当前应用将所有处理中的请求丢弃,响应失败.这种形式的响应失败在处理重要业务逻辑中是要极力避免的 ...
- 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- Spring Boot 内嵌Tomcat的端口号的修改
操作非常的简单,不过如果从来没有操作过,也是需要查找一下资料的,所以,在此我简单的记录一下自己的操作步骤以备后用! 1:我的Eclipse版本,不同的开发工具可能有所差异,不过大同小异 2:如何进入对 ...
- 查看和指定SpringBoot内嵌Tomcat的版本
查看当前使用的Tomcat版本号 Maven Repository中查看 比如我们需要查Spring Boot 2.1.4-RELEASE的内嵌Tomcat版本, 可以打开链接: https://mv ...
- 内嵌tomcat启动速度慢
项目上最近要把内置的jetty换成tomcat, 来更好的支持servlet 3.0 本来以为换个容器, 几十行代码就好了. 实际上换了tomcat后, 一开始启动tomcat, 非常的慢. jett ...
- 内嵌tomcat最简单用法
maven项目引入内嵌tomcat依赖 <dependency> <groupId>org.apache.tomcat.embed</groupId> <ar ...
- spring boot 2 内嵌Tomcat Stopping service [Tomcat]
我在使用springboot时,当代码有问题时,发现控制台打印下面信息: Connected to the target VM, address: '127.0.0.1:42091', transpo ...
- Spring Boot内嵌Tomcat session超时问题
最近让Spring Boot内嵌Tomcat的session超时问题给坑了一把. 在应用中需要设置session超时时间,然后就习惯的在application.properties配置文件中设置如下, ...
- springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤
去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.sprin ...
随机推荐
- Redis - 发布/订阅模式
Redis 提供了一组命令可以让开发者实现 “发布/订阅” 模式.“发布/订阅” 可以实现进程间的消息传递,其原理是这样的: “发布/订阅” 模式中包含两种角色,分别是发布者和订阅者.订阅者可以订阅一 ...
- Nginx - HTTP Configuration, Module Directives
Socket and Host Configuration This set of directives will allow you to configure your virtual hosts. ...
- JQuery合并列(可用于导出Word)
在网上找了一些JQuery合并列的例子,但是都是用.hide()的方式,这样导致了在导出Word的时候表格严重变形 自己写了一个用.remove()方式的合并列 function arrangeTab ...
- cv::mat转换成QImage的问题
在进行cv::mat转换为QImage过程中,经常出现问题: cv::Mat image; ...QImage img=QImage((const unsigned char*)(image.data ...
- 补充:sql server 中的相关查询、case函数
相关查询(在同一个表中) 相关查询类似子查询,但是又不同于子查询:子查询中的子条件可以单独查出数据,但是相关查询的子条件不能查处数据.(可以理解成C#中for的穷举法,第一个for走一个,第二个for ...
- (转)MSSQL 各个发行版本版本号以及Compact 版本号
终于开始写博客了. 不要笑啊. 下面是MSSQL 的发行版本以及版本号.自己整理的. http://support.microsoft.com/kb/321185/zh-cn SQL Server 2 ...
- PHP中的变量
PHP中的变量 程序是由代码与数据两部分组成,数据存储在变量,变量的本质是内存中的一个存储空间.变量对应的空间有一个名子,叫变量名,变量名用于对数据进行读写. 变量的定义 在php变量名之前必须使用' ...
- EL表达式获取Map和List中的值
EL表达式获取Map和List中的值 EL表达式取Map中的值: 当Map中是String,String时 后台servlet中: Map<String, String> map1 = ...
- maven中scope参数说明
官方说明文档地址https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Depen ...
- 清理c盘垃圾(将一下代码复制到记事本然后把后缀名改为xxx.bat,然后双击,就ok了!!)
@echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._m ...