tomcat——轻量级中间件学习

原创 2017年06月21日 21:11:56

Tomcat文件结构

 ${tomcat目录}

 |--bin/

 |--conf/

 |  |--context.xml

 |  |--server.xml

 |  |--tomcat-users.xml

 |  +--web.xml

  |

 |--lib/

 |--logs/

 +--webapps/

 

Bin      存放启动和关闭tomcat脚本

conf      包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml

work     存放jsp编译后产生的class文件

webapps  存放应用程序示例,以后你要部署的应用程序也要放到此目录

logs      存放日志文件

lib      主要存放tomcat所需的jar文件

 

其中,server.xml是tomcat的主要配置文件,也是我们用到最多的。

如,修改访问端口,tomcat默认端口是8080,我们通常要将它设置为80端口:

<Connector port="80"protocol="HTTP/1.1"
              connectionTimeout="20000"
               redirectPort="8443"/>

port指定一个端口,这个端口负责监听和关闭tomcat的请求

tomcat部署设置

<Host name="localhost"  appBase="webapps"
           unpackWARs="true" autoDeploy="true">

Host 表示一个虚拟主机,name代表了主机名,所以我们用localhost+tomcat的端口号,访问这台“虚拟主机”

appBase指定了部署的目录;

autoDeploy设置是否自动部署;

unpackWARs设置了部署的形式,如果为true,则会以展开的形式部署;如果为false,则会以war包的形式部署。


webapps加载的顺序

1 有context配置的应用优先启动;

2 以目录形式部署的应用随后启动;

3 以war文件部署的应用最后启动。

如何配置context,让他优先启动:

 

在tomcat的配置文件中,一个Web应用就是一个特定的Context,可以通过在server.xml中新建Context里部署一个应用程序。

方法:打开server.xml文件,在Host标签内建一个Context,内容如下:

<Context  path="/photo"  reloadable="true"  docBase="D:/myapp"  workDir="D:/myapp "/>

其中path是虚拟路径,docBase是应用程序的物理路径,workDir是这个应用的工作目录。

         这里最常用的是为图片上传配置虚拟目录,如以上的配置,当开启tomcat时,访问http://localhost/photo/+ D:/myapp下的图片名称,就可以读取到他的文件目录下的图片资源。

 

tomcat两种部署方法

静态部署:

部署时,涉及到一个变量appBase。这个变量标识了一个目录,该目录存放着部署的web应用。一般默认情况下,appBase为CATALINA_HOME/webapps,配置信息位于server.xml中。

默认的配置:

<Host name="localhost"  appBase="webapps"
           unpackWARs="true" autoDeploy="true">

静态部署的顺序:

1 部署上下文描述符。

2 部署展开的应用。如果部署目录中存在相应的war包,则检查是否比当前的应用更新;如果更新,则删除当前的应用,并解压该war包,得到最新的应用。

3 部署war包。

 

动态部署:

动态部署需要一个配置参数,autoDeploy 为 true。

  当设置了该属性后,tomcat会在其运行时支持如下的操作:

  1 部署新拷贝到appBase下的war文件

  2 部署拷贝到appBase下的展开的应用(未压缩的)

  3 当提供一个更新的war包时,重新部署应用。会先删除当前存在的应用,再进行解压部署。

  4 当/WEB-INF/web.xml被改写时,自动部署

  5 当web应用的context.xml上下文描述符被更新时,自动部署

  6 当CATALINA_HOME/conf下对应的应用的上下文描述符被更新时,自动部署

7 当对应的docBase文档被删除时,自动部署。


动态部署是指可以在服务器启动之后部署web应用程序,而不用重新启动服务器。

动态部署要用到服务器提供的manager.war文件,如果在$CATALINA_HOME\webapps\下没有该文件,你必须去重新下载tomcat,否则不能完成以下的功能。

要想使用该管理程序必须首先编辑  $CATALINA_HOME\conf\tomcat-users.xml  文件。


tomcat配置文件context加密

