Tomcat jar加载相关

来源:互联网 发布:一步转移概率矩阵例题 编辑:程序博客网 时间:2024/06/05 23:48

1.在tomcat/common/lib下的jar文件,若更新或新增了,则只能重启服务器,才能重新加载jar包,使jar包生效。

2.如果application的WEB-INF/lib下的jar文件更新,则可以不重启tomcat便能使之生效,做法是修改application的Context,修改其reloadable属性为true,(如果没有该属性就添加),该属性默认是false。  

例如:

<Context path="/myweb" docBase="D:\workplace\myweb\WebRoot"
  debug="5" reloadable="true" crossContext="true"/>


当我们启动一个tomcat的服务的时候,jar包和claess文件是是以怎么样的顺序被加载进来的?

 

加载顺序:

1. $java_home/lib 目录下的java核心api 

2. $java_home/lib/ext 目录下的java扩展jar包

3. java -classpath/-Djava.class.path所指的目录下的类与jar包

4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载

5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载

6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

7. 我们的项目路径/WEB-INF/classes下的class文件

8. 我们的项目路径/WEB-INF/lib下的jar文件

 

在同一个文件夹下,jar包是按顺序从上到下依次加载

 

      由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。



1、在tomcat根目录下新建shared/lib目录结构,将项目的jar包放在此目录下,记得将项目下的jar包(一般在项目的WEB-INF\lib目录下)删除。

2013-8-6 20-07-38

2、修改tomcat的conf目录下的catalina.properties文件,主要修改两处

     1)shared.loader的值改为自己建立的共享jar包目录中所有的jar包,本例为:

shared.loader=D:/Program Files/Tomcat7/shared/lib/*.jar

     2)tomcat.util.scan.DefaultJarScanner.jarsToSkip的值全部注释掉,追加*.jar。本例为:

tomcat.util.scan.DefaultJarScanner.jarsToSkip=\          

*.jar

效果:修改后tomcat的启动速度加快。

           同时防止tomcat多次加载项目中重复的jar包,造成内存移除异常。

注:实际部署的时候发现,不需要修改“tomcat.util.scan.DefaultJarScanner.jarsToSkip”的值,修改后反而可能出错,具体原因未知。

       使用的时候具体情况具体分析


安装Tomcat之前要先安装JDK,可从http://java.sun.com上下载最新版本的JDK。Tomcat可从Apache Jakarta Project站点(http://jakarta.apache.org/site/binindex.cgi)上下载。本人使用的Tomcat版本是5.5.20,它需要安装J2SE 5.0(JDK 1.5)以上的版本才能运行。

第一步、安装jdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在c:/jdk1.5.0_09):
JAVA_HOME=c:/jdk1.5.0_09
classpath=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;(.;一定不能少,因为它代表当前路径)
path=%JAVA_HOME%/bin

接着可以写一个简单的java程序来测试J2SDK是否已安装成功:
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}
将上面的这段程序保存为文件名为Test.java的文件。
然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令  
javac Test.java
java Test  
此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。

第二步、安装tomcat
   下载apache-tomcat-5.5.20.exe 和 apache-tomcat-5.5.20-admin.zip 包,将下载的安装包,解压,并安装在C盘,填写设置的帐号和密码,默认可以设置 admin 123456.安装好后,我们就可以检验,tomcat5.5是否安装成功,打开开始菜单中的 Apache Tomcat 5.5-->Configure Tomcat 菜单.出现下面界面:我们点"start"启动tomcat5.5的服务,你也可以在服务里面,启动tomcat5.5.在浏览器中输入,http://127.0.0.1:8080,默认端口:8080,如果你安装改变了端口,你需要输入你设置的端口.如果出现下面的画面,说明你的Tomcat5.5已经成功安装.

Tomcat5.5 的admin安装包,需要我们独立下载,下载TOMCAT5.5 Admin.

解压该安装包 把目录apache-tomcat-5.5.20-admin下的apache-tomcat-5.5.20 中的 server,config两个目录和RELEASE-NOTES   NOTICE LICENSE 全部复制到 C:/Program Files/Apache Software Foundation/Tomcat 5.5 下,覆盖原文件.重新启动tomcat5.5服务,点左边的 Tomcat Administration 或在地址栏中输入:http://127.0.0.1:8080/admin/ 输入你在安装时候设置的 帐号 和密码 默认是:admin 123456,进入如下的界面.我们可以在admin中配制连接池。


安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c:/tomcat)://////先不设置会有什么影响??????????????? 
CATALINA_HOME:c:/tomcat
CATALINA_BASE:c:/tomcat
TOMCAT_HOME: C:/tomcat
然后修改环境变量中的classpath,把tomat安装目录下的common/lib下的servlet.jar追加到classpath中去,修改后的classpath如下: 
classpath=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;%CATALINA_HOME%/common/lib/servlet-api.jar; 

第三步:建立自己的jsp app目录 
1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录; 
2.在webapps目录下新建一个目录,起名叫myapp; 
3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的; 
4.WEB-INF下新建一个文件web.xml,内容如下: 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]--> <?xml version="1.0" encoding="ISO-8859-1"?> 

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

  <display-name>Webdav Content Management</display-name>
  <description>
     Webdav Content Management
  </description>
</web-app>


 
5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下: 
<html><body><center> 
Now time is: <%=new java.util.Date()%> 
</center></body></html> 
6.重启Tomcat 
7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。


第四步:建立自己的Servlet:HelloWorld.java: 
写入你的第一个Servlet
<!--[if !supportLineBreakNewLine]-->
<!--[endif]--> 
package com;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
  {
    public void doGet(HttpServletRequest request,HttpServletResponse response)th
rows ServletException,IOException
   {
      response.setContentType("text/html"); 
    PrintWriter out = response.getWriter();
      out.println("<html><head><title>");
      out.println("This is my first Servlet");
      out.println("</title></head><body>");
      out.println("<h1>Hello,World!</h1>");
      out.println("</body></html>");
   
   }
   }
 
将HelloWorld.java放在c:/com下,使用如下命令编译: 
C:/com>javac HelloWorld.java 
然后在c:/com下会产生一个编译后的servlet文件:HelloWorld.classes
 
如果出现无法import javax.servlet.*,那么就是应该把C:/Tomcat/common/lib里面的servlet.jar文件拷贝到C:/JDK/jre/lib/e
xt中,再次编译,就没有问题了!

   1、 在%CATALINA_HOME%/webapps/myapp/WEB-INF/下新建一个classes目录,然后新建com文件夹,将编译后的servlet文件:HelloWorld.class, 拷贝到com下,现在webapps/myapp/WEB-INF/classes/com下有HelloWorld.class的文件目录结构。
   2、修改webapps/myapp/WEB-INF/web.xml,添加servlet和servlet-mapping如下所示:
 
<servlet>
  <servlet-name>haiergk</servlet-name>
  <servlet-class>com.HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>haiergk</servlet-name>
  <url-pattern>/testservlet</url-pattern>
</servlet-mapping>
   3、在修改web.xml完毕过后,重新启动Server,然后再输入http://localhost:8080/servlet/testservlet,那么偌大一个Hello,World!等
着你呢


第五步:建立自己的Bean: 
1.用你最熟悉的编辑器(建议使用有语法检查的java ide)新建一个java程序,文件名为TestBean.java,文件内容如下: 
package com; 
public class TestBean{ 
private String name = null; 
public TestBean(String strName_p){ 
this.name=strName_p; 
}  
public void setName(String strName_p){ 
this.name=strName_p; 

public String getName(){ 
return this.name; 
}  

2 .编译 
将TestBean.java放在c:/com下,使用如下命令编译: 
C:/com>javac TestBean.java 
然后在c:/com下会产生一个编译后的bean文件:TestBean.class 
3 .将TestBean.class文件剪切到 %CATALINA_HOME%/webapps/myapp/WEB-INF/classes/com下, 
4 .新建一个TestBean.jsp文件,文件内容为: 
<%@ page import="com.TestBean" %>  
<html><body><center> 
<% 
TestBean testBean=new TestBean("This is a test java bean."); 
%> 
Java bean name is: <%=testBean.getName()%> 
</center></body></html>  
5 .好了,重启Tomcat,启动浏览器,输入http://localhost:8080/myapp/TestBean.jsp 如果看到输出Java bean name is: This is a test java bean.就说明编写的Bean成功了。


第六步、tomcat5.5配置MYSQL数据库连接池

  下载mysql-connector-java-5.0.4.zip,解压后把mysql-connector-java-5.0.4-bin.jar放置到tomat安装目录下的common/lib下,我在%CATALINA_HOME%/webapps/myapp/WEB-INF/lib下也拷贝了一份。
                                          

1)启动Tomcat服务器,打开浏览器,输入http://localhost:8080/admin/(其中localhost是名称服务器或称为主机),
进入管理界面的登陆页面,这时候请输入原来安装时要求输入的用户名和密码,登陆到管理界面,

2)选择Resources-Data sources进入配置数据源界面,选择
 Data Source Actions ->选择Create New Data Source,进入配置详细信息界面
主要内容例如下:
JJNDI Name:jdbc/mysql
Data Source URL:jdbc:mysql://localhost:3306/duanxinbao         
JDBC Driver Class:com.mysql.jdbc.Driver
User Name:root   //数据库用户名
Password:        //数据库密码
Max.Active Connections:4
Max.Idle Connections:2
Max.Wait for Connection:5000


3) 在%Catalina%/conf目录,打开server.xml
寻找以下内容:

<GlobalNamingResources>
    <Environment
      name="simpleValue"
      type="java.lang.Integer"
      value="30"/>
    <Resource
      auth="Container"
      description="User database that can be updated and saved"
      name="UserDatabase"
      type="org.apache.catalina.UserDatabase"
      pathname="conf/tomcat-users.xml"
      factory="org.apache.catalina.users.MemoryUserDatabaseFactory"/>

    <Resource
      name="jdbc/mysql"
      type="javax.sql.DataSource"
      password="987654"
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      username="root"
      url="jdbc:mysql://192.168.0.137:3306/duanxinbao"
      maxActive="4"/>

</GlobalNamingResources>

加黑部分为使用Tomcat Web Server Administration Tool程序自动产生的部分,将加黑部分剪切至
%Catalina%/webapps/你的项目所在目录/META-INF/context.xml??????????(http://hi.baidu.com/29163077/blog/item/bad60aee776c7e2c2df5349f.html)


修改/conf/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="" />
    -->
      <Resource
      name="jdbc/mysql"
      type="javax.sql.DataSource"
      password=""
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      username="root"
      url="jdbc:mysql://localhost:3306/duanxinbao"
      maxActive="4"/>
</Context>

4)修改web.xml

打开%TOMCAT_HOME%/conf/web.xml,在</web-app>的前面添加以下内容:   
    <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/mysql</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

    注意res-ref-name填写的内容要与在上文提到的JNDI Name名称一致。 
 到这里,配置工作就基本完成了!

5)引用JNDI时用"java:comp/env/jdbc/mysql";
有的时候直接应用JNDI名就可以,比如WEBLOGIC8。而TOMCAT就是这么做。

6)JDBC驱动程序mysql-connector-java-5.0.4-bin.jar
一定要放置到%TOMCAT_HOME%/common/lib下。
重启你的Tomcat服务。

7)写一个test.jsp:
<%@ page import = "java.sql.*" %>
<%@ page import = "javax.naming.*" %>
<%@ page import = "javax.sql.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>测试JNDI</title>
</head>
<body>
<% 
Context ctx=null;
DataSource ds=null;
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;

try{ 
ctx = new InitialContext();
if( ctx == null )
   out.println("no context");
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
if( ds == null )
   out.println("no datasource");
conn = ds.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
   ResultSet.CONCUR_READ_ONLY);
String strSql = " select * from t_user";
rs = stmt.executeQuery(strSql);
while(rs.next()){
   out.println(rs.getString("username")+"<br>");
}
}
catch(Exception ex){
ex.printStackTrace();
out.println(ex.toString());
}
finally{
if( rs != null )
   rs.close();
if( stmt != null )
   stmt.close();
if( conn != null)
   conn.close();
if( ctx != null )
   ctx.close();
}
%>

</body>
</html>

记得千万要用完close哦,不然一会就耗尽了。这一点可以通过以root身份登录MySQL,运行show processlist;命令来查看当前所有连接。

0 0
原创粉丝点击