Tomcat服務器經常使用配置和HTTP簡介

國內私募機構九鼎控股打造APP,來就送 20元現金領取地址:http://jdb.jiudingcapital.com/phone.html
內部邀請碼:C8E245J (不寫邀請碼,沒有現金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統掛牌的公衆公司,股票代碼爲430719,爲中國PE第一股,市值超1000億元。 html

------------------------------------------------------------------------------------------------------------------------------------------------------------------java

 

Web服務器經常使用配置
1.Web系統採用B/S結構通訊的:Browser --- Server
1)瀏覽器向服務器發送訪問目標資源請求(請求)
2)服務器根據請求的目標資源路徑,在服務器端進行查找(請求查找)
3)服務器會將查找結果返回給客戶端瀏覽器(響應)
通訊結構圖:linux

2.什麼是Web服務器?
包括硬件環境和軟件環境,在網絡中安裝web服務器軟件的計算機
3.Tomcat服務器安裝和配置
1)在Apache官網上下載tomcat服務器
*通常採用zip格式的(可直接解壓使用)
2)解壓縮tomcat
*不要使用含有空格和中文目錄的文件夾
3)啓動tomcat以前,配置JAVA_HOME環境變量 ---- 配置JDK安裝路徑
*注意JAVA_HOME使用下劃線
4)啓動tomcat服務器
雙擊bin/startup.bat(若是使用linux雙擊bin/startup.sh)
輸入http://localhost:8080/ 訪問tomcat網站主頁
5)由於網站經過HTTP協議訪問,HTTP協議默認端口80 ---- 修改tomcat服務器啓動端口80
修改conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />  將8080修改成80
訪問localhost:80端口  ----- 省略端口寫法 http://localhost訪問站點
4.tomcat啓動問題
1)窗口一閃而後消失 ----- 編輯startup.bat,在文件末尾加入pause指令,再次運行,讀取錯誤緣由,根據緣由解決
*JAVA_HOME路徑必須是JDK不能夠是JRE
2)端口占用問題
發現端口被佔用後,經過cmd命令行,查看佔用端口進程 ----  netstat –ano
在任務管理器關閉該進程
3)CATALINA_HOME環境變量
指定tomcat安裝位置(該環境變量能夠不配置) ----  若是配置出錯,tomcat將沒法啓動程序員

5.各類版本對應問題
Tomcat版本    Servlet/JSP版本    JavaEE版本    運行環境
4.1              2.3/1.2            1.3            JDK1.3
5.5              2.4/2.0            1.4            JDK1.4
6.0              2.5/2.1            5.0            JDK5.0
7.0              3.0/2.2            6.0            JDK6.0
Tomcat 支持Servlet和JSP規範,Servlet技術屬於JavaEE規範 
* 隨着javaEE 版本提高 -- Servlet版本提高 --- 運行Servlet環境Tomcat版本提高 
* tomcat運行須要JDK 環境版本 

若是編寫 JavaEE5.0工程 須要哪一個版本tomcat能夠運行? 6.0 7.0web

6.Tomcat目錄結構
bin --- 存放tomcat啓動關閉程序
conf --- 存放tomcat配置文件
lib --- tomcat運行須要jar包
logs --- tomcat日誌文件
webapps --- 網站發佈目錄(全部網站能夠發佈到該目錄)
work --- 存放工程運行時,產生數據文件(JSP翻譯Servlet、Session持久化數據)
7.網站的標準目錄結構
站點根目錄
    -------  靜態web資源、jsp
    -------  WEB-INF目錄
                  -------  classes目錄 (保存,class文件)
                  --------  lib  目錄 (當前網站須要jar包) 
                  -------- web.xml (網站配置文件)
* WEB-INF目錄不是必須的,沒有java動態程序代碼, 能夠沒有WEB-INF 目錄
* WEB-INF目錄下資源不能被瀏覽器直接訪問
8.網站開發好後,若是想讓網站被外界訪問,須要將網站發佈到 web服務器tomcat上 (虛擬目錄映射)
Tomcat發佈網站三種方式
原理:
配置<Context>元素
1)配置tomcat/conf/server.xml
在<Host name=」localhost」>內部添加<Context>元素
<Context path="/aa" docBase="C:\AA" /> ---- 爲網站配置虛擬目錄 /aa ------映射到 c:\AA目錄
*修改server.xml 重啓tomcat
2)$CATALINA_HOME/conf/[enginename]/[hostname]/xxx.xml
    tomcat/conf/Catalina/localhost/xxx.xml
    在conf下新建Catalina
