CGI: html
CGI(Common Gateway Interface) 是WWW技術中最重要的技術之一,有着不可替代的重要地位。CGI是外部應用程序(CGI程序)與Web服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞信息的規程。CGI規範容許Web服務器執行外部程序,並將它們的輸出發送給Web瀏覽器,CGI將Web的一組簡單的靜態超媒體文檔變成一個完整的新的交互式媒體。 java
ODBC: web
開放數據庫互連(Open Database Connectivity,ODBC)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它創建了一組規範,並提供了一組對數據庫訪問的標準API(應用程序編程接口)。 數據庫
1997年,Sun公司退出了Servlet規範,java有了web開發的利器.1998年JSP技術產生,Servlet,JSP加上javaBean讓javaweb開發同時擁有了CGI的集中處理能力和PHP的嵌入html的功能.1998年Sun公司發佈了EJB1.0的規範,99年Sun發佈J2EE的第一個版本.2001年微軟提出了ASP.NET技術. apache
Servlet容器爲javaweb應用提供運行時環境,它負責管理servlet和JSP的聲明週期,以及管理他們的共享數據.也稱javaweb的應用容器. 編程
目前最流行的servlet容器軟件有:Tomcat(apache),Resin,J2EE服務器(Weblogic,websphere,jboss)也內置了Servlet容器,EJB. 瀏覽器
Servlet在Web應用中擔任重要角色。Servlet運行於Servlet容器中,能夠被Servlet容器動態加載,來擴展服務器的功能,並提供特定的服務。Servlet按照請求/響應的方式工做。在Struts和Tapestry框架中,控制器組件就是由Servlet來構成的。 服務器
當用戶請求訪問某個Servlet時,Servlet容器將建立一個ServletRequest對象和ServletResponse對象。在ServletRequest對象中封裝了用戶請求信息,而後Servlet容器把ServletRequest對象和ServletResponse對象傳給用戶所請求的Servlet。Servlet把響應結果寫入ServletResponse中,而後由Servlet容器把響應結果傳給用戶。 session
Serlet容器響應用戶請求的過程:
app
在Java Servlet API中有如下幾個比較重要的類,它們決定了Web應用的請求/響應方式及各類共享數據的存放地點:
HttpServletRequest: Servlet容器把HTTP請求信息包含在HttpServletRequest對象中,Servlet組件從request對象中讀取用戶的請求數據。此外,HttpServletRequest能夠存放request範圍內的共享數據。 HttpServletResponse:用戶生成HTTP響應結果。
HttpSession : Servlet容器爲每一個HTTP會話建立一個HttpSession實例,HttpSession能夠存放session範圍的共享數據。
ServletContext: Servlet容器爲每一個Web應用建立一個ServletCntext實例,ServletCntext能夠存放application範圍的共享數據。
在傳統的HTML文件中加入Java程序片斷和JSP標籤,就構成了JSP網頁。
當JSP容器接收到Web用戶的一個JSP文件請求時,它對JSP文件進行語法分析並生成Java Servlet源文件,而後對其編譯。通常狀況下。Servlet源文件的生成和編譯僅在初次調用JSP時發生。若是原始的JSP文件被更新,JSP容器將檢測所作的更新,在執行它以前從新生成Servlet並進行編譯。
JSP容器初次執行JSP的過程:
共享數據有4中存在範圍。
Page:共享數據的有效範圍是用戶請求訪問的當前頁面。
Request:共享數據的有效範圍爲「用戶請求訪問的當前Web組件,以及和當前Web組件共享同一個用戶請求的其餘Web組件。」若是用戶請求訪問的是JSP網頁,那麼該JSP網頁的<%@include>指令以及<forward>標記所包含的其餘JSP文件也能訪問共享數據。Request範圍內的共享數據實際上存放在HttpServletRequest對象中。
Session:共享數據存在於整個HTTP會話的生存週期內,同一個HTTP會話中的Web組件共享它。Session範圍內的共享數據其實是存放在HttpSession對象中。
Application:共享數據存在月整個Web應用的生命週期內,Web應用中的全部Web組件都能共享它,共享數據實際上存放在ServletCntext對象中。
共享數據在Web應用中的範圍:
當客戶第一次訪問Web應用中支持會話的某個網頁時們就會開始一個新的HTTP會話,Servlet容器爲這個會話建立一個HttpSession對象。接下來,當客戶瀏覽這個Web應用的不一樣網頁時,始終處於同一個會話中。會話擁有特定的生命週期。在如下狀況中,會話將結束生命週期,Servlet容器會將HTTP會話所佔有的資源釋放掉:
客戶端關閉瀏覽器
會話過時
服務器端調用了HttpSession的invalidate()方法
JavaBean是一種符合特定規範的JAVA 對象。在JAVABean中定義了一系列的屬性,並提供了訪問和設置這些屬性的公用方法。JavaBean能夠做爲共享數據,存放在page,request,session,application範圍內。在JSP文件中,能夠經過專門的標籤來定義和範圍JavaBean。如
<jsp:useBean id="calendar" scope="page/request/session/application" class="employee.Calendar" /> <h2>Calendar of <jsp:getProperty name="calendar" property="username" /></h2>
EJB組件是基於標準分佈式對象技術,CORBA和RMI的服務端JAVA組件,EJB組件和JavaBean組件同樣,都用於實現企業應用的業務邏輯,它們的根本區別在於,EJB組件老是分佈式的,EJB組件運行於EJB服務器中,而JavaBean組件能夠和Servlet或JSP運行於同一JAVA虛擬機中。
請求轉發
URL重定向
包含
請求轉發容許把請求轉發給同一應用中的其餘Web組件。這種技術一般用於Web應用控制層的Servlet流程控制器,它檢查HTTP請求數據,並將請求轉發到合適的目標組件,目標組件執行具體的請求處理操做,並生成響應結果。
一個Servlet把請求轉發給另外一個JSP組件的過程:
若是在Servlet組件轉發請求給一個JSP組件,能夠在Servlet的service()方法中執行如下代碼:
RequestDispatcher rd = request.getRequestDispatcher(「hello.jsp」); Rd.forward(request.response);
若是在JSP頁面中,能夠使用<jsp:forward>標籤來轉發請求,例如:
<jsp:forward page=」hello.jsp」/>
對於請求轉發,轉發的源組件和目標組件共享request範圍內的數據。
請求重定向相似請求轉發,可是有一些重要區別:
Web組件能夠將請求重定向到任一URL,而不進進是同一應用中的URL。
重定向的元組件和目標組件之間不共用同一個HttpServletRequest對象,所以不能共享request範圍內的共享數據。
顯示一個Servlet把請求重定向給另外一個JSP組件的過程:
若是當前應用的Servlet組件要把請求轉發給URL。能夠在Servlet的service方法中執行:
response.sendRedirect(URL);
包含關係容許一個Web組件彙集來自同一個應用中的其餘Web組件的輸出數據,並使用被彙集的數據來建立響應結果。這種技術一般用於模板處理器,它能夠控制網頁的佈局。模板中每一個頁面區域的內容都來自不一樣的URL,從而組成單個頁面。
顯示了一個Servlet包含另外一個JSP組件的過程:
Servlet類使用javax.servlet.RequestDispatcher.include()方法包含其餘的Web組件。
例如,若是當前餓Servlet組件包含了三個JSP文件:header.jsp,main.jsp和 footer.jsp,則在Servlet的service()方法中執行以下代碼:
RequestDispatcher rd; Rd=req.getRequestDispatcher(「/header.jsp」)); Rd.include(req,res); Rd=req.getRequestDispatcher(「/main.jsp」)); Rd.include(req,res); Rd=req.getRequestDispatcher(「/footer.jsp」)); Rd.include(req,res);
在JSP文件中,能夠經過<include>指令來包含其餘的Web資源,例如:
<%@ include file=」header.jsp」%> <%@ include file=」main.jsp」%> <%@ include file=」footer.jsp」%>
參考: http://maymay.iteye.com/blog/1278961
20150618
JAVAWEB學習筆記系列
--------------------------------------------
聯繫方式
--------------------------------------------
Weibo: ARESXIONG
E-Mail: aresxdy@gmail.com
------------------------------------------------