【Head First Servlets and JSP】筆記1

來源:互聯網
上載者:User

標籤:stat   out   生命週期   tps   this   pre   and   hello   對象   

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.