War包通常是在进行Web开发时,一般是一个网站Project下的全部源码的集合,里面包含前台HTML/CSS/JS的代码,也包含Java的代码。html
当开发人员在本身的开发机器上调试全部代码并经过后,为了交给测试人员测试和将来进行产品发布,都须要将开发人员的源码打包成War进行发布。java
War包能够放在Tomcat下的webapps或者word目录下,随着tomcat服务器的启动,它能够自动被解压。mysql
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是不少的场合下被广泛使用,是开发和调试JSP程序的首选,最新的Servlet和JSP规范老是能在Tomcat中获得体现。web
从官网上下载最新的JDK:http://java.sun.com/javase/downloads/index.jsp ,下载后安装,选择想把JDK安装到的目录。JRE是包含在JDK中的,因此不须要再另外安装JRE了。sql
右击“计算机”,点击“属性”,点击弹出窗口中左侧的“高级系统设置”,在弹出的选项卡中选择“高级->环境变量”。数据库
假设你本地JAVA的JDK安装的位置为:C:\Program Files\Java\jdk1.7.0_45。apache
在这里,新建2个环境变量,编辑1个已有的环境变量。以下:浏览器
新建变量名:JAVA_HOME;tomcat
变量值:你安装JDK的安装目录,在这里为C:\Program Files\Java\jdk1.7.0_45。服务器
新建变量名:CLASSPATH
变量值:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%TOMCAT_HOME%\BIN
(注意最前面有个.号)
编辑环境变量的路径:
变量名:Path;
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(将此处的字符串粘贴到变量值的最前面)
点击开始并输入CMD,在命令行分别输入:java; javac; java –version.
若是分别显示以下信息,说明你的Java环境变量已经配置成功。
输入Java,显示:
输入Javac,显示:
输入java –version,显示:
从官网上下载Tomcat服务器。官网上下载的文件都是绿色免安装的。
下载地址为:http://tomcat.apache.org/download-70.cgi。
下载后解压缩,如E:\apache-tomcat-7.0.26。
依然是点开电脑的环境变量对话框。
新建一个环境变量:
变量名:TOMCAT_HOME
变量值:你的TOMCAT解压后的目录,如E:\apache-tomcat-7.0.26。
运行Tomcat解压目录下的 bin/startup.bat,启动Tomcat服务器。在任何一款浏览器的地址栏中输入http://localhost:8080 ,若是界面显示以下图,则说明Tomcat的环境变量配置成功。
tomcat启动的窗口为:
从本地FTP服务器上下载Daily Building出的最新的项目包。解压后通常由两个文件组成,database文件夹和projectName.war包。
运行database文件中的xxxxx.sql脚本文件,即可以生成最新的数据库和表结构。
将projectName.war包,复制到Tomcat的webapp下。这样当配置好后的访问路径便为:http://localhost:8080/projectName/login.jsp。
在访问以前,须要修改tomcat服务器的配置文件,打开:
tomcat解压目录\conf\context.xml。将运行该web项目时,须要配置的数据库链接字符串增长到该xml文件中。增长后的context.xml为:
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
(这里填写本Web项目运行时,须要链接的数据库配置。)
</Context>
链接串设置完毕后,即可以基于Tomcat服务器来访问web项目了。
首先运行Tomcat的bin目录下的startup.bat,当Tomcat启动完毕后,
在浏览器输入:localhost:8080/projectName/login.jsp时,若是出现该Web项目的login界面时,则代表war包已成功地部署到tomcat服务器上,并可成功访问了。
(下面是Tomcat的具体配置方法)
数据库链接是一种关键的有限的昂贵的资源,这在多用户网页应用程序中体现的尤其突出.对数据库链接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标,数据库链接池正是针对这个问题提出的.
数据库链接池负责分配,管理和释放数据库链接,它容许应用程序重复使用一个现有的数据库链接,而不是再从新创建一个;释放空闲时间超过最大空闲时间的数据库链接来避免由于没有释放数据库链接而引发的数据库链接遗漏,这样能够明显提升对数据库操做的性能.
数据库链接池在初始化的时将建立必定数量的数据库链接放到链接池中,这些数据库链接的数量是由最小数据库链接数来设定的,不管这些数据库链接是否被使用,链接池都将一直保证至少拥有这么多的链接数,当应用程序向链接池请求的链接数超过最大链接数量时,这些请求将被加入到等待队列中.
数据库链接池的最小链接数和最大链接数的设置要考虑到下列几个因素:
1.最小链接数是链接池一直保持的数据库链接,因此若是应用程序对数据库链接的使用量不大,将会有大量的数据库链接资源被浪费.
2.最大链接数是链接池申请的最大链接数,若是数据库链接请求超过次数,后面的数据库链接请求将被加入到等待对列中,这会影响以后的数据库操做
若是最小链接数与最大链接数相差太大,那么最早的链接请求将会获利,以后超过最小链接数量的链接请求等价于创建一个新的数据库链接,不过,这些小于最小链接数的数据库链接在使用完不会立刻被释放,它将被放到链接池中等待重复使用或是空闲超时被释放.
实例使用的Tomcat版本为6.0
方法一: 在Tomcat的conf/context.xml中配置
在Tomcat\apache-tomcat-6.0.33\conf目录下的context.xml文件中配置默认值以下:
<?xml version='1.0' encoding='utf-8'?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> </Context>
配置链接池:
<?xml version='1.0' encoding='utf-8'?>
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!--配置oracle数据库的链接池--> <Resource name="jdbc/oracleds" author="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="scott" password="tiger" driverClassName="oracle.jdbc.dirver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" /> <!--配置mysql数据库的链接池, 须要作的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下 maxIdle 链接池中最多可空闲maxIdle个链接 minIdle 链接池中最少空闲maxIdle个链接 initialSize 初始化链接数目 maxWait 链接池中链接用完时,新的请求等待时间,毫秒 username 数据库用户名 password 数据库密码 --> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </Context>
配置好后须要注意的两个步骤
1.将对应数据库的驱动类放到tomcat的lib目录下
2.从新启动tomcat服务器,让配置生效
在web应用程序的web.xml中设置数据源参考,以下:
在<web-app></web-app>节点中加入下面内容
<resource-ref>
<description>mysql数据库链接池</description> <!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 --> <res-ref-name>jdbc/mysqlds</res-ref-name> <!-- 资源类型 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
错误解决:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) at javax.naming.InitialContext.lookup(InitialContext.java:392) at com.iblog.util.DBPoolUtil.<clinit>(DBPoolUtil.java:34)
解决方案:
上面的异常信息是配置文件中JNDI没有初始化形成的
若是下面的问题都不存在
1.要去检查下配置文件中链接数据库的URL参数是否正确2.以及是否导入了正常的包3.检查在Tomcat中conf/server.xml文件,检查是否设置useNaming="false",若是是,去掉
2.那就是经过main方法测试的,这个数据源不支持这样的测试方法,程序要运行在Tomcat中才能找到相应的数据源.[我在测试时犯这样的错致使上面错误出现]
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*" %> <%@ page import="javax.naming.*" %> <%@ page import="javax.sql.DataSource" %> <html> <head> <title>Tomcat6.0 JNDI!</title> </head> <body> Tomcat链接池测试,获取数据源 <br> <% try { //初始化查找命名空间 Context ctx = new InitialContext(); //参数java:/comp/env为固定路径 Context envContext = (Context)ctx.lookup("java:/comp/env"); //参数jdbc/mysqlds为数据源和JNDI绑定的名字 DataSource ds = (DataSource)envContext.lookup("jdbc/mysqlds"); Connection conn = ds.getConnection(); conn.close(); out.println("<span style='color:red;'>JNDI测试成功<span>"); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } %> </body> </html>
运行效果:
方法二:在Tomcat的conf/server.xml中配置
打开tomcat的conf/server.xml文件,找到<GlobalNamingResources></GlobalNamingResources>节点,默认的内容以下
<GlobalNamingResources>
<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" /> </GlobalNamingResources>
在该节点中加入相关的池配置信息,以下
<GlobalNamingResources>
<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" /> <!--配置mysql数据库的链接池, 须要作的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下 --> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </GlobalNamingResources>
在tomcat的conf/context.xml文件中的<Context></Context>节点中加入以下内容
<ResourceLink name="jdbc/mysqlds" global="jdbc/mysqlds" type="javax.sql.DataSource"/>
而后在web项目中的WEB-INF目录下的web.xml中配置
<resource-ref>
<description>mysql数据库链接池</description> <!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 --> <res-ref-name>jdbc/mysqlds</res-ref-name> <!-- 资源类型 --> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
一样配置好后,须要从新启动服务器,让配置生效.
方法三:在Tomcat的conf/server.xml中配置虚拟目录时配置
在配置虚拟目录时,也就是在配置conf下面的server.xml时,在context标签内添加池配置.
在说该方法以前,先说一下,如何用tomcat配置虚拟目录
在tomcat\conf下server.xml中找到
<Host name="localhost" appBase="webapPS" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
在其中添加:
<Context path="/website" docBase="F:/myweb" reloadable="true"></Context>
注意:
docBase要改为你的项目目录。
path为虚拟路径,访问时的路径,注意:必定要加“/” debug建议设置为0
reloadable设置为true。
这样从新启动tomcat
实例中以下配置
<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true"> </Context>
接下来添加池配置,以下
<!--配置虚拟目录-->
<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true"> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" /> </Context>
启动服务器,测试,注意由于咱们配置了path值为”/website”,因此访问的路径应该为website.以下图:
方法四:在Web项目中的META-INF目录下新建一个文件context.xml,写入配置
注意:是META-INF目录下,不是WEB-INF目录下
<?xml version='1.0' encoding='utf-8'?>
<Context> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" username="root" password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_blog" logAbandoned="true" /> </Context>