SQnote
永远有多远……
SQnote - java,web优化,python,(www.sqnote.cn)
http://www.javazy.com/page/index.asp?sortid=471&id=1664
Tomcat 配置集锦
2005-08-29  点击:1327  来源:CSDN  作者:donnyfox
Tomcat 配置集锦

1.下载::URL::http://www.eu.apache.org/dist/jakarta/tomcat-5/
这里注意,在jakarta-tomcat-5.0.28.exe以前是有默认的admin模块,在jakarta-tomcat-5.5.9.exe则没有安装默认的admin模块,这时::URL::http://127.0.0.1:8080/admin打开时则会出现
Tomcat's administration web application is no longer installed by default. Download and install the "admin" package to use it. 
因此我们现在需要下载"admin"package 包
把jakarta-tomcat-5.5.x.zip  与   jakarta-tomcat-5.5.x-compat.zip  与  jakarta-tomcat-5.5.x-admin.zip
三个文件解压在同一个目录中
(如果使用jdk1.4,才需要compat.zip用jdk1.5就可以免了这个。) 




2.修改jakarta-tomcat-5.5.x\conf\tomcat-users.xml.
添加管理员账号lizongbo,密码为lizongbopass.
新xml如下:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="lizongbo" password="lizongbopass" roles="admin,manager"/>
</tomcat-users>


有时在%CATALINA_HOME%\server\webapps\admin\WEB-INF\web.xml里面也要做些修改


<!-- Security is active on entire directory -->
  <security-constraint>
    <display-name>Tomcat Server Configuration Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <!-- Define the context-relative URL(s) to be protected -->
      <url-pattern>*.jsp</url-pattern>
      <url-pattern>*.do</url-pattern>
      <url-pattern>*.html</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <!-- Anyone with one of the listed roles may access this area -->
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <!-- Login configuration uses form-based authentication -->
  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Tomcat Server Configuration Form-Based Authentication Area</realm-name>
    <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
  </login-config>

  <!-- Security roles referenced by this web application -->
  <security-role>
    <description>
      The role that is required to log in to the Administration Application
    </description>
    <role-name>admin</role-name>
  </security-role>
