1. 程式人生 > >【JavaEE WEB 開發】Tomcat 詳解 Servlet 入門

【JavaEE WEB 開發】Tomcat 詳解 Servlet 入門

一. Tomcat 下載安裝配置


1. Tomcat 下載


Tomcat 下載

-- 下載頁面


-- 下載對應平臺的版本 : 有 MAc/Linux 平臺, Windows 平臺的伺服器軟體;


2. Tomcat 執行 (Linux/Mac 環境)


Tomcat 執行 (Mac/Linux)

-- 進入 Tomcat 安裝目錄

localhost:apache-tomcat-6.0.44 octopus$ pwd
/Users/hanshuliang/develop/apache-tomcat-6.0.44
localhost:apache-tomcat-6.0.44 octopus$ ls
LICENSE		RELEASE-NOTES	bin		lib		temp		work
NOTICE		RUNNING.txt	conf		logs		webapps
localhost:apache-tomcat-6.0.44 octopus$

-- 進入 bin 目錄

localhost:apache-tomcat-6.0.44 octopus$ cd bin/
localhost:bin octopus$ ls
bootstrap.jar			cpappend.bat			shutdown.bat			tool-wrapper.bat
catalina-tasks.xml		daemon.sh			shutdown.sh			tool-wrapper.sh
catalina.bat			digest.bat			startup.bat			version.bat
catalina.sh			digest.sh			startup.sh			version.sh
commons-daemon-native.tar.gz	setclasspath.bat		tomcat-juli.jar
commons-daemon.jar		setclasspath.sh			tomcat-native.tar.gz


-- 執行啟動命令 : 特別注意, 需要使用 root 許可權啟動, 否則會報出許可權錯誤, 使用命令 sudo ./startup.sh ;

localhost:bin octopus$ sudo ./startup.sh 
Using CATALINA_BASE:   /Users/hanshuliang/develop/apache-tomcat-6.0.44
Using CATALINA_HOME:   /Users/hanshuliang/develop/apache-tomcat-6.0.44
Using CATALINA_TMPDIR: /Users/hanshuliang/develop/apache-tomcat-6.0.44/temp
Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
Using CLASSPATH:       /Users/hanshuliang/develop/apache-tomcat-6.0.44/bin/bootstrap.jar

-- 檢視是否啟動 : 開啟瀏覽器, 輸入 localhost:8080 網址, 檢視是否出現 Tomcat 頁面;


3. Tomcat 執行 (Windows 環境)


Tomcat 執行 (Windows) : 

-- 進入 Tomcat 安裝目錄 : 

-- 進入 bin 目錄啟動 startup 可執行程式;


-- 瀏覽器驗證 : 在瀏覽器輸入 http://localhost:8080/ 網址, 出現以下介面即配置正確;


3. Tomcat 錯誤排除


(1) 啟動閃退問題


啟動閃退 : 沒有配置 JAVA_HOME 環境變數, 使用 Tomcat 時, 必須配置 JAVA_HOME 環境變數;

-- 閃退原因 : tomcat 啟動後, 會查詢 JAVA_HOME 環境變數, 之後還會查詢 CATALINA_HOME 環境變數 (Tomcat 根目錄), CATALINA_HOME 這個變數建議不設定;

(2) CATALINA_HOME 配置出現問題


CATALINA_HOME 問題 : 不建議配置 CATALINA_HOME 環境變數;

-- 配置 CATALINA_HOME 出現的問題 : 如果有多個 Tomcat, 在任意 Tomcat 中啟動, 只會啟動 CATALINA_HOME 指定的 Tomcat 目錄;

-- 不配置 CATALINA_HOME : 在什麼地方啟動, 就會到啟動 startup 命令的 會將 命令所在的 Tomcat 啟動;

(3) 埠問題


端口占用問題解決方案

-- 1. 關閉佔用埠的程序 : 使用 cports 軟體檢視佔用埠的程序, 將其關閉即可, 工作管理員是看不到埠的;


-- 2. 修改 Tomcat 的 HTTP 埠 : 在 tomcat 的 conf/server.xml 中修改下面的配置, 預設 8080 , 修改成一個 其他的數字;

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />


4. Tomcat 配置 與 目錄


(1) 瀏覽器埠設定


訪問伺服器埠配置

-- 配置檔案 : apache-tomcat-6.0.39\conf\server.xml;

