博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Tomcat总结

Posted on 2009-01-27 01:11  Zhiyett  阅读(1655)  评论(0编辑  收藏  举报

1.介绍

下载地址:

http://tomcat.apache.org/

http://jakarta.apache.org/site/downloads/index.html

2.安装

2.1 环境配置

JAVA_HOME    C:\Program Files\Java\jdk1.6.0_05

JAVA_BIN    C:\Program Files\Java\jdk1.6.0_05\bin

TOMCAT_HOME    D:\programming\java\apache-tomcat-6.0.18

CLASSPATH    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

JAVA_OPTS    -Xms64m -Xmx512m

PATH后加    ;%JAVA_HOME%\bin;%TOMCAT_HOME%\bin

 

ANT_HOME= D:\programming\java\apache-ant-1.7.1

PATH=%PATH%;%ANT_HOME%\bin

2.2 测试java环境

在命令行中输入:

java –version查看版本

javac –help查看path路径是否设置完

2.3 源代码安装Tomcat(不推荐)

下载ANT,地址http://ant.apache.org/

下载tomcat源码,地址http://tomcat.apache.org/ apache-tomcat-6.0.18-src.zip,解压后将里面的build.properties.default改成build.properties

2.4 二进制安装

直接解压到某一文件夹下即可,但要更改TOMCAT_HOME变量

直接启动startup.bat即可

2.5 配置

2.5.1 安装名为Tomcat6的Tomcat服务:service install

删除tomcat服务service remove

安装名为MyTomcat的服务:service install MyTomcat

删除名为MyTomcat的服务:service remove MyTomcat

2.5.2 <Context>元素

<Context path="/qqq" reloadable="true" docBase="E:\qqq" workDir="E:\qqq\work" />

path代表网络访问的上下文路径,reloadable表示可以在运行时在classes与lib文件夹下自动加载类包,在开发阶段一般为true有助于调试类源文件,但该参数所产生的操作会增加服务器的运行负荷,所以在部署阶段一般都设置成false,docBase表示应用程序的路径,workDir表示缓存文件的放置地点

  1. conf/tomcat-users.xml中添加

<role rolename="manager"/>

<user username="qq" password="qq" roles="manager"/>

2.6 测试运行

新建一页面hello.jsp

<%@ page contentType="text/html;charset=gb2312" %>

<HTML>

<HEAD>

    <title>hello</title>

</HEAD>

 

<BODY>

    <%="<h1>Hello!<br>你好!</h1>"%>

</BODY>

</HTML>

3 tomcat的安全管理

提供Realm支持,即将不同的应用赋给不同的用户,没有权限的用户则不能访问这个应用。Tomcat提供三种Realm:

JDBCRealm:用户信息存在数据库里,通过JDBC获得用户信息。

JNDIRealm:用户信息存在LDAP的服务器里,通过JNDI获取用户信息。

MemoryRealm:用户信息存在一个xml里,通过xml进行验证。

4 tomcatapache的集成

tomcat处理静态HTML不如apache,所以用apache处理静态HTML,用tomcat处理JSP、Servlet。

5 Tomcat工作原理-Servlet容器

Servlet容器的作用就是负责处理客户请求。客户请求到来时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。

-ServletRequest ――>

客户端

        -ServletResponse――>

  • 独立的Servlet容器-基于java的web服务器
  • 进程内的Servlet容器-作为进程内的Servlet容器,Servlet容器作为web服务器的插件和java容器(JVM)的实现。
  • 进程外的Servlet容器-作为进程外的Servlet容器,Servlet容器运行于Web服务器之外的地址空间,并且作为Web服务器的插件和java容器(JVM)的实现。插件和JVM使用IPC机制进行通信。

6 Tomcat组织结构-Server.xml

Tomcat是一个基于组件的服务器,最外层的组件是Catalina Servlet容器,其他的组件按照一定的格式配置在这个顶层容器中。其配置在conf/server.xml文件中:

<Server> 一个xml文件只能有一个Server,代表一个服务器

    <Service> 有一个Engine组件和多个Connector

<Connector/> 通信接口,通过此接口接收客户的请求,然后发送给其他组件,最后把服务器的响应传递给客户

<Connector/>

........

<Connector/>

        <Engine>处理用户请求并生成响应,可以有多个Host

            <Host>虚拟主机,可以有多个Context

                <Context />web应用

            </Host>

        </Engine>

    </Service>

</Server>

7 Tomcat web应用

一个java web应用包含Servlet、JSP页面、java类、静态资源(HTML文档、图片等)、描述Web应用的描述文件。

 

图 多个Web应用时Tomcat服务的过程

如果不加任何修改,在一台服务器上同时运行两个Tomcat服务显然会发生端口冲突。假设现在已经按照正常的方式安装配置好了第一个Tomcat,第二个如何设置呢?以下是使用Tomcat6.0.16解压版本所做的实验。

解决办法:

1.解压Tomcat到一个新的目录,比如d:\TomcatServer2;
2.新建一个环境变量CATALINA_HOME2,路径为d:\TomcatServer2;
3.编辑Tomcat/bin/startup.bat和catalina.bat,把CATALINA_HOME全部替换成CATALINA_HOME2;
4.编辑Tomcat/conf/server.xml,将端口号8开头都改为9开头(其他端口只要不冲突即可),并修改默认编码为utf-8(以支持中文链接)
    示例:
            <Connector port="9080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="9443" URIEncoding='UTF-8'/>
    =====================        
            <Connector port="9009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="9443" URIEncoding='UTF-8'/>

5.运行测试。

8 war文件格式

ROOT

|――/ html文件、jsp文件、图片、样式表等

|____WEB-INF该目录下的所有文件都是不可访问的

|――classes

|――lib

|____web.xml

 

为了部署方便,src存放java源代码,js存放脚本文件,images存放图片文件,css存放样式表文件,web存放JSP和HTML文件

WEB-INF下的各种资源文件分开存放,properties存放属性文件等。

9 web.xml

9.1 web应用图标

<icon>

    <small-icon>/images/app small.gif</small-icon>

    <large-icon>/images/app large.gif</large-icon>

</icon>

9.2 web应用名称

<display-name>Tomcat Manager Application</display-name>

9.3 web应用描述

<description>

A scriptable management web application for the Tomcat Web Server;

Manager lets you view, load/unload/etc particular web applications.

</description>

分布式属性:Tomcat集群参数

<distributable/>

9.4 指定欢迎文件页

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

9.5 网上摘录部分

web.xml首先是肯定要包含它的schema.

<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/web-app_2_4.xsd"
    version="2.4">

</web-app>

其它的元素都放在<web-app></web-app>之中。

<discription></discription> 是对站台的描述
<display-name></display-name> 定义站台的名称
<distributable/> 是指定该站台是否可分布式处理

<context-param></context-param> 用来设定web站台的环境参数,它包含两个子元素:
    <param-name></param-name> 用来指定参数的名称
    <param-value></param-value> 用来设定参数值

比如:
<context-param>
    <param-name>my_param</param-name>
    <param-value>hello</param-value>
</context-param>

在此设定的参数,可以在servlet中用 getServletContext().getInitParameter("my_param") 来取得

<filter></filter> 是用来声明filter的相关设定,它包含以下子元素:
    <filter-name></filter-name> 这当然就是指定filter的名字
    <filter-class></filter-class> 这是用来定义filter的类的名称
    <init-param></init-param> 用来定义参数,它有两个子元素:
        <param-name></param-name> 用来指定参数的名称
        <param-value></param-value> 用来设定参数值
比如:
<filter>
        <filter-name>setCharacterEncoding</filter-name>
        <filter-class>com.myTest.setCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GB2312</param-value>
        </init-param>
</filter>

<filter></filter>同时使用的是<filter-mapping></filter-mapping> 用来定义filter所对应的URL,它有两个子元素:
    <filter-name></filter-name> 指定filter的名字
    <url-pattern></url-pattern> 指定filter所对应的URL

比如:
<filter-mapping>
        <filter-name>setCharacterEncoding</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>


<listener></listener> 用来设定Listener接口,它的主要子元素为
    <listener-class></listener-class> 定义Listener的类名称

比如:
<listener>
    <listener-class>com.myTest.ContextListener</listener-class>
</listener>


<servlet></servlet> 用来声明一个servlet的数据,主要有以下子元素:
    <servlet-name></servlet-name>
指定servlet的名称
    <servlet-class></servlet-class> 指定servlet的类名称
    <jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径
    <init-param></init-param> 用来定义参数,和前面的<init-param>差不多

同样,与<servlet></servlet>一起使用的是<servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素:
    <servlet-name></servlet-name>
指定servlet的名称
    <url-pattern></url-pattern> 指定servlet所对应的URL

比如:
<servlet>
        <servlet-name>ShoppingServlet</servlet-name>
        <servlet-class>com.myTest.ShoppingServlet</servlet-class>
</servlet>
   
<servlet-mapping>
        <servlet-name>ShoppingServlet</servlet-name>
        <url-pattern>/shop/ShoppingServlet</url-pattern>
</servlet-mapping>


<session-config></session-config> 用来定义web站台中的session参数,包含一个子元素:
    <session-timeout></session-timeout> 用来定义这个web站台所有session的有效期限,单位为                                                              分钟


<mime-mapping></mime-mapping> 定义某一个扩展名和某一个MIME Type做对映,包含两个子元素:
    <extension></extension> 扩展名的名称
    <mime-type></mime-type> MIME格式


比如:
<mime-mapping>
    <extension>doc</extension>
    <mime-type>application/vnd.ms-word</mime-type>
</mime-mapping>
<mime-mapping>
    <extension>xls</extension>
    <mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>


<welcome-file-list></welcom-file-list> 用来定义首页的列单,包含一个子元素:
    <welcome-file></welcome-file> 指定首页的文件名称


比如:
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
</welcom-file-list>


<error-page></error-page> 用来处理错误代码或异常的页面,有三个子元素:
    <error-code></error-code> 指定错误代码
    <exception-type></exception-type> 指定一个JAVA异常类型
    <location></location> 指定在web站台内的相关资源路径


比如:

<error-page>

<error-code>404</error-code>

 <location>/error404.jsp</location>

</error-page>

<error-page>

 <exception-type>java.lang.Exception</exception-type>

  <location>/exception.jsp</location>

</error-page>

 

<taglib></taglib> 用来设定JSP网页所用到的Tag Library路径,有两个子元素:
    <taglib-uri></taglib-uri> 定义TLD文件的URI,在JSP网页中用taglib指令便可取得该URI的                                              TLD文件
    <taglib-location></taglib-location> 指定TLD文件相对于web站台的存放位置

比如:

<taglib>

      <taglib-uri>myTaglib</taglib-uri>

      <taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>

</taglib>

此时JSP页面可通过下面的形式使用标签库

<%@ taglib uri="/struts-html" prefix="html" %>

<html:text name="name" value="tomcat" />


<resource-ref></resource-ref> 定义利用JNDI取得站台可利用的资源,有五个子元素:
    <description></description> 资源说明
    <rec-ref-name></rec-ref-name> 资源名称
    <res-type></res-type> 资源种类
    <res-auth></res-auth> 资源经由Application或Container来许可
    <res-sharing-scope></res-sharing-scope> 资源是否可以共享,有Shareable和Unshareable两个                                                                     值,默认为Shareable

比如,配置数据库连接池就可在此配置:
<resource-ref>
        <description>JNDI JDBC DataSource of shop</description>
        <res-ref-name>jdbc/sample_db</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
</resource-ref>

10 中文编码

  • <meta http-equiv="content-type" context="text/html;charset=gb2312">
  • <%@page language="java" contentType="text/html;charset=gb2312"%>
  • response.setCharacterEncoding("gb2312")
  • str=new String(username.getBytes("ISO-8859-1"),"gb2312")