无论是 Authetication ( 身份验证  还是 Authorization ( 权限管控  都只有设置相关的 admin ROLE, 当你想要新增或修改相关的 AA, 就必须修改这一个文件, 来符合你的环境.
3.修改jakarta-tomcat-5.5.x\conf\server.xml来解决编码问题。
(给Connector 添加URIEncoding参数,参考::URL::http://blog.csdn.net/darkxie/archive/2004/10/25/TOMCATAPP.aspx)
(可以设置成GB18030)
    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="200"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"
               compression="on" compressionMinSize="2048" 
      noCompressionUserAgents="gozilla, traviata" 
      compressableMimeType="text/html,text/xml"/>
 
    <Connector port="8009" 
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="GBK"/>
 

4.启用支持gzip压缩.
(::URL::http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&i=81169)
添加下列属性
 compression="on" 
      compressionMinSize="2048" 
      noCompressionUserAgents="gozilla, traviata" 
      compressableMimeType="text/html,text/xml"
 
5.设置虚拟主机。
在jakarta-tomcat-5.5.x\下建立文件夹vhost\www.mydomain.com。
然后修改jakarta-tomcat-5.5.x\conf\server.xml
 
<Engine defaultHost="localhost" name="Catalina">
      <Host appBase="vhost/www.mydomain.com" name="::URL::http://www.mydomain.com/">
      </Host>
      <Host appBase="webapps" name="localhost">
      </Host>
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
    </Engine>
 
6.添加数据库驱动,更新mail.jar和actiovation.jar
复制mysql-connector-java-3.0.16-ga-bin.jar,pg74.215.jdbc3.jar到 jakarta-tomcat-5.5.x\common\lib\
还有javamail 1.3.2的mail.jar,jaf-1_0_2的 activation.jar
msSQl 2000 JDBC sp3,msbase.jar,msutil,jar,mssqlserver.jar
 
 
7.配置SSL
参考 ::URL::http://jakarta.apache.org/tomcat/tomcat-5.5-doc/ssl-howto.html
D:\j2sdk1.4.2_06\bin>%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA
输入keystore密码:  lizongbossl
您的名字与姓氏是什么?
  [tomcat5.5.x]:  tomcat5.5.x
您的组织单位名称是什么?
  [jakarta]:  jakarta
您的组织名称是什么?
  [apache]:  apache
您所在的城市或区域名称是什么?
  [hzcity]:  hzcity
您所在的州或省份名称是什么?
  [gdp]:  gdp
该单位的两字母国家代码是什么
  [CN]:  CN
CN=tomcat5.5.x, OU=jakarta, O=apache, L=hzcity, ST=gdp, C=CN 正确吗?
  [否]:  y
 
输入<tomcat>的主密码
        (如果和 keystore 密码相同,按回车):

(必须密码一致,因此直接回车)
然后再把userhome(例如:C:\Documents and Settings\lizongbo\)下的.keystore复制到
tomcat的conf\目录下。
 (例如:D:\jakarta-tomcat-5.5.x\conf\.keystore 
配置jakarta-tomcat-5.5.x\conf\server.xml
加上
    <Connector port="8443" 
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
           keystoreFile="conf/.keystore" 
           keystorePass="lizongbossl"> <!--与先前设置的密码一致-->
    </Connector>
8.禁止文件目录列表,
修改jakarta-tomcat-5.5.x\conf\web.xml,把listing设置为false
 
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
 9.指定了自己的javaEncoding
(参考 ::URL::http://gceclub.sun.com.cn/staticcontent/html/sunone/app7/app7-dg-webapp/ch6/ch6-4.html 

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
                <init-param>
            <param-name>javaEncoding</param-name>
            <param-value>GB18030</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
 10.添加rar,iso等的mime-type映射 
避免在浏览器里直接打开。
<mime-mapping>
<extension>mht</extension>
<mime-type>text/x-mht</mime-type>
</mime-mapping>
<mime-mapping>
        <extension>rar</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>iso</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>ape</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>rmvb</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>ico</extension>
        <mime-type>image/x-icon</mime-type>
    </mime-mapping>
10.1对html静态页面设置编码
<!--  修改下面两行以支持静态超文本的自动编码 
  --> 
 <mime-mapping>
  <extension>htm</extension> 
  <mime-type>text/html;charset=gb2312</mime-type> 
  </mime-mapping>
 <mime-mapping>
  <extension>html</extension> 
  <mime-type>text/html;charset=gb2312</mime-type> 
  </mime-mapping>
  </web-app>
 
11.添加welcome-file-list,并调整顺序。
 <welcome-file-list>    
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>


tyllr 发表于 >2005-5-24 7:37:34 保存该日志到本地 [全文] [评论] [引用] [推荐] [档案] [推给好友]

2005-5-22
完全掌握java中的"包"机制 [转]

"包"机制是java中特有的,也是java中最基础的知识。一些初学java的朋友,通常象学其它语言一样从教材上copy一些程序来运行,可是却常常遇到莫名其妙的错误提示。这些问题事实上都出在对"包"的原理不够清楚。本文将就此问题进行深入阐述。 

一、为什么java中要有"包"的概念? 

以一言概之,java中"包"的引入的主要原因是java本身跨平台特性的需求。因为java中的所有的资源也是以文件方式组织,这其中主要包含大量的类文件需要组织管理。java中同样采用了目录树形结构。虽然各种常见操作系统平台对文件的管理都是以目录树的形式的组织,但是它们对目录的分隔表达方式不同,为了区别于各种平台,java中采用了"."来分隔目录。 

二、java中包结构和平台的衔接 

java中的资源存在于不同平台下时必然会有很大差异。因此跨平台的java包结构和平台之间必须通过一种方式来衔接到一起。事实上它们就是通过我们很熟悉的classpath的设置来衔接到一起的。举个例子: 

我在Windows2000环境下的classpath设置如下: 

classpath = d:\jdk1.4.2\lib\dt.jar; d:\cjm

类的衔接关系可以用下图来表达: 




从图中可以看出,java中的类的组织是"悬空"的,这样的话,它们可以随意放在任意平台下,但是要在该平台下正确找到一个类,则必须使用classpath来设置类所在目录的前面一部分(即区别于平台的部分)。在java中常常把一棵类树压缩成一个.jar文件,如图中的rt.jar,这并不影响对类的查找,在指定环境变量时可以指定.jar文件所在目录,也可以具体指明.jar的完全查找路径,即上例中的classpath中也可描述成:

classpath = d:\jdk1.4.2\lib; d:\cjm

当正确设置了平台下的classpath环境变量时,java跨平台的特性就体现出来了。即你在编写程序中,描述一个类时,就不用具体指明它的完整路径,而是仅仅指明java中的类路径就可以了,即指出图1中竖线右边的查找路径就可以了。这样的话,你编写的程序拿到任何平台下时,只需要根据类文件的存放目录来书写相应的classpath环境变量,而不用因为类的存放环境变化而修改程序。

注意:java中对于某个类的查找是把classpath中的每一项逐一连接,当一个连接能够正确找到相关类后,便不再向后查找。

三、正确使用"包" 

在使用包的过程中有很多需要注意的小细节,这里把常见的问题都列举如下: 

1、对类路径的设置通常有两种方法: 

i)在系统的环境变量中设置,设置方法依据平台而变; 

ii)以命令参数的形式来设置。 

如:javac -classpath d:\jdk1.4.2\lib d:\cjm\edu\test\TestFile.java
java -classpath .;d:\jdk1.4.2\lib; d:\cjm  edu.test.TestFile

注意:i)javac和java命令有很大区别,可以这样区分,javac是一个平台命令,它对具体的平台文件进行操作,要指明被编译的文件路径。而java是一个虚拟机命令,它对类操作,即对类的描述要用点分的描述形式,并且不能加扩展名,还要注意类名的大小写。 

ii)有一个很奇怪的问题,即javac命令后面的classpath默认包含当前目录(符合windows的习惯),可是在java命令后面的classpath却不包含当前目录,所以在它的classpath中一定不能忘了加上当前目录的描述,即加上"."。 

2、在java程序中对类路径的描述用"."分隔,而且也有当前目录的概念。如要运行图1中的TestFile必须指明为 edu.test.TestFile。但是如果在类TestFile中要调用和它在同一目录中的TestString,则不必指明目录前缀。 

3、在java程序中所有使用到的类都应该清楚的指明这个类的查找路径。一般有两种方法指明: 

i)在程序的开始使用import关键字指明。如类TestFile中要用到FileInputStream类,则在程序头中加入import java.io.FileReader; 或import java.io.*; 

