1 Tomcat的简介
1.1 Tomcat与Servlet容器,Tomcat结构
知识点:
1. Tomcat服务器是一种Servlet/JSP容器。
2. Tomcat服务器由一系列可以配置的组件构成,在XML文件里,代表组件的元素可以分为四类:顶层类元素、连接类元素、容器类元素、嵌套类元素。每种元素的结构和功能需要清楚。
3. 有三种容器类元素:Engine、Host和Context,它们的面向的对象不同;
4. 最基本的Tomcat元素:Server、Service、Connector、Engine、Host、Context,如图所示各个元素的功能和关系。
1.2 Java Web应用简介
1. Java Web服务是由一组Servlet、HTML页面、类以及其它可以被绑定的资源构成。它可以在 各种供应商提供的实现Servlet规范的Web应用容器中运行。
2. Java Web应用的重要特征就是它与Context的关系,每个Web应用拥有唯一的Context,就是说每个Context容器只对应一个Web应用。
1.3 Tomcat工作模式
1. Tomcat作为Servlet容器有几种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。
2. JNI:JAVA本地调用接口(Java Native Interface),其作用是什么。
3. IPC是两个进程之间进行通讯的一种机制。
1.4 Tomcat安装及部署及运行脚本
1. 更改端口号的方法
2 创建和发布Web应用
2.1 Tomcat的目录结构
1. Tomcat的目录结构见下表,它是研究Tomcat的基础
目 录 | 描 述 |
/bin | 存放windows或Linux平台上启动和关闭Tomcat的脚本文件 |
/conf | 存放Tomcat服务器的各种配置文件,其中最重要的是server.xml |
/server | 包含三个子目录:classes、lib和webapps |
/server/lib | 存放Tomcat服务器所需的各种JAR文件 |
/server/webapps | 存放Tomcat自带的两个WEB应用:admin应用和 manager应用 |
/common/lib | 存放Tomcat服务器以及所有web应用都可以访问的jar文件 |
/shared/lib | 存放所有web应用都可以访问的jar文件(但是不能被Tomcat服务器访问) |
/logs | 存放Tomcat的日志文件 |
/webapps | 当发布Web应用时,默认情况下把Web应用文件放于此目录 |
/work | Tomcat把又JSP生成的Servlet放于此目录下 |
假设在<CATALINA_HOME>/webapps下有helloapp的web应用,如下: | |
/helloapp | Web应用的根目录,所有的jsp文件和html文件都在此目录下 |
/helloapp/WEB_INF | 存放web发布时的描述文件web.xml |
/helloapp/WEB_INF/class | 存放各种class文件,Servlet文件也存放于此目录下。 |
/helloapp/WEB_INF/lib | 存放各钟Web应用所需要的jar文件。比如可以存放JDBC驱动程序的JAR文件 |
Host元素的属性 | |
name | 指定虚拟主机名字 |
debug | 指定日志级别 |
appBase | 指定虚拟主机目录可以是绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录。如果此项没有设定则默认的是<CATALINA_HOME>/webapps 。 |
unpackWARs | 如果此项设置为true,表示将把Web应用的WAR文件先展开为开放目录结构后再运行。如果为false, 则直接运行WAR文件 |
autoDeploy | 如果此项设置为true,表示当Tomcat服务器启动时会自动发布appBase目录下所有的Web应用将把Web应用。如有新的Web加入进来,则会自动发布这个Web应用。 |
alias | 指定虚拟主机的别名,可以指定多个别名。 |
deployOnStarup | 如果此项设为true,则表示Tomcat服务器启动时会自动发布appBase目录下的所有Web应用。如果Web应用在server.xml中没有相应的<context>元素,则将采用默认的Context配置。deployOnStarup的默认设置是true |
Context元素属性 | |
path | 指定Web应用的URL入口 |
docBase | 指定Web应用的文件路径,可以给定绝对路径,也可以是相对于Host的appBase属性的相对路径(参见上面Host的appBase属性)。如果Web应用采用开放目录结构,则指定Web应用的e根目录;如果Web应用是个WAR文件,则指定WAR文件的路径。 |
reloadable | 如果为true,Tomcat服务器在运行状态下会监视在WEB-INF/class和WEB-INF/lib下class文件的改动。如果检测到有class文件更新,服务器会自动载入Web应用。 |
<servlet>元素的属性 | |
<servlet-name> | 定义Servlet的名字。 |
<servlet-class> | 指定实现这个Servlet的类。 |
<init-param> | 定义Servlet的初始化参数(包括参数名和参数值),一个 <servlet>元素中可以有多个<init-param>元素。 |
<load-on-startup> | 指定当Web应用启动时,装载Servlet的次序。当这个值为正数或零,Servlet容器先加载数值小的Servlet,再一次加载其他数值大的Servlet。如果这个值为负数或没有设定,Servlet将在Web客户首次访问这个Servlet时加载它。 |
2. 抓的一个新的Tomcat的实例目录,需要研究其组织结构及个文件和文件夹功能。
书籍:王帅《Tomcat的配置》
Wednesday, June 06, 2007========
3 Web.xml文件的配置
3.1 欢迎文件的配置
<welcome-file-list>
<welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
3.2 报错文件的设置
<error-page>
<error-code>404</error-code>
<location>/notFileFound.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type> <location>/null.jsp</location>
</error-page>
3.3 会话超时的设置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
时间单位为分钟。
3.4 过滤器的设置
<filter>
<filter-name>FilterSource</filter-name>
<filter-class>project4. FilterSource </filter-class>
</filter>
<filter-mapping>
<filter-name>FilterSource</filter-name>
<url-pattern>/WwwServlet</url-pattern>
<url-pattern>/haha/*</url-pattern>
过滤:
1. 身份验证的过滤Authentication Filters;
2. 日志和审核的过滤Logging and Auditing Filters;
3. 图片转化的过滤Image conversion Filters;
4. 数据压缩的过滤Data compression Filters;
5. 加密过滤Encryption Filters;
6. Tokenizing Filters;
7. 资源访问事件触发的过滤Filters that trigger resource access events;
8. XSL/T 过滤 XSL/T filters;
9. 内容类型的过滤 Mime-type chain Filter 注意监听器的顺序,如:先安全过滤,然后资源,然后内容类型等,这个顺序可以自己定,但最好要合理。
3.5 监听器的设置
<listener>
<listener-class>project4.SALListenerServlet</listener-class>
</listener>
监听器分四种,分别是:
1. ServletContextListener:对上下文(全局)对象的创建和销毁进行监听;
2. ServletContextAttributeListener:对上下文对象某一属性的增加、替换、删除进行监听;
3. HttpSessionListener:对Session的创建和销毁进行监听;
4. HttpSessionAttributeListener:对Session某一属性的增加、替换、删除进行监听。
3.6 Servlet设置
<servlet>
<servlet-name>HelloServlet</servlet-name> <servlet-class>project4.HelloServlet</servlet-class>
<init-param>
<param-name>age</param-name>
<param-value>26</param-value>
</init-param>
<init-param>
<param-name>ip</param-name>
<param-value>192.168.5.65</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
1. <servlet>内的<servlet-name> 是一个逻辑名,可以是任何有效的标识名,可以将上述配置中的两个<servlet-name>HelloServlet</servlet-name>同时改成<servlet-name>qq</servlet-name>,得到的效果相同,注意要"同时改",这样可以继续保持对应的关系;
2. <init-param>是Servlet初始参数,在Servlet 的init()方法中通过getInitParameter("ip")取得,返回String型数据;
3. <servlet-mapping>内的<servlet-name>与<servlet>内的 <servlet-name>一一对应,把客户端对/HeeloServlet的请求对应到<servlet-class>project4.HelloServlet</servlet-class>所指定的位置;
4. <url-pattern>/HelloServlet</url-pattern>指在IE url中的请求形式。这里的 / 是相对于当前的web目录的,如H:/tomcat4/webapps/myweb。
3.7 安全性设置
<security-constraint>
<display-name>test</display-name>
<web-resource-collection>
<web-resource-name>Success</web-resource-name> <url-pattern>/HelloServlet</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>China of Beijing : ) </realm-name>
</login-config>
4 tomcat-user.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="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="vdot_user" password="vdot123" roles="admin,manager"/>
</tomcat-users>
与以往文件中不一样的一点就是在user元素中,以前是name,现在改成username了。
5 Server.xml文件配置
<Context path="/icq" docBase="myweb" debug="0" reloadable="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_icq_log." suffix=".txt" timestamp="true"/>
</Context>
1. Logger 段,为icq这个应用目录建立一个日志文件;
2. Prefix 是日志文件的前缀;
3. suffix 是日志文件的后缀;
4. myweb说明其相对webapps的位置,是物理存在的目录;
5. /icq说明其相对web URL的路径,是一个虚拟的路径,如:http://localhost/icq;
6. reloadable在开发时比较有用,指自动载入新的Servlet类。当系统发布是应该改成false。
<Connector port="9090" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
更改服务端口号的方法,9090处更改即可,但是需要注意防火墙屏蔽的端口地址。
6 日志配置
日志文件有四个,在jakarta-tomcat-4.0.1/logs目录下,要学会读懂日志。
1. catalina_log在125行 catalina_log.2002-06-20.txt 记录了tomcat服务器启动的相关信息;
2. localhost_access_log在180行: localhost_access_log.2002-06-20.txt 用来记录客户端访问了哪些资源,格式如: 172.28.11.91 - - [20/Jun/2002:13:29:09 8000] "GET /web/WwwServlet HTTP/1.1" 500 149 200 149 是服务器反应的状态码;
3. localhost_examples_log localhost_examples_log.2002-06-20.txt在213行 这个是examples的日志文件;
4. localhost_log localhost_log.2002-06-20.txt 在190行,这里记录了服务器所运行的程序的详细信息。包括错误信息,调试信息等