(出自:http://www.cnblogs.com/mabaishui/archive/2011/07/14/2106469.html)

近日客户要求对tomcat配置文件context的数据库用户名和密码加密。
解密程序已写好,只需在取得用户名密码的时候调用解密程序即可。
context配置如下:
<Context path="/web" docBase="E:\izumi_workspace\izumi\WebContent"  reloadable="false">
  <Resource
   name="jdbc/izumidb1"
   type="javax.sql.DataSource"
   factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
    password="67461e40361806c4"
    driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    maxIdle="10"
    maxWait="5000"
    username="67461e40361806c4"
    removeAbandoned="true"
    removeAbandonedTimeout="60"
   validationQuery="select count(*) from izumi_user" 
    logAbandoned="true"
    url="jdbc:microsoft:sqlserver://XX.XXX.XX.XXX:1433;DataBaseName=test2"
    maxActive="30"/>
  </Context> 

为何要修改tomcat代码? 

 程序中使用这种方式取得Resource中定义的数据库
Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 
DataSource ds = (DataSource) ctx.lookup("jdbc/izumidb1"); 
因为javax.sql.DataSource是一个接口,是tomcat实现了这个接口,所以解密过程需要修改tomcat的代码。

修改哪里? 
修改org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory的createDataSource()方法即可。

在apache.org找到 BasicDataSourceFactory的源码(最好是你当前使用的tomcat的版本的源码)
自建 org.apache.tomcat.dbcp.dbcp包,把BasicDataSourceFactory源码扔到包里,如果源码有import到其他类,把其他类也扔到包里,做解密修改。

修改完后放哪里? 

 在tomcat/common/lib中有关于dbcp的包,不同版本的tomcat可能包名不同。找到org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory所在的包,将编译好的我们的BasicDataSourceFactory类的.class文件放到包里,覆盖原来的BasicDataSourceFactory.class。
大功告成。


版权声明:记录一些工作、学习中的所得,欢迎拍砖,有什么不足之处欢迎大家指正,共同学习!

相关文章推荐

常见的中间件有哪些?

一般本地开发的话常使用tomcat。 linux系统常使用jetty或apache hpptd 大型的项目就用JBOSS或webloigc 小项目,或者是个人开发tomcat 大项目或者商业项目...
  • singit
  • singit
  • 2017年05月04日 00:27
  • 2885

Java中间件 - Tomcat 7 配置和部署

通过中间件, 各种编程语言之间, 甚至各种异构的系统之间都可以相互通信, 比如, php项目访问Java中间件的网址, 如http://127.0.0.1:8080/WebApp并获得返回值. 这种跨...

常见的中间件有哪些

一般本地开发的话建议使用tomcat。 linux系统建议使用jetty或apache hpptd 大型的项目就用JBOSS或webloigc 小项目,或者是个人开发tomcat 大项目或者...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

中间件学习——具体分类二步曲

上一篇文章我们介绍了中间件的由来、定义和作用,这篇文章我们继续中间件的学习,中间件的产品种类很多,根据中间件在系统中所起的作用和采用的技术不同,我们将中间件进行了分类,我们今天就详细学习下中间件具体知...

中间件学习——J2EE中间件四步曲

前面的几篇文章我们已经介绍了中间件的相关知识了,这篇我们文章我们了解下J2EE中间件。关于J2EE上一篇我们我们进行过初步的介绍,了解到J2EE它是一个规范与标准,这篇文章要介绍的内容有J2EE中间件...

Xianfeng轻量级Java中间件平台:用户管理

用户管理:

轻量级中间件MySQL Router介绍与性能测试

话说去年11月去参加OOW大会,听了一场关于MySQL Router的分享。因为我以为这货没这么快会GA,但是没想到的是在OOW大会前MySQL Router就同MySQL 5.7一起GA了。回来之后...

剖析轻量级消息中间件ActiveMQ

《笔者带你剖析轻量级消息中间件ActiveMQ》 前言 软件系统的发展,简单来说是从单机应用逐步演变为 分布式+集群 模式,当然这根互联网的兴起是密不可分的。笔者曾经面试过一些开发人员,当...

Xianfeng轻量级Java中间件平台:菜单管理

通过菜单管理,可以实现系统菜单的权限控制、用户个性化菜单等
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tomcat——轻量级中间件学习
举报原因:
原因补充:

(最多只允许输入30个字)