Tomcat源码学习(7)-How Tomcat works(转)
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ì)象是通過傳遞由套接字獲得的OutputStream對(duì)象給HttpServer類的await方法來構(gòu)造的。Response類有兩個(gè)公共方法:setRequest和sendStaticResource。setRequest方法用來傳遞一個(gè)Request對(duì)象給Response對(duì)象。
??? sendStaticResource方法是用來發(fā)送一個(gè)靜態(tài)資源,例如一個(gè)HTML文件。它首先通過傳遞上一級(jí)目錄的路徑和子路徑給File累的構(gòu)造方法來實(shí)例化java.io.File類。
File file = new File(HttpServer.WEB_ROOT, request.getUri());
??? 然后它檢查該文件是否存在。假如存在的話,通過傳遞File對(duì)象讓sendStaticResource構(gòu)造一個(gè)java.io.FileInputStream對(duì)象。然后,它調(diào)用FileInputStream的read方法并把字節(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转)Virtual PC 2007虚拟
- 下一篇: JavaScript页面校验