- Tomcat就是一個實作Container的範例
- Container開機的時候,載入你寫的Servlet class並初始化
- 當Apache(Web Server)收到針對動態網頁的request時,將會交由負責此servlet的Container處理
- Container會將HttpServletRequest object & HttpServletResponse object交給Servlet thread
- 呼叫執行Servlet的service()內doGet()或是doPost()的method(基於HTTP Request的method)
- Apache Tomcat是用來deploy Java Servlet, JSP。當Java project build成為WAR檔,就可以直接將此檔丟到Tomcat以便deploy。是用來服務Servlet&JSP Server
使用Container的五大項優點(因為以下的事項,更能夠集中精神專注於商業邏輯的開發)
- 與Web Server溝通取得request(因此不需要實作Listener, stream, ServerSocket...)
- 控制Servlet的生命週期,initialization, call method,... 適時的將instance GB。透過Container 則不需要擔心資源管理
- 當多個request進入時,Container會自行建立thread來處理此請求,當此servlet執行為service() method時,thread就會結束。但synchronize的事情還是得自己處理
- 可調整web.xml來設定哪些群組能夠讀取哪些網頁,是否需要login機制,welcome html page等寫在內,可以不透過修改Java程式達到這些目的
- 能夠將JSP轉成真實的Java檔案
Container處理HTTP request steps
- 使用者點擊非靜態網頁的超連結
- container收到後,建立HttpServletRequest object & HttpServletResponse object
- 根據web.xml之URL及真實Servlet位置對應找出此Servlet後,會將上述object交由Servlet thread
- 呼叫Servlet內的service(),且根據request method,service()執行呼叫doGet()或是doPost()
- thread產生的動態頁面,將會放入 HttpServletResponse object
- 因container保有此HttpServletResponse object的reference,所以能夠將此response轉換成HTTP response,接著刪除HttpServletRequest object & HttpServletResponse object
以下Servlet範例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import javax.servlet.*; import javax.servlet.http.*; public class Ch1Servlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); Date today = new Date(); writer.println("<html>"+ "<body>" + "<h1 align=center>HF's Chapter Servlet</h1>" + "<br>" + today + "</body>" + "</html>"); } } |
沒有留言:
張貼留言