在Catalina下新建 localhost
在localhost下 新建 bb.xml 
<Context docBase="C:\BB" /> --- 爲何不須要寫path --- 虛擬目錄就是文件名bb ,path默認/bb
*添加bb.xml,不用重啓tomcat
*推薦第二種寫法(不須要重啓服務器,並且出錯不會影響其它工程運行),儘可能不要使用第一種
3)將網站複製到tomcat/webapps
*不用重啓tomcat
*tomcat會根據文件夾名稱,自動生成虛擬路徑
9.虛擬目錄?
當瀏覽器訪問網站採用訪問路徑 /aa /bb /abc ----- 這些路徑不必定是服務器真實存在目錄,只是瀏覽器在訪問這些路徑時,映射到指定網站跟目錄
10.WAR包製做?
先用壓縮軟件將網站製做xx.zip --- 重命名 xx.wat ---- 複製war到tomcat/webapps
11. Tomcat Manager 使用 (程序員管理已經發布到tomcat網站)
*conf/tomcat-users.xml  加入
<role rolename="manager"/>
<user username="tomcat" password="s3cret" roles="manager"/>
* 重啓服務器 
* 這個功能默認不要開啓 (安全問題)apache

12.域名解析完整過程圖:api

在tomcat內部同時 架設多個網站 --- 百度網站、谷歌網站 
* 虛擬主機技術  ---- 在tomcat中配置 <Host> 元素 
1)搭建tomcat中網站 --- baidu
2)在c盤 新建虛擬主機目錄 baidu , 在虛擬主機目錄中新建網站根目錄 main , 將百度網站複製main 目錄中
3)在tomcat中新建瀏覽器

<Host> 
Host name="www.baidu.com"  appBase="C:\baidu"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
</Host>

* 重啓tomcat
4)修改本機hosts文件 
* win7 系統 ,將hosts文件複製到桌面修改,改後複製回去 
192.168.1.145   www.baidu.com
5)將c:\baidu\main 網站根目錄 配置爲缺省虛擬目錄緩存

<Context path="" docBase="main" /> 

----- 配置缺省虛擬目錄 /main 省略 
http://www.baidu.com/baidu.htm ---- 訪問本機百度 
6)將main目錄 baidu.htm 配置 網站歡迎頁面 
新建WEB-INF目錄 下新建web.xmltomcat

複製代碼
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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"
    version="2.5">
    <welcome-file-list>
        <welcome-file>baidu.htm</welcome-file>
    </welcome-file-list>
</web-app>
複製代碼

hosts應用
一、限制用戶上網 ,網站禁止訪問
二、軟件破解

13.缺省虛似主機 DefaultHost 
<Engine name="Catalina" defaultHost="localhost"> ----- 一個tomcat中能夠配置多臺虛擬主機,可是隻有一臺虛擬主機。客戶端能夠直接經過ip訪問
http://www.baidu.com ---- 客戶端經過域名訪問
http://192.168.1.145 ---- 經過ip訪問 

只有缺省虛擬主機能夠經過ip訪問

14. MyEclipse 整合 tomcat 進行 web 程序開發 
1)配置myeclipse 內部tomcat 插件
配置tomcat6 在 window - preferences -- tomcat6 
檢查JDK 版本是否符合
Launch 默認採用 debug model 
2)將tomcat插件設置爲enable  瀏覽tomcat目錄後 配置ok
3)在MyEclipse中經過插件 tomcat6 --- start  實際上 運行tomcat/bin/startup.bat 
4)在console窗口 查看tomcat日誌 
* tomcat6 --- stop server 正常關閉tomcat  調用 tomcat/bin/shutdown.bat 
* 若是直接點擊 myeclipse console 窗口 紅色按鈕 --- 強行中止tomcat 

應用:
在myeclipse中編寫一個web工程
1)建立web project
context root url 默認工程名 
Javaee 規範版本 
* 在使用javaee5 規範版本時,默認支持jstl技術
2)新建html 將html編輯器 設置 html editor 
window -- preference ---- general ---- editor --- File Associations 
3)發佈工程到tomcat 
原理:將當前web工程複製tomcat/webapps 
* 修改 發佈虛擬目錄名稱 --- 右鍵工程屬性 --- myeclipse ---web ----修改Web Context-root

HTTP協議
1.HTTP協議特徵
1)基於TCP傳輸協議
OSI七層網絡體系結構
TCP是傳輸層協議
HTTP是應用層協議,基於TCP協議

TCP特徵:三層握手
例如
A給B說話:能聽到我說話嗎?
B迴應:我能聽到,能聽到我說話嗎?
A迴應:我也能聽到

確保通訊暢通 ----  數據傳輸不容許丟包
A給B發數據,若是B沒有迴應,A選擇從新發送 ----- 超時
2)默認端口80
3)基於請求 – 響應模式的協議
先請求,在出現響應 ----- 請求和響應一一對應

