web開發基礎

<%--  --%>該註釋不會顯示在客戶端,
<!--  -->該註釋會顯示客戶端
JSP內置對象之get和post的比較
1、get:以明文的方式通過URL提交數據,數據在URL中可以看到,提交的數據最多不超過2KB,安全性低但效率高。適合提交數據量不大,安全性不高的數據,比如:搜索,查詢等功能
2、post:將用戶提交的信息封裝在html header內,適合提交數據量大,安全性高的用戶信息。比如:註冊,修改,上傳等功能
JSP之請求重定向和請求轉發比較
1、請求重定向:客戶端行爲,response.sendRedirect(),從本質上講等同於兩次請求,前一次的請求對象不會保存,地址欄的URL地址會改變
2、請求轉發:服務器行爲,request.getRequestDispathcher().forward(requset,response);是一次請求,轉發後請求對象會保存,地址欄的URL地址不會改變
JSP的session對象
session表示客戶端與服務器的一次會話
session是指用戶在瀏覽某個網頁時,從進入網站到瀏覽器關閉這段時間內,也就是用戶瀏覽這個網站所花費的時間。
session實際上就是一個特定的時間概念

保存用戶的狀態量大機制

session和cookie

cookie的作用
1、對特定對象的追蹤
2、保存用戶網頁瀏覽記錄和習慣
3、簡化登錄

session和cookie對比


session是在服務端保存用戶信息
session保存的是Object類
session隨會話的結束而將其存儲的數據銷燬
session一般保存重要的信息

cookie實在客戶端保存信息
cookie保存的是String類型
cookie可以長期保存在客戶端
cookie一般保存不重要信息
使用URLEncoder.encode來指點編碼,用URLEmcoder.decoder來解碼
如果使用<jsp:forward>跳轉之後,有如下特點:
          1.  服務端跳轉,跳轉之後地址欄不改變
          2.屬於無條件的跳轉。跳轉之前的語句會執行,而跳轉之後的語句將不會執行,那麼如果現在在jsp中使用了JDBC的話,很明顯必須在跳轉之前進行數據庫的關閉,否則數據庫就再也無法關閉了。
 如果使用response.sendRedirect()跳轉的話,有如下特點:
         1.客戶端跳轉,地址欄發生了改變
        2.跳轉是在所有語句都執行完之後才完成的操作
         3.還要注意的一點就是這個跳轉不可以傳遞request屬性,也就是說不可以傳遞參數,request也無法取得參數值。
include指令和include動作比較
包含的內容不同:include指令包含的是文件的實際內容,二include動作包含的是頁面的輸出結果
轉成的servlet不同:include指令是將主頁面和包含頁面轉換成爲一個servlet
include動作是將主頁面和包含的頁面轉換爲獨立的servlet

創建servlet三步驟
 *1、繼承HTTPServlet
 *2、重寫doget(),dopost()方法
 *3、配置web.xml
j2ee6.0,servlet3.0以上可用註解方式,簡單
關於查看系統API缺少資源的問題,提示說需要導入缺少的jar包,其中該jar包是source或者src的jar包
有時候web網頁跳轉不正常,需要重啓tomcat服務器
路徑:servlet:可絕對可相對(有/,無/)
web.xml: 必須帶/
日期類型與字符串類型的轉換:
採用SimpleDateFormat類進行轉換,具體方法如下。
1、定義SimpleDateFormat對象 SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
2、字符串轉換成日期數據:Date d = sdf.parse("日期字符串");

日期數據轉換成日期字符串:String sd = sdf.format(日期變量);


重寫equals()方法必須重寫hashcode()方法
儘量保證使用對象的同一個屬性來生成hashCode()和equals()兩個方法。在我們的案例中,我們使用員工id。
eqauls方法必須保證一致(如果對象沒有被修改,equals應該返回相同的值)
任何時候只要a.equals(b),那麼a.hashCode()必須和b.hashCode()相等。
兩者必須同時重寫


設計模式之單例模式

單利模式之一餓漢模式:類加載的時候便進行了創建
1、將構造方法私有化,不允許外部直接創建對象
2、構造方法用private修飾,用static靜態創建一個對象,創建一個獲取對象的static方法
單例模式之二懶漢模式:懶漢模式也就是將實例化代碼new 放在了獲取實例的類方法中。延緩了實例化的進度,也體現了封裝。
單例模式
1:餓漢模式,加載慢,獲取快,線程安全
2:懶漢模式,加載快,獲取慢,線程不安全
單列模式分爲:
餓漢式:聲明的同時直接實例化。 特點:加載類時比較慢,但運行時獲取對象的速度比較快,線程安全。
懶漢式:聲明的時候不實例化。 特點:加載類時比較快,但運行時獲取對象的速度比較慢,線程不安全。
實現單列模式的三個步驟:
1、將構造方法私有化,不允許外界直接創建對象。
2、聲明類的唯一實例,使用private static修飾。
3、提供一個供外界獲取實例的方法,使用public static修飾。

  類內部  本包 子類 外部包 
 public  √  √
 protected  √  √ ×
 default  √  √ × ×
 private  √  × × ×
修改web項目的名稱後要相應的在properties中修改myeclipse的web中context-root的路徑,改成修改後的web項目名稱
ServletContext、HttpSession、ServletRequest對象的中屬性的增加和刪除有單獨的事件監聽器
XXAttributeListner

