因為太長時間沒有做java web開發(fā)了,所以寫這邊隨筆用來簡單回顧一下jsp/java web的相關(guān)知識
1.tomcat中server.xml,<Context>表示一個web應(yīng)用上下文路徑;
docBase:指明一個Web應(yīng)用所在的物理文件夾名
path:定義Web應(yīng)用的上下文路徑名,上下文路徑第1個字符一般為“/”。
reloadable:此屬性取值為“true”時,表示讓Catalina監(jiān)控Web應(yīng)用中WEB-INF\classes文件夾和WEB-INF\lib文件夾下文件的變化
2.tomcat默認(rèn)的虛擬主機是localhost,它默認(rèn)的Web應(yīng)用發(fā)布文件夾是webapps。在此文件夾下發(fā)布的Web應(yīng)用通過URL即可直接訪問,不需要在<Context>中進行配置
3.Servlet將java代碼與網(wǎng)頁設(shè)計混合寫在一起,不利于維護。JSP網(wǎng)頁版面的設(shè)計與維護,比Servlet要直觀和容易。JSP頁面最終會被JSP服務(wù)器編譯成一個Servlet程序來運行。
4.JSP采用“先編譯后執(zhí)行”的工作方式。一個JSP網(wǎng)頁首次被訪問時,Web服務(wù)器執(zhí)行編譯操作.(多線程運行)
5.<% 符合Java語言的Java語句 %>
6.jsp執(zhí)行過程:
servlet
request->*.jsp->jsp parser->*.java->jsdk(servlet分析器)->*.class->執(zhí)行->response
7.html注釋<!-- --> jsp注釋<%-- --%>
jsp聲明<%!...%>,聲明后的變量,方法或類都是jsp編譯后的Servlet的類內(nèi)成員
8.Tomcat把<% %>標(biāo)記內(nèi)的Java代碼段放在Servlet實現(xiàn)類 _jspService()方法的try{}內(nèi),所以在<%%>內(nèi)定義的變量屬于局部變量,并且作用范圍僅限于try{}內(nèi)。如果有多個<% %>標(biāo)記,則按出現(xiàn)的先后順序轉(zhuǎn)譯到try{}內(nèi)。
9.jsp表達式<%= expression %>,編譯后Servlet為:out.println(expression);
10.jsp指令元素<%@ 指令元素 屬性="值" %>,主要包括三個:include、page和taglib;主要供JSP容器使用,為JSP容器提供相關(guān)的頁面屬性信息,用于指示JSP容器如何正確地翻譯代碼,或者執(zhí)行特定的操作
include:文件包含,是在JSP容器把JSP網(wǎng)頁翻譯成Servlet程序時,將指定文本文件的內(nèi)容嵌入Servlet程序中,替換include指令
<%@ include file="" %> 靜態(tài)綁定
page:用于設(shè)置當(dāng)前JSP頁面的屬性
默認(rèn)情況下已經(jīng)被加入到當(dāng)前JSP頁面的類,包括java.lang.*;、java.servlet.*;、java.servlet.jsp.*; java.servlet.http.*;
isThreadSafe,表示生成的servlet是否是線程安全的;如果true的話,表示線程安全,JSP容器會以多線程方式運行JSP頁面
11.jsp動作組件:JSP動作組件是一些XML語法格式的標(biāo)記,被用來控制Web容器的行為
<jsp:include>動態(tài)包含
<jsp:forward>使程序從當(dāng)前頁面跳轉(zhuǎn)到另一個目標(biāo)頁面運行,瀏覽器地址欄不會發(fā)生任何變化;forward動作語句后的代碼不能執(zhí)
行(已經(jīng)帶著request請求跳轉(zhuǎn)到其他頁面了)
<jsp:param>,用來用于傳遞參數(shù)信息
<jsp:plugin>,插入一個applet或Bean
< jsp:setProperty>:設(shè)置JavaBean的屬性
< jsp:getProperty>:輸出某個JavaBean的屬性
< jsp:useBean>:尋找或者實例化一個JavaBean
12 jsp隱含對象
簡化程序設(shè)計,JSP規(guī)范定義了常用的8個隱含對象(implicit objects),這些隱含對象不需要在JSP頁面中用new關(guān)鍵字來創(chuàng)建,而是
由Servlet容器來創(chuàng)建與管理,并傳遞給JSP頁面的Servlet實現(xiàn)類使用。
out(JspWriter),requeset(HttpServletRequest),response(HttpServletResponse),session(HttpSession),application(ServletContext),
exception(Throwable),config(ServletConfig),page(Object),pageContext(PageContext)
out.print()/out.println();out.write()?PrintWriter?
request.getParameter()/getParameterNames()/getParameterValues()/
兩個JSP/Servlet程序間要交換數(shù)據(jù)時,可通過request作用范圍變量來實現(xiàn)(getAttribute/setAttribute)
[forward方式跳轉(zhuǎn),會傳遞request,超鏈接與在瀏覽器地址欄輸入該頁面地址的訪問方式一樣,都是重新發(fā)送一個請求到鏈接頁面]
getRequestDispatcher("''),轉(zhuǎn)發(fā)器,獲得目標(biāo)資源的轉(zhuǎn)發(fā)器,通過轉(zhuǎn)發(fā)器將當(dāng)前Servlet程序的request和response對象轉(zhuǎn)發(fā)給目標(biāo)資源,并跳轉(zhuǎn)至目標(biāo)資源上運行程序,這樣,目標(biāo)資源就可通過request對象讀取上一資源傳遞給它的request屬性
removeAttribute()/setCharacterEncoding()/getProtocol/getRemoteAddr()/
response.flushBuffer()/setBufferSize()/getWriter(PrintWriter)/setContentType()/setCharacterEncoding()/sendError()/setHeader()/sendRedirect("")/
response通過文件輸出流實現(xiàn)下載
application對象被同一個上下文(同一個web應(yīng)用)中的所有jsp/servlet程序共享,tomcat服務(wù)器開啟的時候即被創(chuàng)建;
application訪問web.xml中配置的<Context-param>/getInitParameter("")/attribute相關(guān)方法/log()/
config常用于給一個Servlet程序傳送初始化參數(shù)
exception,JSP頁面在運行時發(fā)生異常,系統(tǒng)會生成一個異常對象
page對象表示“當(dāng)前”Servlet程序?qū)ο螅愃朴贘ava中的“this”關(guān)鍵字
pageContext獲取其他隱含對象/轉(zhuǎn)發(fā)跳轉(zhuǎn)或包含
13 會話跟蹤-
Cookie/response.addCookie()/request.getCookies()/
URL重寫實現(xiàn)參數(shù)傳遞/隱藏表單域?qū)崿F(xiàn)參數(shù)傳遞/
HTTP協(xié)議是一種無狀態(tài)的協(xié)議,客戶端每次打開一個Web 頁面,它就會與服務(wù)器建立一個新的連接,發(fā)送一個新的請求到服務(wù)器,服務(wù)器處理客戶端的請求,返回響應(yīng)到客戶端,并關(guān)閉與客戶端建立的連接。當(dāng)客戶端發(fā)起新的請求,那么它重新與服務(wù)器建立連接,因此服務(wù)器并不記錄關(guān)于客戶的任何信息。
session-session會話,通常把從登錄進入系統(tǒng)到注銷退出系統(tǒng)之間所經(jīng)歷的時間,稱為一次session通信周期;jsp中的Session會話:一次會話由客戶打開一個瀏覽器開始到關(guān)閉瀏覽器或退出會話結(jié)束,用戶重新打開1個瀏覽器并重新輸入url,或訪問2個web應(yīng)用都是開啟不同的會話;session隱含對象由Web服務(wù)器創(chuàng)建,并存儲在服務(wù)器端;一次會話會創(chuàng)建一個session對象,在一次會話期 間,web應(yīng)用內(nèi)的所有程序共享一個session對象
attribute相關(guān)方法/isNew()/getId()/invalidate()/setMaxInactiveInterval()/
14 Servlet/ServletConfig/->GenericServlet->HttpServlet
servlet工作流程-(1)客戶機將請求發(fā)送到服務(wù)器。
(2)服務(wù)器上的Web容器實例化Servlet。
(3)Web容器將請求信息發(fā)送到 Servlet。
(4)Servlet 創(chuàng)建一個響應(yīng),并將其返回到Web容器。
(5)Web容器將響應(yīng)發(fā)回客戶機。
(6)服務(wù)器關(guān)閉或Servlet空閑時間超過一定限度時,調(diào)用destory()方法退出。
生命周期-創(chuàng)建實例->init()->service()->destroy()
init()-兩種方式init()/init(ServletConfig config){super.init(config)}
sevice(HttpServletRequest req,HttpServletResponse resp)
Servlet體系結(jié)構(gòu)是建立在Java多線程機制之上的,當(dāng)兩個或多個線程同時訪問同一個Servlet時,可能會發(fā)生多個線程同時訪問同一資源的情況,數(shù)據(jù)可能會變得不一致。對于Servet中成員變量,并發(fā)訪問時需要采取線程同步的措施確保線程安全
destroy()-服務(wù)器刪除servlet實例調(diào)用,程序員可以覆寫它完成,關(guān)閉數(shù)據(jù)庫連接等清理工作
15.Servlet API-javax.servlet和javax.servlet.http
javax.servlet.GenericServlet--獨立于協(xié)議
javax.servlet.HttpServlet,--嵌入了對Http協(xié)議的支持
把數(shù)據(jù)傳遞給客戶端
在Servlet中,可以通過直接向輸出流寫入數(shù)據(jù)來生成HTML頁面;使用PrintWriter把數(shù)據(jù)發(fā)送回客戶端
PrinteWriter out=response.getWriter();out.println(“<HTML>Inside HTML</HTML>”);
在開始進行任何輸出之前,必須使用setContentType()方法指定MIME類型
response.setContentType(“text/html,charset=gb2312”);
16.訪問servlet,需要在web.xml進行配置
1
<servlet>
2
<servlet-name>First</servlet-name>
3
<servlet-class>com.servlet.FirstServlet</servlet-class>
4
</servlet>
5
<servlet-mapping>
6
<servlet-name>First</servlet-name>
7
<url-pattern>/first</url-pattern>
8
</servlet-mapping>
9
17.WEB-INF\classes目錄存放Servlet類文件
WEB-INF\lib目錄存放Web應(yīng)用程序所使用的Java庫文件(JAR文件)
18.web.xml中<servlet>定義的<init-param>可以通過servlet的getInitParameter()方法或者getServletConfig().getInitParameter()方法
19.過濾器Filter鏈?zhǔn)?/span>
request->filter1->filter2....->目標(biāo)資源
response <- ..filter<-
javax.servlet.Filte接口
init()
1
doFilter(ServletRequest request, ServletResponse response,FilterChain chain)過濾器的業(yè)務(wù)邏輯代碼在doFilter()方法內(nèi)實現(xiàn)
2
{
程序段1
3
chain.doFilter(request, response);
4
程序段2
5
}
destroy()
javax.servlet.FilterConfig接口
javax.servlet. FilterChain接口
web.xml配置
1
<filter>
2
<filter-name>
3
<filter-class>
4
<init-param>
5
</filter>
6
<filter-mapping>
7
<filter-name>
8
<url-pattern>//需要過濾的url
9
<dispatcher>//過濾請求類型
10
</filter-mapping>
過濾器的過濾執(zhí)行次序與他在web.xml中定義的次序一致
20 偵聽器主要偵聽Servlet容器中的事件,所偵聽的事件發(fā)生后,容器激活偵聽器,執(zhí)行預(yù)定的操作。偵聽器偵聽的事件主要是JSP
隱含對象application、session、request對象上發(fā)生的事件,主要有隱含對象的創(chuàng)建與銷毀事件,相關(guān)作用范圍變量的創(chuàng)建、修改和銷
毀事件。
web.xml:
1
<listener>
2
<listener-class>
3
</listener>
javax.servlet.ServletRequestListener接口,主要偵聽request隱含對象的創(chuàng)建與銷毀事件
ServletRequestAttributeListener接口,偵聽request屬性的變化
javax.servlet.http.HttpSessionListener接口,偵聽上下文中session對象的創(chuàng)建與銷毀事件
javax.servlet.http. HttpSessionAttributeListener接口,偵聽session屬性的變化
javax.servlet.ServletContextListener接口,偵聽Web應(yīng)用Sevlet上下文的初始化事件和銷毀事件
javax.servlet.ServletContextAttributeListener接口 ,偵聽application屬性事件
21.JavaBean
javabean即pojo類,plain old java objects,簡單的java對象
jsp中使用JavaBean
1.<% %>內(nèi)new
2.jsp動作<jsp:useBean><jsp:setProperty><jsp:getProperty>
注意userBean中class(找不到則創(chuàng)建新的)和type的區(qū)別,還有scope
利用外部的javabean,文件上傳,email,poi等
22.數(shù)據(jù)庫訪問-jdbc
tomcat\conf\context.xml中配置數(shù)據(jù)庫連接池<Context>
javax.sql.DataSource
1
java.sql.Blob blob = rs.getBlob("");
2
byte[] bytes = blob.getBytes(,);
23.MVC
struts1.x
controller-ActionServlet/Action
struts-config.xml
ActionServlet讀取Struts-config.xml中的ActionMapping對象,每個ActionMapping對象實現(xiàn)了一個請求到一個Action對象之間的映
射。Action對象會調(diào)用javabean完成業(yè)務(wù)操作.
流程:login.jsp->submit->login.do->web.xml->servlet(ActionServlet,struts自帶)->讀取struts-config.xml->action/actionform
(表單bean)->execute()
24.EL與JSTL
EL表達式引入EL表達式語言目的之一是為JSP頁面計算;訪問和打印數(shù)據(jù)提供方便,盡可能減少JSP頁面中的Java代碼,使JSP頁
面更簡潔、更易于開發(fā)和維護
EL表達式語言的基本語法為: ${表達式}
EL表達式通過“.”算符訪問JavaBean中的屬性,${JavaBean名.屬性名}
JSTL的全稱是JSP標(biāo)準(zhǔn)標(biāo)記庫(JSP Standard Tag Library,JSTL),它是SUN公司為簡化JSP頁面設(shè)計而提出的一種技術(shù)規(guī)范;
*.properties文件稱為資源文件,在資源文件中,以“key=value”的形式存儲一個變量及它的值,一行寫一對“key=value”;方便消息的集中存儲和管理 ;方便消息的國際化
posted on 2011-12-26 23:20
landon 閱讀(2727)
評論(4) 編輯 收藏 所屬分類:
Program