J2EE学习笔记
中國企業培訓的人民銀行-J2EE
1.HTTP超文本傳輸協定。應用層協議。
HTTP是基于請求、響應模式的,無狀態的協議。
2.HTTP1.0通信過程:client發起連接->客戶發送請求->server響應請求->server關閉連接;須要不斷建立連接,開銷大。
3.HTTP1.1通信過程(默認使用持續連接):client發起連接->客戶發送請求->server響應請求->client繼續發送請求->服務端響應->server關閉連接。
4.HTTP組成:請求行、消息包頭、請求正文。
請求行:Method?Request-URI|HTTP-Version?CRLF(回車)。
比如:GET?/test.html?HTTP/1.1?CRLF
Method包含GET/POST/HEAD等。當中HEAD僅僅返回響應消息包頭。
5.Tomcat中通過例如以下語句配置項目:
<Context?path=”/test”?docBase=”D:\test\WebRoot”?reloadable=true””/>
6.Servlet編程:寫類繼承自HttpServlet->重寫doGet、doPost->在web.xml中注冊Servlet->編寫處理函數:
resp.setContentType(“text/html”);PrintWriter?out=resp.getWriter();
out.println(“<HTML>代碼”);
7.JSP編程:在JSP中使用<%%>包括Java代碼。
8.表單提交GET/POST差別。
A.處理方式不一樣。GET加入參數在地址欄,POST加入參數在HTTP請求體中。
B.處理方法不同。doGet和doPost。
9.JSP運行過程:請求某JSP->轉換成Servlet->返回響應。
10.JSP中聲明變量為<%!?int?a=0;%>與不加!的差別:聲明的變量為成員變量。
不適用。聲明的是局部變量。
11.JSP重點內置對象:request、response、session、application。
12.JSP中的事務處理一般有JAVA?BEAN完畢。<jsp:useBean>
13.Java?Bean要求:公共的public類。含有無參構造和getter和setter。Java?Bean范圍:page、request、session、application。
14.Servlet生命周期:
A.初始化:init。
三種情況裝載Servlet:①Servlet容器自己主動裝載某些Servlet②Servlet容器啟動后。客戶首次向Servlet發出請求③Servlet類文件更新后,又一次裝載Servlet。Servlet裝載后,創建Servlet演示樣例并調用init方法初始化。整個Servlet周期中中,init僅僅調用一次。
B.請求響應階段:service。Service方法通過servletrequest獲取client請求信息、處理該請求并返回響應結果servletresponse。
C.終止階段:destroy。Web應用終止或servlet容器停止工作時,釋放占用的資源。
15.通常自己定義servlet直接集成HttpServlet就可以,這樣便不用事先service方法。Service參數為ServletRequest和ServletResponse。
16.Servlet對象創建時機:①Web客戶第一次請求servlet②設置<servlet>元素的<load-on-startup>。啟動Web應用時會依照指定順序創建servlet。
17.Servlet容器啟動Web應用時,為每一個Web應用創建一個ServletContext對象。ServletContext能夠存放共享數據:主要方法:setAttribute和getAttribute。
18.Servlet是單例的,僅僅有一個對象。
并且Servlet是多線程運行的。因此,編寫時注意多線程問題。
因此。servlet中盡量不要定義成員變量。定義成員變量easy出現多線程問題。能夠通過定義局部變量解決(局部變量屬于單個線程、統一對象成員變量可被多個線程訪問)。解決多線程同步問題方法:
A.實現javax.servlet.SingleThreadMode。這樣servlet單線程執行。
B.去除成員變量,全是用局部變量
C.是用同步代碼塊:synchronized{...}
19.Cookie的使用(Cookie從server發出。存在于client硬盤上):
Cookie?ck?=?new?Cookie(“key”,”value”);response.addCookie(ck);
Cookie?c?=?request.getCookies();
20.在servlet中使用例如以下語句請求轉發:(還是當前頁面,setAttribute的數據可以在test.jsp中取得)
request.getRequestDispatcher(“/test.jsp”).forward(request,response);
使用例如以下語句重定向:(轉到新頁面。setAttibute數據在test.jsp中不能取得,client須要發送兩次請求)
Response.sendRedirect(“test.jsp”);
21.Web跟蹤client狀態方法:
A.建立具有跟蹤數據的隱藏字段
B.重寫包括額外參數的URL
C.使用持續的Cookie
D.使用Servlet?API中的Session。
Session位于servlet容器,cookie位于client硬盤上。會話cookie位于瀏覽器進程中。
22.HttpSession接口:getId、invalidate()使當前session失效、setAttribute、getAttribute、isNew、setMaxInactiveInterval設定session處于不活動狀態的最大間隔。
23.Listener監聽器用于發生一定動作時觸發操作。
比如,HttpSessionListener監聽HttpSession的操作。創建Session時,激發sessionCreated方法;銷毀Session時,激發sessionDestroy方法。HttpSessionAttributeListener監聽HttpSession屬性操作。
Session添加屬性,激發attributeAdded方法;Session刪除屬性時,激發attributeRemoved方法;Session屬性被又一次設置時,激發attributeReplaced方法。
Servlet也有對應的監聽器。
24.Filter過濾器對servlet容器的請求和響應對象進行檢查和過濾。
Filter而已過濾的對象能夠是Servlet、Jsp或者HTML。
Filter類方法:init(初始化,讀取web.xml中過濾器的初始化參數)->doFilter(運行過濾操作)->destroy(釋放過濾器資源)。
25.EL表達式語言,用于降低JSP中的腳本:${expr}。EL默認對象:pageContext、page/request/session/application/Scope、param(請求參數)、paramValues、header、headerValues、cookie。
26.客戶化JSP標簽。使用tag標簽。降低JSP中代碼量。
創建標簽步驟:①創建標簽處理類②創建愛你標簽庫描寫敘述文件③在web.xml文件里聲明(servlet2.4以后不須要)④在JSP中引入標簽庫。
27.Struts2.1是基于請求響應模式的應用框架。主要包含:控制器、業務邏輯層和數據邏輯層。工作過程:客戶請求->過濾器->攔截器Interceptors->Action->JSP。?
28.Struts2使用過程:新建Web項目->增加structs2.0支持(commons-fileupload/commons-logging/ognl/struts2-core/xwork/freemarker.jar)->編寫處理類Action->編寫配置文件(src文件夾下structs.xml,在WEB-INFO/class中自己主動復制出一份)->在web.xml中配置struct的Filter。工作過程:請求->web.xml過濾器到structs->structs.xml->請求action->處理類action->返回標志->跳轉
29.在Action中,成員變量名跟表單名字同樣并生成getter和setter方法,struct完畢表單變量傳遞。
30.Structs類型轉換:對于常見類型。structs2從client獲取后,嘗試性的自己主動轉換成Action中定義的類型。
假設轉換不成功。拋出異常,輸出字符串。對于自己定義類型。比如輸入坐標,我們須要進行類型轉換。
定義Point類,然后在PointAction中增加Point成員變量,生成getter和setter,然后寫配置文件:PointAction-conversion.properties(待處理類包中。里面設置待處理類和處理類(繼承自DefaultTypeConverter))。最后在處理類中實現類型轉換。處理類也可繼承自StrutsTypeConverter,完畢批量轉換從待處理類和String的相互轉換。對于多個坐標,處理Action中可使用list<Point>成員變量,完畢批量轉換。
31.上面為局部轉換。針對的是每一個action。全局轉換可針對所有action。屬性文件(在src文件下。不帶包)為:xwork-conversion.properties。
32.Structs定義的狀態變量:SUCCESS/ERROR/INPUT/LOGIN/NONE.
33.Struts輸入校驗(服務端驗證)。分為編碼方式校驗和校驗框架兩部分。假設輸入信息不對,返回INPUT。
A.編碼方式:Action中重寫validate方法。Validate優先于execute。addActionError加入錯誤信息,JSP中使用<s:actionerror/>顯示錯誤。
Structs會自己主動生成field級別的校驗消息,使用<s:fielderror/>顯示。Action中新建RegisterAction.properties實現國際化。
使用structs標簽自帶錯誤輸出功能。
B.校驗框架方式:action包下定義配置文件:(Action名-validation.xml)RegisterAction-validation.xml。校驗框架分為屬性優先(field)或者校驗器優先(validator)。
首先運行類型轉換,然后是相應的校驗框架,然后是特定方法的validate(比如form的method屬性設置為test方法。action中方法為validateTest()),然后是validate方法。假設上述過程中出現錯誤,都不會運行execute方法,轉而頁面裝轉向struts.xml中input相應的頁面。
34.國際化。
命名方式:文件名稱_國家代碼_properties。位于src目錄下。
35.攔截器Interceptor:類似于過濾器。
Interceptor是structs2的核心。
須要實現方法:init、intercept(在請求前或處理后處理)、destroy方法。
定義攔截器類須要實現Interceptor接口->在structs.xml中進行配置(interceptors)->structs.xml中action引用攔截器。注意:使用自己定義攔截器后。默認攔截器不再起作用。須要加上默認的攔截器。且自己定義攔截器位于默認攔截器之上。使用攔截器<param>能夠傳值。Interceptor接口要求必須實現init、intercept和destroy方法,能夠使用AbstractInterceptor。攔截器、過濾器運行過程:interceptor1.invoke->interceptor2.invoke->validate->interceptor2返回并結束->interceptor1返回并結束。
36.Struts2提供支持文件上傳<s:form?action=”upload”?enctype=”multipart/form-data”>。
Uploadaction繼承ActionSupport。Struts默認是運行請求轉發,刷新一次就運行一次。能夠改為重定向:<result?type=”redirect”>
37.JAVA訪問數據庫方式:
A.JDBC-ODBC橋加ODBC驅動程序。ODBC驅動提供JDBC訪問。
B.本地API:部分用Java編寫的驅動程序。
C.JDBC網絡純Java驅動。將驅動轉換為與DBMS無關的網絡協議。
D.本地協議純Java驅動程序。
與DBMS有關的網絡協議。
數據庫連接的一般過程:
加載JDBC驅動程序->定義連接URL->建立連接->創建Statement_>運行查詢或者更新->結果處理->關閉連接。
Class.forname(“oracle.jdbc.driver.OracleDriver”);//加載驅動
DriverManager類getConnection用于建立連接
Connection類的close方法用于關閉數據庫連接
Connection的createStatement發送SQL語句。使用Statement對象{statement、preparestatement、CallableStatement},經常用法executeQuery、executeUpdate和close。
Preparestatement能夠用?預留參數;callablestatement提供存儲過程支持。
38.應用程序的分層:四層{表述層structs、業務邏輯層、持久化層Hibernate、數據庫層};spring能夠管理前三層。
39.數據庫知識:
A.主鍵。代理主鍵機制,代理主鍵不代表業務。不會被改變。
B.表與表之間的參照完整性連接表表示多對多。一對多用外鍵。
40.ORM模式:對象-關系映射。在單個組件中負責全部實體域對象的映射。類與表相應,演示樣例與表中記錄相應。MVC模式;DAO模式:Data?Access?Object。
41.使用Hibernate步驟:創建Hibernate配置文件->創建持久化類->創建對象-關系映射文件->通過HibernateAPI編寫數據庫訪問代碼
42.MyEclipse加入Hibernate功能時,須要更改默認選項,加入jar文件到WEB-INF/lib下。hibernate.cfg.xml配置:
| <session-factory> <property?name=”connection.url”>jdbc:mysql://localhost:3306/hibernate?/> <property?name=”connection.username”>root?/> <property?name=”connection.password”>root?/> <property?name=”connection.driver_class”>com.mysql.jdbc.Driver?/> <property?name=”connection.dialect”>org.hibernate.dialect.MySQLDialect?/> </session-factory> |
數據庫建表person->針對這張表新建持久化類com.hibernate.model.Person{1.須要getter和setter.2.須要id屬性,稱之為OID(對象標示符).3.提供默認構造}->編寫映射文件Person.hbm.xml,放到src下而不是包下:(用hib內置的編輯器打開)
| <class?name=”com.hibernate.model.Person”?table=”person”> <id?name=”id”column=”id”?type=”int”> ????<generator?class=”increment”/>//主鍵id的生成方式 </id> <property?name=”username”?column=”username”?type=”string” ... </class> |
在主配置文件hibernate.cfg.xml中配置:<mapping?resource=”Person.hbm.xml”/>
43.Hibernate提供的SQL操作類:
A.Configuration:配置數據庫。
B.SessionFactory:創建session。一個SessionFactory相應于一個數據庫存儲源,它是線程安全的(可被多個線程訪問),重量級的。能夠理解為一個SessionFactory相應于一個數據庫。
C.Session:相當于以此數據庫操作過程。Session不是線程安全的。輕量級的。可理解為一次數據庫sql運行過程。
此session非彼session!經常用法:sava、update、delete、get
D.Transation:事務處理。
44.可編寫HibernateUtil類完畢對session的操作(靜態SessionFactory、靜態代碼塊處理sessionFactory)。
45.編寫DBPerson處理數據庫和Person對象。Hql針對的是類對象而言(select?*?form?Person,Person是類不是表 ),sql針對的是數據庫。
46.數據庫中的blob類型用于存二進制文件。Hibernate的xml中用binary轉換,持久化類用byte[]轉換。
?
47.1對多關系雙向關聯關系(就2個),多的通過外鍵參照1的那一方。使用key元素設置外鍵。Cascade的理解:1的那份保存,然后依照外鍵所有保存多的。
48.1對多雙向自身關聯關系(樹形結構,子類1對1父類,子類1對n孫類),比如Category{private?Long?id;private?String?name;private?Category?parentCategory;//父?private?Set?childCategories;//子類別}。數據庫表中使用有三個字段:id、name和parentID(外鍵,指向本身的ID)。
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
轉載于:https://www.cnblogs.com/gcczhongduan/p/4644456.html
總結