-- 配置內容 : 當前預設設定的埠號是 8080, 訪問地址是 http://localhost:8080/;

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />


(2) Tomcat 共享資源


共享一個資源

-- 建立 html 頁面 : 建立一個 index.html 文件, 裡面隨便寫一寫字串;


-- 將檔案放到 webapps 中的目錄中 : 在 webapps 中建立一個任意名稱目錄 test, 然後將 index.html 放置到該目錄中;


-- 啟動 Tomcat


-- 瀏覽器中輸入 : 瀏覽器位址列輸入 http://localhost:8080/test/index.html 地址;


(3) URL 解析


解析 url 地址 : http://localhost:8080/test/index.html;

-- "http://" : url 所使用的協議名稱, http 協議;

-- "localhost" : 域名, 相當於 IP 地址;

-- 8080: : Tomcat 所使用的埠號;

-- /test : Tomcat 共享目錄的名稱, 在 webapps 下面的共享目錄;

-- index.html : 共享檔名稱;

(4) 目錄解析


Tomcat 目錄解析

-- 目錄截圖


-- bin 目錄 : Tomcat 的命令路徑, 包括 啟動 關閉 Tomcat 伺服器;

-- conf 目錄 : Tomcat 配置檔案目錄, 其中 server.xml 用於配置埠號;

-- lib 目錄 : Tomcat 的支援包;

-- logs 目錄 : 執行產生的日誌資訊存放目錄;

-- temp 目錄 : 臨時檔案存放目錄;

-- webapps 目錄 : 共享資源目錄, 不能單獨共享一個檔案, 需要建立的資料夾, 將檔案放到一個目錄中才能共享;

-- work 目錄 : tomcat 執行時的工作目錄;

二. J2EE 應用建立


1. 建立 J2EE 應用


(1) MyEclipse 中建立應用


MyEclipse 建立 Web 應用

-- 建立應用 : 選擇 File -> New -> Web Project 選項;


-- 配置應用資訊 : 注意 我們使用的是 Tomcat 6.0 版本, 對應 JavaEE 5.0 版本;


-- 建立 Tomcat 伺服器 : 選擇 Window -> Preference -> MyEclipse -> Server -> Tomcat 6.x 選項, 進行如下配置 : 


-- 配置後效果


-- 部署應用 : 右鍵點選伺服器, 選擇 Add Deployment;


-- 將剛建立的 Hello World 部署到 Tomcat 中去


-- 部署後效果


-- 執行 Tomcat 伺服器 : 位址列輸入 http://localhost:8080/HelloWorld/ 地址;


-- MyEclipse 應用檔案截圖


(2) eclipse 中建立應用


Eclipse 建立 Web 應用

-- 建立 Dynamic Web Project


-- 配置 應用


-- 應用目錄展示


(3) Eclipse 和 MyEclipse 中建立應用伺服器版本對應


Eclipse 伺服器版本對應


-- dynamic web module 2.4 <--> Tomcat 5.5
-- dynamic web module 2.5 <--> Tomcat 6.0
-- dynamic web module 3.0 <--> Tomcat 7.0

MyEclipse 伺服器版本對應


-- JavaEE 5.0 <--> Tomcat 6.0

-- J2EE 1.4 / J2EE 1.3 <--> Tomcat 5.5 

2. Servlet 簡單示例


(1) Servlet 示例


Servlet 簡單示例

-- MyServlet.java 程式碼

package cn.org.octopus.hello;

import java.io.IOException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{ 
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//避免出現中文亂碼
		resp.setContentType("text/html;charset=utf-8");
		//輸出內容
		resp.getWriter().write("當前時間 : " + new Date());
	}
	
}

-- web.xml 配置檔案
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<!-- 配置 Servlet 需要配置 Servlet 和 Servlet-mapping 兩個標籤 -->
	<servlet>
		<!-- Servlet 內部名稱-->
		<servlet-name>HelloWorld</servlet-name>
		<!-- Servlet 全路徑名-->
		<servlet-class>cn.org.octopus.hello.MyServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<!-- Servlet 內部名稱-->
		<servlet-name>HelloWorld</servlet-name>
		<!-- servlet 訪問名稱 -->
		<url-pattern>/HelloWorld</url-pattern>
	</servlet-mapping>


</web-app>

-- 執行效果