ii)在程序中用到FileFileReader类处直接写完整路径,如: java.io.FileFileReader fin = new java.io.FileReader(“filename”); 

注意:java.lang包总是被默认导入的。 

4、类的目录结构一定要和类中第一句"包声明"一致。如类TestFile.class对应的.java文件的第一句必须包含:package edu.test; 

确保类的存放路径和类中指明的"包路径"一致的方法一般有两种: 

i)编写.java文件时存放的目录事先确定好,如TestFile.java就直接放在edu\test目录下,然后用下面的语句编译: 

javac  -classpath d:\jdk1.4.2\lib d:\cjm\edu\test\TestFile.java 
当编译完成后,产生的TestFile.class文件会出现在编译命令中java文件的描述路径中。即出现在d:\test\edu\test中 

ii)通过-d参数的使用来编译程序。如使用下面的语句来编译: 

javac  -d  d:\cjm  d:\temp\TestFile.java
将在-d后指定的目录d:\cjm下面自动按照packagek中指定的目录结构来创建目录,并且将产生的.class文件放在这个新建的目录下,即在d:\cjm下面建立\edu\test目录,然后产生的TestFile.class放在d:\cjm\edu\test目录下。 

5、为了便于工程发布,可以将自己的类树打成.jar文件。如将图1中的edu下面的所有类文件打成一个.jar文件,可以先转到d:\cjm目录,再用下面的命令:

  jar -cvf test.jar edu\
这时会在d:\test下产生一个test.jar文件,此.jar文件中包含edu\下的完整目录结构和文件。使用这个.jar文件时,只需在classpath中指明.jar文件的存放路径即可。 

6、对其它资源的使用,如图标文件,文本等资源文件的使用必须要注意,查找资源文件不应从类文件所在的目录开始,而是应该从package指定的类路径的起点开始(图1中从edu所在目录开始)。如图1中看到的文本文件word.txt在resource下面,而类文件TestFile.class在edu\test下,在TestFile.class中要使用到resource中的word.txt,要按如下操作:

fin= new FileReader(“resource/word.txt”);
而不应该是:fin= new FileReader(“../../resource/word.txt”);

四、举例 

本例用于统计一个文本文件中的单词数,注释中的编号对应前一节的编号: 

// TestFile.java
package edu.test; // --------------------------------------- 4
import java.io.FileReader; // ------------------------------ 3
import java.io.LineNumberReader;
class TestFile{
    public static void main(String []argv){
        TestString ts = new TestString(); // ---------------- 2
        FileReader fin;
        LineNumberReader line = null;
        int wordNum = 0;
        try{
            fin= new FileReader(“resource/word.txt”); // ---- 6
            line = new LineNumberReader(fin);   
        }catch(Exception e){
            e.printStackTrace();
            System.exit(0);
        }
        while(true){
            try{
                String temp = line.readLine();
                wordNum += ts.CountWord(temp);
            }catch(Exception e){
                break;
            }
        }
        try{
            line.close();
        }catch(Exception e){};
        System.out.println("Word count is:" + wordNum);
    }
}


// TestString.java
package edu.test;
import java.util.*;
class TestString {
    int CountWord(String str){
        StringTokenizer token = new StringTokenizer(str);
        return token.countTokens();
    }
}

两个.java文件存放在d:\temp目录下,当前目录为d:\temp使用下面的命令进行编译: 

d:\temp>javac  -classpath d:\jdk1.4.2\lib  -d d:\test  *.java

用下面的命令运行: 

// --------------------------------- 1
d:\temp> java -classpath .;d:\jdk1.4.2\lib; d:\test\com  edu.test.TestFile

如果需要打包的话,先转到d:\test,然后用下面命令: 

// --------------------------------- 5
jar -cvf test.jar edu\

这时可产生一个test.jar文件,可将此文件置于任何平台下使用。
posted on 2006-02-22 09:34  SQnote·www.SQnote.cn  阅读(403)  评论(0)    收藏  举报