一:基本配置文件
1:基本目录结构
bin--tomcat批处理文件的存放目录 通过bin/startup.bat启动tomcat , bin/shutdown.bat关闭tomcat
conf--tomcat配置文件所在的目录, 其中server.xml是tomcat的核心配置文件,端口号(通过命令好看端口号 netstat -ano)
lib--tomcat运行时所依赖的jar包存放的目录.
logs--tomcat日志文件所在的目录
temp--tomcat运行时产生的临时文件存放的目录
webapps--是localhost虚拟主机管理的目录, 放在这个目录下的web应用可以通过浏览器访问localhost主机来访问
work--tomcat运行时产生的工作文件存放目录. 是tomcat的工作目录
二:项目部署
1:最简单直接的方式,将项目war包直接放在webapps下,启动Tomcat,会自动解压war包,此种方式其实就是默认的虚拟主机的管理目录是webapps
2:在tomcat/conf/server.xml文件中<Engine>标签下<Host>标签内部添加一个<Context path="web应用的虚拟路径" docBase="web应用的真实路径"/>,这种配置方式每次都要重启服务器, 只要将path的值设置为空, 当前web应用就是缺省的web应用.
3:虚拟主机在配置的时候可以指定一个默认管理的目录, 只需要将web应用放在这个默认管理的目录中既可 ,这种配置方式不需要重启服务器就可以起作用,如果虚拟路径想用多级路径表示, 可以在文件名中用#代替/,只要将web应用的文件夹的名称设置为ROOT, 当前web应用就是缺省的web应用 **可以通过修改web.xml为当前web应用配置主页!
三:配置虚拟主机
所谓的虚拟主机就是tomcat服务器中配置的一个站点,在访问时就好像访问一台真实的主机一样
tomcat服务器中可以配置多个站点, 一个站点就是一台虚拟主机
在[tomcat]/conf/server.xml文件中<Engine>标签内添加一个<Host>就可以配置一台虚拟主机.<Host name="虚拟主机的名字" appBase="虚拟主机的管理目录"> 其中name属性是必须存在的, appBase属性可以没有, 如果没有表示该虚拟主机不管理任何目录.
配置后还需要到DNS服务器里做域名和IP地址的映射, 但DNS一般不能随便改动, 可以通过hosts文件来模拟DNS的功能, 完成实验(C:\Windows\System32\drivers\etc\hosts)[域名,地址]
配置缺省虚拟主机:在server.xml中 配置缺省的虚拟主机。 在<Engine>标签上的defaultHost属性可以指定缺省虚拟主机. 当用户通过IP地址来访问无法确定访问哪个虚拟主机时, 将会访问缺省的虚拟主机.
四:配置数据源
1:单个应用独享数据源 优点:简单 缺点:重用性差
1)用第二种部署项目的时候,找到Tomcat的server.xml找到工程的Context节点,添加一个私有数据源
<Context docBase="F:\Workspaces\IdeaProjects\payment\target\payment" path="/payment" reloadable="true" source="org.eclipse.jst.j2ee.server:payment">
<Resource name="jdbc/mysql" scope="Shareable" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" url="jdbc:mysql://localhost:3306/test" driverClassName ="com.mysql.jdbc.Driver" username="root" password="root" />
</Context>
2:配置全局JNDI数据源,应用到单个应用 优点:重用性,可控性 缺点:配置相对繁琐一点,每个工程都得配
1)找到Tomcat的server.xml中GlobalNamingResources节点,在节点下加一个全局数据源
<GlobalNamingResources>
<!--Tomcat中默认配置的--> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> <Resource name="jdbc/mysql" scope="Shareable" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" url="jdbc:mysql://localhost:3306/test" driverClassName ="com.mysql.jdbc.Driver" username="root" password="root" /> </GlobalNamingResources>
2)找到部署工程的 context节点,引入全局数据源
<Context"F:\Workspaces\IdeaProjects\payment\target\payment" path="/payment">
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" />
</Context>
3:配置全局JNDI数据源,应用到所有Tomcat下部署的应用 优点:重用性,一次性到位 缺点:没有可控性
1)同方法二的第一步,
2)找到Tomcat的context.xml,在Context节点下加一个ResourceLink节点对第一步配置的数据源进行引用
1 <Context> 2 <ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource" /> 3 <WatchedResource>WEB-INF/web.xml</WatchedResource> 4 <Context>
注意:
如果现在假设是oracle 数据库的话,则直接换启动程序即可
但是如果使用的tomcat 版本是6.0 ,想让一个数据源起作用的话,还必须在web.xml 文件之中完成配置
<resource-ref> <res-ref-name>jdbc/mydata</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
查找数据源
数据源的操作使用的是JNDI 方式进行查找的,所以如果要想使用数据源取得数据库连接的话,则必须按照如下的步骤进行
初始化名称查找上下文: Context ctx = new IntialContext();
通过名称查找DataSource 对象: DataSource ds = (DataSource)ctx.lookup(JNDI名称)
通过DataSource 取得一个数据库连接; Connection conn = ds.getConnection();
<HTML> <HEAD> <TITLE> New Document </TITLE> <BODY> <% String DSNAME = "jdbc/mydata"; //名称 Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup(DSNAME); Connection conn = ds.getConnection(); //从连接池中取连接 %> <%=conn%> <% conn.close(); //表示将连接放回到池子中 %> </BODY> </HTML>
对于这种资源的操作,本身是需要一个环境属性的支持的: java:comp/env, 但是Tomcat 服务器本身是免费,那么没有对这种属性提供支持,所以如果要想访问Tomcat中的名称服务的话,则要在前面加上此属性,即,现在的名称是:java:comp/env/jdbc/mydata
以后程序中只认名字,而具体是哪个数据将由配置决定
//数据源的连接类
public class DatabaseConnection { private static final String DSNAME = "java:comp/env/jdbc/mydat"; private Connection conn; public DatabaseConnection() throws Exception{ Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup(DSNAME); this.conn = ds.getConnection(); } public Connection getConnection() { return this.conn; } public void close () throws Exception { if(this.conn != null) { try { this.conn.close(); } catch (Exception e) { throw e; } } }
得到数据库连接池是在Tomcat 上配置的,所以此程序在WEB下运行,而不能使用Application 程序运行