1. 程式人生 > >【Head First Servlets and JSP】筆記1

【Head First Servlets and JSP】筆記1

http header 多線程 轉換 throw 接收 找到 write ide

1、把Java放到HTML中,JSP應運而生。

2、Servlet本身並沒有main()方法,所以必須要有其他Java程序去調用它,這個Java程序就是Web容器(Container)。Tomcat就是一個容器。

3、容器能提供什麽?

  • 通信支持 -不用再寫ServerSocket了
  • 生命周期管理 -容器控制著Servlet的生與死
  • 多線程支持 -容器會自動地為它接收的每一個Servlet請求創建一個新的Java線程
  • 聲明方式實現安全
  • JSP支持 -容器負責把JSP代碼翻譯成Java

4、容器如何處理請求?

Ⅰ、用戶發出一個指向Servlet的請求。

Ⅱ、容器“看出”這個請求指向Servlet,於是創建兩個對象HttpServletRequest、HttpServletResponse。

Ⅲ、容器找到這個Servlet,為其創建或者分配一個線程,並傳入上述兩個對象。

Ⅳ、容器調用Servlet的service()方法。

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getMethod();
        
long lastModified; if(method.equals("GET")) { lastModified = this.getLastModified(req); if(lastModified == -1L) { this.doGet(req, resp); } else { long ifModifiedSince; try { ifModifiedSince
= req.getDateHeader("If-Modified-Since"); } catch (IllegalArgumentException var9) { ifModifiedSince = -1L; } if(ifModifiedSince < lastModified / 1000L * 1000L) { this.maybeSetLastModified(resp, lastModified); this.doGet(req, resp); } else { resp.setStatus(304); } } } else if(method.equals("HEAD")) { lastModified = this.getLastModified(req); this.maybeSetLastModified(resp, lastModified); this.doHead(req, resp); } else if(method.equals("POST")) { this.doPost(req, resp); } else if(method.equals("PUT")) { this.doPut(req, resp); } else if(method.equals("DELETE")) { this.doDelete(req, resp); } else if(method.equals("OPTIONS")) { this.doOptions(req, resp); } else if(method.equals("TRACE")) { this.doTrace(req, resp); } else { String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[]{method}; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(501, errMsg); } }

Ⅵ、根據請求的不同,service()會調用不同的方法,假設請求對應doGet()方法:

import javax.servlet.http.*;
import java.io.*;
import java.util.Date;

public class Ch1Servlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        PrintWriter out = response.getWriter();
        Date today = new Date();
        out.println("<html>" +
                "<body>" +
                "<h1 align=center>Hello Servlet</h1>"
                + "</br>" + today + "</body>" + "</html>"
        );
    }
}

Ⅶ、doGet()方法生成動態頁面,並把它寫入response裏。

Ⅷ、線程結束,容器把response對象轉換為一個HTTP響應,然後清理不再用的對象。

【Head First Servlets and JSP】筆記1