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

正文內(nèi)容

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

2025-07-22 23:12 本頁面
 

【文章內(nèi)容簡介】 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ù)。這個(gè)方法沒有做很多事情。它唯一可用的信息是通過調(diào)用HTTP請求的私有方法parseUri獲得的 URI。parseUri方法在uri變量里邊存儲(chǔ)URI。公共方法getUri被調(diào)用并返回HTTP請求的URI。 注意:在第3章和下面各章的附帶程序里邊,HTTP請求將會(huì)對原始數(shù)據(jù)進(jìn)行更多的處理。 為了理解parse和parseUri方法是怎樣工作的,你需要知道上一節(jié)“超文本傳輸協(xié)議(HTTP)”討論的HTTP請求的結(jié)構(gòu)。在這一章中,我們僅 僅關(guān)注HTTP請求的第一部分,請求行。請求行從一個(gè)方法標(biāo)記開始,接下去是請求的URI和協(xié)議版本,最后是用回車換行符(CRLF)結(jié)束。請求行里邊的 元素是通過一個(gè)空格來分隔的。例如。GET / HTTP/ parse方法從傳遞給Requst對象的套接字的InputStream中讀取整個(gè)字節(jié)流并在一個(gè)緩沖區(qū)中存儲(chǔ)字節(jié)數(shù)組。然后它使用緩沖區(qū)字節(jié)數(shù)據(jù)的字 節(jié)來填入一個(gè)StringBuffer對象,并且把代表StringBuffer的字符串傳遞給parseUri方法。 parse方法列在Listing 。 然后parseUri方法從請求行里邊獲得URI。Listing 。parseUri方法搜索請求里邊的第一個(gè)和第二個(gè)空格并從中獲取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。} 響應(yīng)對象是通過傳遞由套接字獲得的OutputStream對象給HttpServer類的await方法來構(gòu)造的。Response類有兩個(gè)公共方 法:setRequest和sendStaticResource。setRequest方法用來傳遞一個(gè)Request對象給Response對象。 sendStaticResource方法是用來發(fā)送一個(gè)靜態(tài)資源,例如一個(gè)HTML文件。它首先通過傳遞上一級目錄的路徑和子路徑給File累的構(gòu)造方 。File file = new File(, ())。 然后它檢查該文件是否存在。假如存在的話,通過傳遞File對象讓sendStaticResource構(gòu)造一個(gè) 。然后,它調(diào)用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ā)送一個(gè)錯(cuò)誤信息到瀏覽器。String errorMessage =ContentType: text/html\r\n +ContentLength: 23\r\n +\r\n +h1File Not Found/h1。(())。運(yùn)行應(yīng)用程序 為了運(yùn)行應(yīng)用程序,可以在工作目錄下敲入下面的命令:java 為了測試應(yīng)用程序,可以打開你的瀏覽器并在地址欄或網(wǎng)址框中敲入下面的命令:://localhost:8080/ 正如Figure 。Figure : web服務(wù)器的輸出 在控制臺中,你可以看到類似于下面的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總結(jié) 在這章中你已經(jīng)看到一個(gè)簡單的web服務(wù)器是如何工作的。這章附帶的程序僅僅由三個(gè)類組成,并不是全功能的。不過,它提供了一個(gè)良好的學(xué)習(xí)工具。下一章將 要討論動(dòng)態(tài)內(nèi)容的處理過程。第2章:一個(gè)簡單的Servlet容器 概要 本章通過兩個(gè)程序來說明你如何開發(fā)自己的servlet容器。第一個(gè)程序被設(shè)計(jì)得足夠簡單使得你能理解一個(gè)servlet容器是如何工作的。然后它演變?yōu)?第二個(gè)稍微復(fù)雜的servlet容器。 注意:每一個(gè)servlet容器的應(yīng)用程序都是從前一章的應(yīng)用程序逐漸演變過來的,直至一個(gè)全功能的 Tomcat servlet容器在第17章被建立起來。 這兩個(gè)servlet容器都可以處理簡單的servlet和靜態(tài)資源。你可以使用PrimitiveServlet來測試這個(gè)容器。 PrimitiveServlet在Listing 。更復(fù)雜的servlet就超過這些容器的能力了,但是你將會(huì)在以下各章中學(xué)到如何建立更復(fù)雜 的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。}} 。為了理解應(yīng)用程序是如何工作的。為 了給你復(fù)習(xí)一下,將會(huì)在本章的首節(jié)討論這個(gè)接口。在這之后,你將會(huì)學(xué)習(xí)一個(gè)servlet容器做了什么工作來為一個(gè)servlet提供HTTP請求。 。其中一個(gè)至關(guān)重要的就是 。所有的servlet必須實(shí)現(xiàn)實(shí)現(xiàn)或者繼承實(shí)現(xiàn)該接口的類。 Servlet接口有五個(gè)方法,其用法如下。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1