1.介紹
下載地址:
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表示緩存文件的放置地點
-
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 tomcat 與 apache 的集成
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")
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