2.兩個實驗
實驗一 : 經過telnet 鏈接服務器,進行協議操做 
XP 自動安裝telnet 
win7 系統 安裝telnet插件 
* telnet 採用 傳輸層鏈接原理方式  通訊內容必須嚴格按照應用層協議 
語法:telnet ip port 
一、 cmd> telnet localhost 80 
二、手動輸入HTTP協議請求 
telnet亂碼解決:ctrl+] 回車
三、輸入協議內容
GET / HTTP/1.0
HOST: localhost
回車

實驗二  : 安裝Httpwatch
完成訪問web頁面時 http協議數據包 抓取 
3.查看網絡鏈接過程當中 http協議內容
請求內容
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
Accept-Language: zh
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host: localhost
Connection: Keep-Alive

響應內容
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"7347-1184876416000"
Last-Modified: Thu, 19 Jul 2007 20:20:16 GMT
Content-Type: text/html
Content-Length: 7347
Date: Sat, 09 Jun 2012 07:02:35 GMT

<?xml version="1.0" encoding="ISO-8859-1"?>

...
4.HTTP和HTML關係?
HTTP通訊協議,規定數據傳輸格式
HTML網頁設計語言,靜態網頁數據
HTTP 傳輸格式、 HTML傳輸內容
5.HTTP/1.0、HTTP/1.1區別?
在HTTP1.0協議中,客戶端與web服務器創建鏈接後,只能得到一個web資源
HTTP1.1協議,運行客戶端與web服務器創建鏈接後,在一個鏈接上獲取多個web資源
6.一個web頁面中,使用img標籤引用了三幅圖片,當客戶端訪問服務器中的這個web頁面時,客戶端總共會訪問幾回服務器,即向服務器發送了幾回HTTP請求?
*三幅圖片地址是否相同
若是三幅圖片地址都不相同 --- 4次請求

