• Tomcat总结


    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")
  • 相关阅读:
    观察者模式(Observer)
    外观模式(三层解耦)
    建造者模式(Builder)
    简单工厂
    单例模式(Winform窗体的实现)
    20180213 字符串spilt方法,字符串打包zip方法
    20180212第一发:Python与Json编码解码举例
    Eclipse插件Fat Jar
    java学习之浅谈多线程4SwingWorker
    Android SDK manager 闪退
  • 原文地址:https://www.cnblogs.com/tuzhiye/p/1381041.html
Copyright © 2020-2023  润新知