日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat源码学习(7)-How Tomcat works(转)

發(fā)布時(shí)間:2025/3/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat源码学习(7)-How Tomcat works(转) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Response

??? ex01.pyrmont.Response類代表一個(gè)HTTP響應(yīng),在Listing 1.6里邊給出。
???????? Listing 1.6: Response


package ex01.pyrmont;
import java.io.OutputStream;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.File;
/*
HTTP Response = Status-Line
*(( general-header | response-header | entity-header ) CRLF)
CRLF
[ message-body ]
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
*/
public class Response {
???? private static final int BUFFER_SIZE = 1024;
???? Request request;
???? OutputStream output;
???? public Response(OutputStream output) {
???????? this.output = output;
???? }
???? public void setRequest(Request request) {
???????? this.request = request;
???? }
???? public void sendStaticResource() throws IOException {
???????? byte[] bytes = new byte[BUFFER_SIZE];
???????? FileInputStream fis = null;
???????? try {
???????????? File file = new File(HttpServer.WEB_ROOT, request.getUri());
???????????? if (file.exists()) {
???????????????? fis = new FileInputStream(file);
???????????????? int ch = fis.read(bytes, 0, BUFFER_SIZE);
???????????????? while (ch!=-1) {
???????????????????? output.write(bytes, 0, ch);
???????????????????? ch = fis.read(bytes, 0, BUFFER_SIZE);
???????????????? }
???????????? }
???????????? else {
???????????? // file not found
???????????? String errorMessage = "HTTP/1.1 404 File Not Found\r\n" +
???????????????? "Content-Type: text/html\r\n" +
???????????????? "Content-Length: 23\r\n" +
???????????????? "\r\n" +
???????????????? "<h1>File Not Found</h1>";
???????????? output.write(errorMessage.getBytes());
???????????? }
???????? }
???????? catch (Exception e) {
???????????? // thrown if cannot instantiate a File object
???????????? System.out.println(e.toString() );
???????? }
???????? finally {
???????????? if (fis!=null)
???????????? fis.close();
???????? }
???? }
}

??? 首先注意到它的構(gòu)造方法接收一個(gè)java.io.OutputStream對(duì)象,就像如下所示。

public Response(OutputStream output) {
???? this.output = output;
}

??? 響應(yīng)對(duì)象是通過(guò)傳遞由套接字獲得的OutputStream對(duì)象給HttpServer類的await方法來(lái)構(gòu)造的。Response類有兩個(gè)公共方法:setRequestsendStaticResourcesetRequest方法用來(lái)傳遞一個(gè)Request對(duì)象給Response對(duì)象。
??? sendStaticResource
方法是用來(lái)發(fā)送一個(gè)靜態(tài)資源,例如一個(gè)HTML文件。它首先通過(guò)傳遞上一級(jí)目錄的路徑和子路徑給File累的構(gòu)造方法來(lái)實(shí)例化java.io.File類。

File file = new File(HttpServer.WEB_ROOT, request.getUri());

??? 然后它檢查該文件是否存在。假如存在的話,通過(guò)傳遞File對(duì)象讓sendStaticResource構(gòu)造一個(gè)java.io.FileInputStream對(duì)象。然后,它調(diào)用FileInputStreamread方法并把字節(jié)數(shù)組寫入OutputStream對(duì)象。請(qǐng)注意,這種情況下,靜態(tài)資源是作為原始數(shù)據(jù)發(fā)送給瀏覽器的。

if (file.exists()) {
???? fis = new FileInputstream(file);
???? int ch = fis.read(bytes, 0, BUFFER_SIZE);
???? while (ch!=-1) {
???????? output.write(bytes, 0, ch);
???????? ch = fis.read(bytes, 0, BUFFER_SIZE);
???? }
}

??? 假如文件并不存在,sendStaticResource方法發(fā)送一個(gè)錯(cuò)誤信息到瀏覽器。

String errorMessage =
???? "Content-Type: text/html\r\n" +
???? "Content-Length: 23\r\n" +
???? "\r\n" +
???? "<h1>File Not Found</h1>";
output.write(errorMessage.getBytes());

轉(zhuǎn)載于:https://www.cnblogs.com/macula7/archive/2009/08/16/1960791.html

總結(jié)

以上是生活随笔為你收集整理的Tomcat源码学习(7)-How Tomcat works(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。