監聽的事件包括
attributeAdded()
attributeRemoved()
attributeReplaced()
request.getAttribute的值獲得是從request.setAttribute的值
request.getParameter是請求的參數值
在寫CountPeople計算在線人數,且獲取ip的demo時,每次部署項目前都得停止當前項目,然後開啓。restart項目獲取不到當前在線人數
OutputStream os = new FileOutputStream(filename,true);//true表示每次是追加;false表示每次覆寫

守護線程:一般運行於後臺,爲其它的用戶線程(運行在前臺,處理具體任務)來服務,當所有的用戶線程都消亡,沒有可服務的對象,守護線程即會自動消亡。例如檢測服務,常見例子如JAVA的垃圾回收機制。所有在守護線程裏面不適合做計算以及業務邏輯的操作
創建方式:在線程啓動之前(調用start()方法),調用setDaemon(threadName,true)來申明這個是守護線程即可   守護線程不能操作IO讀寫操作,因爲一旦被服務的線程運行結束,守護線程就會停止運行,可能導致IO讀寫不完整。

四種解析方式:DOM SAX DOM4J JDOM
DOM使用步驟:
準備工作
1、創建一個DocumentBuilderFactory的對象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
2、創建一個DocumentBuilder的對象
DocumentBuilder db=dbf.newDocumentBuilder();
3、通過DocumentBuilder對象的parser方法加載xml文件到當前項目
Document document = db.parse("books.xml");
sax解析xml
解析的時候,是startElement-characters-endElement , characters解析完一個屬性,就到endElement,然後又解析一個屬性又到endElement,最後解析完全部屬性,到endElement又到startElement開始下一個節點。
xml的SAX解析並
將解析的內容及xml結構形式保存至Java對象中。
SAX解析:
1、獲取一個SAXParserFactory的實例:SAXParserFactory factory = SAXParserFactory.newInstance();
2、通過factory獲取SAXParser實例:SAXParser parser = factory.newSAXParser();
3、創建SAXParserHandler對象:SAXParserHandler handler = new SAXParserHandler();
4、將xml文件和解析方式handler加載到SAXParser實例:parser.parse("books.xml",handler);

JUnit是Java提供的一種進行單元測試的自動化工具。測試方法可以寫在任意類中的任意位置。使用JUnit可以沒有main()入口進行測試。
DOM4J在靈活性和對複雜xml的支持上都要強於DOM
DOM4J的應用範圍非常的廣,例如在三大框架的Hibernate中是使用DOM4J的方式解析文件的。
DOM是w3c組織提供的一個官方解析方式,在一定程度上是有所應用的。
當XML文件比較大的時候,會發現DOM4J比較好用
1.JUnit:Java提供的單元測試;@Test註解;採用JUnit不需要程序入口main方法
2.性能測試結果:幾kB的xml文件;建議使用DOM4J解析
DOM-33ms
SAX-6ms
JDOM-69ms
DOM4J-45ms
工程右鍵build path --Add library--JUnit單元測試 --version:JUnit4
DOM:33,SAX:6
JDOM:69;DOM4J:45
DOM 有可能溢出
Junit4
1、測試方法上必須使用@Test進行修飾
2、測試方法必須使用public void進行修飾,不能帶任何的參數
3、新建一個源代碼目錄來存放我們的測試代碼
4、測試類的包應該和被測試類保持一致
5、測試單元中的每個方法必須可以獨立測試,測試方法間不能有任何的依賴。
6.測試類使用Test作爲類名的後綴,例如CaculateTest(不是必須的)
7.測試方法使用Test作爲方法名的前綴,例如testAdd()(不是必須的)
8.可以在左側界面單獨選擇測試類
9.自動生成:右鍵新建一個JUnit Test Case——更改源代碼目錄——可以選擇相應需要進行測試的方法

#Junit——運行流程#
幾種測試方法的運行順序:
1.@beforeClass修飾的方法會在所有方法被調用前執行,該方法是靜態的,在測試類被加載之後就會執行。在內存中只會存在一份實例。比較適合加載配置文件
2.@AfterClass所修飾的方法通常迎來對資源的清理,如關閉數據庫的連接

2.@Before、@After會分別在每個測試方法前後執行一次

web 過濾器

過濾器1放行 --> 過濾器2放行--->業務邏輯返回請求結果-->過濾器2放行-->過濾器1放行-->用戶響應界面
在LoginFilter項目中給success.jsp添加過濾器,直接通過URL跳轉前先判斷是否已經登錄
struts配置時登陸action最好不要用login,會和struts的保留字起衝突
Struts2接受參數:
1,使用Action的屬性接受參數,在Action中定義需要接受的屬性,並寫它的set/get方法。
2,使用DomainModel接受參數,創建實體類定義需要接受的屬性,並set/get方法,在Action中創建實體類名屬性。並在界面進行指定。
3,使用ModelDriver接受參數,在Action中實現ModelDriver<實體類名>接口,並實現方法返回當前需要轉換的對象,刪除set/get方法,並對 對象 進行實例化,並取消指定。
4,request
5,獲取List集合中的參數。獲取多個參數。

學習了攔截器之後可以用攔截器來控制用戶的權限
action配置了自定義的攔截器之後defaultStack會失效,我們可以把自定義的攔截器和fefaultStack攔截器組成一個攔截器棧來配置action
關於myeclipse配置hibernate也是折騰啊,版本問題!     myeclipse添加hibernate4.1,但myeclipse最高支持3.3.要麼自己手動導入4.1的jar包,要麼就用3.3的hibernate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章