说说Javaweb 服务器与Tomcat源代码解析
Javaweb 服務器機制:
servlet 是javaweb的請求和響應的出入口,所以javaweb開發必定基于支持servlet,或者有servlet容器,如jetty,tomcat,weblogic服務器。
servlet運行起來就是web applicaiton,其在容器中就是一個個對象,當然web 服務器中的servlet容器在創建一個個servlet對象的時候,也會創建相應的其他對象,這些對象就是servlet環境對象(如上圖所示)。如同你創建一個window,那么系統也會創建服務于這個window的事件監聽的對象,繪制對象等。這對象里面的數據包含servlet上下文,狀態,請求參數等。
servlet啟動過程總創建這些對象,一個請求過來首先從web.xml中依據反射創建servlet對象,先是init() 創建 application對象,context對象,request,response對象,然后就是init(Config config)創建config對象和。接著就是創建session,out對象等。請求具體調用對象的get()或者post方法。
請求參數可以存儲在request對象中,或者servlet執行的數據結果也可以放入在request對象中,當然也可以放入在config對象中。然后在頁面中可以通過<%request.get(key,value)%>拿到處理后的數據。
jsp與servlet的關系:
使用Servlet產生動態網頁,需要在代碼中打印輸出很多HTML的標簽,此外,在Servlet中,我們不得不將靜態現實的內容和動態產生內容的代碼混合在一起。使用Servlet開發動態網頁,程序員和網頁編輯人員將無法一起工作,因為網頁編輯人員不了解Java語言,無法修改Servlet代碼,而Java程序員可能也不是很了解網頁編輯人員的意圖,以至于無法修改和實現網頁功能。為了解決這些問題,Sun公司就推出了JSP技術。
如:
//用于響應用戶的方法 public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; //獲得頁面輸出流 javax.servlet.jsp.JspWriter out = null; final java.lang.Object page = this; javax.servlet.jsp.JspWriter _jspx_out = null; javax.servlet.jsp.PageContext _jspx_page_context = null; //開始生成響應 try { //設置輸出的頁面格式 response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); //頁面輸出流 out = pageContext.getOut(); _jspx_out = out; //輸出流,開始輸出頁面文檔 out.write("<html>\r\n"); out.write("<body>\r\n"); out.write("<center> \r\n"); out.write("Now time is: "); out.print(new java.util.Date()); out.write(" \r\n"); out.write("</center>\r\n"); out.write("</body>\r\n"); out.write("</html>"); } catch (java.lang.Throwable t) { if (!(t instanceof javax.servlet.jsp.SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); else throw new ServletException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } }JSP文件必須在JSP服務器內運行。JSP文件必須生成Servlet才能執行。每個JSP頁面的第一個訪問者速度很慢,因為必須等待JSP編譯成Servlet。JSP頁面的訪問者無須安裝任何客戶端,甚至不需要可以運行Java的運行環境,因為JSP頁面輸送到客戶端的是標準HTML頁面。index.jsp頁面中的每個字符都由index.java文件的輸出流生成。servlet是在web服務器上的java程序,它提供服務,由它來傳遞給你html的格式。Servlet API為Servlet提供了統一的編程接口,Servlet必須部署在Servlet容器,才能響應客戶端的請求 ?對外提供服務。要對外統一接口,由容器來調用。jsp側重顯示,servlet側重控制邏輯。
事實上,JSP是Servlet的一種特殊形式,每個JSP頁面就是一個Servlet實例——JSP頁面由系統編譯成Servlet,Servlet再負責響應用戶請求。JSP其實也是Servlet的一種簡化,使用JSP時,其實還是使用Servlet,因為Web應用中的每個JSP頁面都會由Servlet容器生成對應的Servlet。對于Tomcat而言,JSP頁面生成的Servlet放在work路徑對應的Web應用下。
Tomcat 代碼框架:
總結
以上是生活随笔為你收集整理的说说Javaweb 服务器与Tomcat源代码解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360 将推千亿级大语言模型 360GL
- 下一篇: Java顶尖程序员需要看的书