HTTP請求
請求完整格式包括三個部分:請求行、頭信息、請求體
1.請求行:請求中第一行信息 --- 包括三個部分  請求方式、資源路徑、HTTP協議版本
例如:GET / HTTP/1.1
HTTP請求方式有七種:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
經常使用兩種:GET、POST
1)客戶端網頁哪些是GET方式請求?哪些是POST請求
GET方式:一、用戶直接在瀏覽器上手動輸入url地址 二、<a href="url"></a> 
三、<form method="get">   *form表單默認提交方式就是get
POST方式:一、<form method="post">
2)GET提交方式和POST提交方式區別?
GET提交方式後攜帶數據有大小限制1K,提交數據在url上顯示
*http://localhost/day04/url?username=zhangsan 格式 url?name=value&name=value&name=value... 
以?分隔url和參數,參數採用鍵值對格式,多個參數使用&符號分隔
POST數據在請求體重,再也不url上顯示,沒有數據大小限制
*uesrname=zhangsang 請求體和信息頭直接存在一個空行
2.頭信息
Accept: text/html,image/*   ----- 客戶端能夠接收文件類型 text/html->HTML文件 image/* 任意格式圖片
Accept-Charset: ISO-8859-1 ----- 客戶端能夠識別編碼字符集
Accept-Encoding: gzip ----- 客戶端能夠識別壓縮數據格式,gzip是一種壓縮格式
Accept-Language:zh-cn ----- 客戶端瀏覽器語言
Host: www.itcast.com:80  ----- 訪問服務器地址 
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT ----- 該請求的資源在客戶端保存最後訪問時間(緩存有關)
Referer: http://www.itcast.com/index.jsp ---- 上一次請求訪問頁面
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) ---- 客戶端瀏覽器類型版本 
Connection: close/Keep-Alive    ---- 該請求鏈接後,鏈接是保持仍是關閉 1.0關閉 1.1保持
Date: Tue, 11 Jul 2000 18:23:51 GMT ---- 請求時間
3.請求體:存放客戶端提交post請求數據
key=value&key=value&key=value ....  
例如:username=sss
4.Referer防止客戶盜鏈數據
eg:模擬瀏覽器訪問服務器得到refererServlet當中信息
1)URL鏈接 --- HTTP協議
2)Socket鏈接 --- TCP協議

eg:

複製代碼
package cn.lsl.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class RefererServlet extends HttpServlet {

    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String referer = request.getHeader("referer");     //得到頭信息
        response.setContentType("text/html;charset=gbk");
        if(referer == null || !referer.startsWith("http://localhost")){
            //盜鏈
            response.getWriter().println("盜鏈!");
            return;
        }else{
            response.getWriter().println("XX網站歡迎您。。。。");
        }
    }

    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
複製代碼

直接輸入網址,則會被當作盜鏈
從該網站的某個頁面點進去則能正常訪問

複製代碼
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
    <a href="referer">link</a>
  </body>
</html>
複製代碼

模擬客戶端,繞過防盜鏈邏輯,得到須要信息

複製代碼
package cn.lsl.servlet;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

public class URLTest {
    public static void main(String[] args) throws Exception {
        //建立URL對象
        URL url = new URL("http://localhost:8080/HTTPTest/referer");
        //連接目標資源
        URLConnection connection= url.openConnection();
        connection.addRequestProperty("referer", "http://localhost/index.jsp");
        //得到網站輸入流
        InputStream in = connection.getInputStream();
        byte[] buf = new byte[1024];
        in.read(buf);    //將流數據讀取buf中
        for(byte b : buf){
            System.out.write(b);
        }
        System.out.flush();
    }
}
複製代碼

HTTP響應
響應數據 分爲三個部分:狀態行、頭信息、響應體
1.狀態行分爲三個部分:HTTP協議版本、狀態碼、描述信息
例如:HTTP/1.1 200 OK
100~199 Informational 請求信息不足,還須要其餘信息才能處理
200~299 Success 請求處理成功
300~399 Redirection 服務器已經處理完畢,客戶端還須要進一步動做
400~499 Client Error 客戶端錯誤
500~599 Server Error 服務器端錯誤

200 請求處理成功 302 客戶端進行重定向 304 客戶端訪問資源沒有被修改後,客戶端訪問本地緩存
404 訪問資源不存在 500 服務器內部出錯
2.響應頭
Location: http://www.it315.org/index.jsp ---- 重定向地址 結合302一塊兒使用
*重定向兩次請求,兩次響應
Server:apache tomcat ----- 服務器類型 
Content-Encoding: gzip ---- 設置響應數據壓縮格式
*若是響應數據通過壓縮,傳輸體積更小,性能更好
例如:
在沒有壓縮狀況下,13605字節 http://localhost/docs/
如何設置tomcat壓縮
*經過設置tomcat/conf/server.xml設置響應數據壓縮
<Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" compressableMimeType="text/html,text/xml,text/plain" compression="on"/>
清楚瀏覽器緩存,重啓tomcat
4244字節 http://localhost/docs
Content-Length: 80  ----- 響應數據長度
Content-Language: zh-cn  ----- 響應數據語言
Content-Type: text/html; charset=GB2312  ----- 響應數據類型
*數據類型採用Mime協議規定類型  html文件 ---- text/html、jpg文件 ---- image/jpeg
*在tomcat/conf/web.xml中查看文件mime類型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  ----- 和請求頭信息If-Modified-Since一塊兒使用,控制服務器緩存
* ETag: W/"13397-1184876416000" tomcat生成Etag 13397文件大小 1184876416000文件最後修改時間(精確毫秒)
* 客戶端下次請求時經過If-None-Match 攜帶剛剛 Etag信息
Refresh: 1;url=http://www.it315.org ----- 網頁自動跳轉
Content-Disposition: attachment; filename=aaa.zip ----- 文件下載時指定文件附件名稱
控制該程序在客戶端不緩存(如下三個一塊兒使用)
Expires: -1 
Cache-Control: no-cache  
Pragma: no-cache  
*對於動態程序,常常修改,禁止瀏覽器緩存內容
Connection: close/Keep-Alive   ---- 響應後鏈接是否關閉
Date: Tue, 11 Jul 2000 18:23:51 GMT --- 響應時間
3.響應體
一般爲HTML文件內容 --- 若是設置響應體進行gzip壓縮,看到gzip壓縮內容

重定向:

eg:

複製代碼
package cn.lsl.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class RedirectServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setStatus(302);
        response.setHeader("Location", "index.jsp");  //重定向index.jsp
    }

    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }

}
複製代碼

設置瀏覽器不緩存

eg:

複製代碼
package cn.lsl.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class NoCacheServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //須要三句禁止緩存,防止瀏覽器兼容問題
        response.setDateHeader("expires", -1);
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
        response.getWriter().println("aabbcc");
    }

    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }

}
複製代碼

經過HTTP協議Range頭信息,實現斷點下載功能
在鏈接服務器目標資源進行下載過程當中,傳遞Range頭信息,指定下載目標資源部份內容  ---  實現斷點下載功能
斷點下載:使用URL類模擬客戶端訪問WebRoot/info.txt,下載文件中內容

複製代碼
package cn.lsl.servlet;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

public class RangeTest {
    //經過Range頭信息實現斷點下載
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://localhost:8080/HTTPTest/info.txt");
        URLConnection connection = url.openConnection();
        //經過addRequestProperty添加頭信息,Range實現斷點下載
        connection.addRequestProperty("Range", "bytes=100-");
        InputStream in = connection.getInputStream();
        OutputStream out = new FileOutputStream("download.txt");
        byte[] buf = new byte[1024];
        int len;
        while((len = in.read(buf)) != -1){
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}
複製代碼
相關文章
相關標籤/搜索