freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

tomcat內部工作原理講解(編輯修改稿)

2025-07-22 23:12 本頁面
 

【文章內容簡介】 60。// Read a set of characters from the socketStringBuffer request = new StringBuffer(2048)。int i。byte[] buffer = new byte[2048]。try {i = (buffer)。}catch (IOException e) {()。i = 1。}for (int j=0。 ji。 j++) {((char) buffer[j])。}(())。uri = parseUri(())。}Listing : Request類的parseUri方法private String parseUri(String requestString) {int index1, index2。index1 = (39。 39。)。if (index1 != 1) {index2 = (39。 39。, index1 + 1)。if (index2 index1)return (index1 + 1, index2)。}return null。} parse方法解析HTTP請求里邊的原始數(shù)據(jù)。這個方法沒有做很多事情。它唯一可用的信息是通過調用HTTP請求的私有方法parseUri獲得的 URI。parseUri方法在uri變量里邊存儲URI。公共方法getUri被調用并返回HTTP請求的URI。 注意:在第3章和下面各章的附帶程序里邊,HTTP請求將會對原始數(shù)據(jù)進行更多的處理。 為了理解parse和parseUri方法是怎樣工作的,你需要知道上一節(jié)“超文本傳輸協(xié)議(HTTP)”討論的HTTP請求的結構。在這一章中,我們僅 僅關注HTTP請求的第一部分,請求行。請求行從一個方法標記開始,接下去是請求的URI和協(xié)議版本,最后是用回車換行符(CRLF)結束。請求行里邊的 元素是通過一個空格來分隔的。例如。GET / HTTP/ parse方法從傳遞給Requst對象的套接字的InputStream中讀取整個字節(jié)流并在一個緩沖區(qū)中存儲字節(jié)數(shù)組。然后它使用緩沖區(qū)字節(jié)數(shù)據(jù)的字 節(jié)來填入一個StringBuffer對象,并且把代表StringBuffer的字符串傳遞給parseUri方法。 parse方法列在Listing 。 然后parseUri方法從請求行里邊獲得URI。Listing 。parseUri方法搜索請求里邊的第一個和第二個空格并從中獲取URI。Response類 ,在Listing 。Listing : Response類package 。import 。import 。import 。import 。/*HTTP Response = StatusLine*(( generalheader | responseheader | entityheader ) CRLF)CRLF[ messagebody ]StatusLine = HTTPVersion SP StatusCode SP ReasonPhrase CRLF*/public class Response {private static final int BUFFER_SIZE = 1024。Request request。OutputStream output。public Response(OutputStream output) { = output。}public void setRequest(Request request) { = request。}public void sendStaticResource() throws IOException {byte[] bytes = new byte[BUFFER_SIZE]。FileInputStream fis = null。try {File file = new File(, ())。if (()) {fis = new FileInputStream(file)。int ch = (bytes, 0, BUFFER_SIZE)。while (ch!=1) {(bytes, 0, ch)。ch = (bytes, 0, BUFFER_SIZE)。}}else {// file not foundString errorMessage = HTTP/ 404 File Not Found\r\n +ContentType: text/html\r\n +ContentLength: 23\r\n +\r\n +h1File Not Found/h1。(())。}}catch (Exception e) {// thrown if cannot instantiate a File object(() )。}finally {if (fis!=null)()。}}} ,就像如下所示。public Response(OutputStream output) { = output。} 響應對象是通過傳遞由套接字獲得的OutputStream對象給HttpServer類的await方法來構造的。Response類有兩個公共方 法:setRequest和sendStaticResource。setRequest方法用來傳遞一個Request對象給Response對象。 sendStaticResource方法是用來發(fā)送一個靜態(tài)資源,例如一個HTML文件。它首先通過傳遞上一級目錄的路徑和子路徑給File累的構造方 。File file = new File(, ())。 然后它檢查該文件是否存在。假如存在的話,通過傳遞File對象讓sendStaticResource構造一個 。然后,它調用FileInputStream的read方法并把字節(jié)數(shù)組寫入 OutputStream對象。請注意,這種情況下,靜態(tài)資源是作為原始數(shù)據(jù)發(fā)送給瀏覽器的。if (()) {fis = new FileInputstream(file)。int ch = (bytes, 0, BUFFER_SIZE)。while (ch!=1) {(bytes, 0, ch)。ch = (bytes, 0, BUFFER_SIZE)。}} 假如文件并不存在,sendStaticResource方法發(fā)送一個錯誤信息到瀏覽器。String errorMessage =ContentType: text/html\r\n +ContentLength: 23\r\n +\r\n +h1File Not Found/h1。(())。運行應用程序 為了運行應用程序,可以在工作目錄下敲入下面的命令:java 為了測試應用程序,可以打開你的瀏覽器并在地址欄或網址框中敲入下面的命令:://localhost:8080/ 正如Figure 。Figure : web服務器的輸出 在控制臺中,你可以看到類似于下面的HTTP請求:GET / HTTP/Accept: image/gif, image/xxbitmap, image/jpeg, image/pjpeg,application/, application/msword, application/powerpoint, application/xshockwaveflash, application/pdf, */*AcceptLanguage: enusAcceptEncoding: gzip, deflateUserAgent: Mozilla/ (patible。 MSIE 。 Windows NT 。 .NET CLR)Host: localhost:8080Connection: KeepAliveGET /images/ HTTP/Accept: */*Referer: ://localhost:8080/AcceptLanguage: enusAcceptEncoding: gzip, deflateUserAgent: Mozilla/ (patible。 MSIE 。 Windows NT 。 .NET CLR)Host: localhost:8080Connection: KeepAlive總結 在這章中你已經看到一個簡單的web服務器是如何工作的。這章附帶的程序僅僅由三個類組成,并不是全功能的。不過,它提供了一個良好的學習工具。下一章將 要討論動態(tài)內容的處理過程。第2章:一個簡單的Servlet容器 概要 本章通過兩個程序來說明你如何開發(fā)自己的servlet容器。第一個程序被設計得足夠簡單使得你能理解一個servlet容器是如何工作的。然后它演變?yōu)?第二個稍微復雜的servlet容器。 注意:每一個servlet容器的應用程序都是從前一章的應用程序逐漸演變過來的,直至一個全功能的 Tomcat servlet容器在第17章被建立起來。 這兩個servlet容器都可以處理簡單的servlet和靜態(tài)資源。你可以使用PrimitiveServlet來測試這個容器。 PrimitiveServlet在Listing 。更復雜的servlet就超過這些容器的能力了,但是你將會在以下各章中學到如何建立更復雜 的servlet容器。Listing : import .*。import 。import 。public class PrimitiveServlet implements Servlet {public void init(ServletConfig config) throws ServletException {(init)。}public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException {(from service)。PrintWriter out = ()。(Hello. Roses are red.)。(Violets are blue.)。}public void destroy() {(destroy)。}public String getServletInfo() {return null。}public ServletConfig getServletConfig() {return null。}} 。為了理解應用程序是如何工作的。為 了給你復習一下,將會在本章的首節(jié)討論這個接口。在這之后,你將會學習一個servlet容器做了什么工作來為一個servlet提供HTTP請求。 。其中一個至關重要的就是 。所有的servlet必須實現(xiàn)實現(xiàn)或者繼承實現(xiàn)該接口的類。 Servlet接口有五個方法,其用法如下。
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1