1. 符合j2ee標準的web-app的目錄結構
n WEB-INF
u classes
u web.xml
u lib
2. servlet開發過程
n 從httpservlet繼承, 重寫doget / doPost方法
n 部署web.xml
3. servlet聲明週期
n 只有一個對象
n 第一次請求的時候被初始化,只一遍
n 初始化後先調用init方法,只一遍
n 每個請求,調用一遍serviceàserviceàdoGet/doPost。以多線程的方式運行
u 不要在servlet中設計成員變量。
n 卸載前調用destroy方法
4. 爲什麼有2個init方法
5. /的含義
n form
u form提交中action的路徑可以爲虛擬路徑,
u 也可以爲絕對路徑,/代表http://127.0.0.1/
n web.xml
u web.xml中url-pattern爲webapplication根路徑,/代表http://127.0.0.1/Test/
6. 亂碼
場合:頁面本身有中文的時候 解決辦法:servlet:resp.setContentType("text/html;charset=gbk"); Jsp: <%@ page contentType="text/html;charset=gb2312"%> 注意:一定要寫在PrintWriter out = resp.getWriter();之前 |
場合:解決get方式亂碼問題: 解決辦法:修改server.xml àURIEncoding="GBK" |
場合:解決post方式提交內容的亂碼 解決辦法:request.setCharacterEncoding("GBK"); 注意:一定要寫在存取第一個參數之前 不要調用response.setCharacterEncoding("GBK"); |
場合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文參數 解決辦法:<%request.setCharacterEncoding("GBK");%> 注意: |
7. Cookie 和session的區別
注意cookie有時候禁不掉
Cookie |
session |
存儲在客戶端 |
存儲在服務器端 |
兩種類型 l 有聲明週期,活在ie窗口內存中 l 無聲明週期 |
兩種實現方式 l 依賴於cookie l url重寫 |
父路徑不能訪問子路徑的cookie |
同一個session的窗口共享一個session |
典型應用: l 3個月不用再登陸 l 購物車(http://www.china-pub.com/) |
典型應用: l 用戶登陸 l 購物車也可以用session實現。· |
不可靠 |
可靠 |
8. application (ServletContext)的概念
9. jsp初學者容易犯的錯誤
n WEB-INF子目錄下面不能放置html jsp 等文件
n 不能直接打開
10. jsp/servlet連接數據庫時要注意的事項
拷貝數據庫驅動的jar包到apache-tomcat-6.0.14\webapps\Test\WEB-INF\lib文件夾
確認數據庫已經啓動
用戶名、密碼應該正確
11. <%! <%區別
12. 如何解決ie緩存問題
13. TestErr.jsp / ErrPage.jsp
l 不太穩定,有的時候不好使:
n 先不寫這句話:<%@page errorPage="ErrPage.jsp"%>
n Ie不行,firefox行
14. <%@include和jsp:include的區別
<%@ include file="date.jsp" %> Directive(編譯指令)相當於在編譯期間的命令 page include taglib |
<jsp:include page="date.jsp" flush="true"/> Action(動作指令)在運行期間的命令 以標籤的形式存在 jsp:useBean jsp:include Jsp:forward jsp::plugin |
include編譯指令是在JSP程序的轉換時期就將file屬性所指定的程序內容嵌入,然後再編譯執行; 編譯之前在jsp轉換成servlet的時候就已經把它包含進來了,包含的時機是在轉換的時候 |
而include指令在轉換時期是不會被編譯的,只有在客戶端請求時期如果被執行到纔會被動態的編譯載入 不是說一訪問包含它的頁面就會被轉換和編譯,只有執行到它的時候才把它轉換成servlet並編譯 |
當前文件和被包含的jsp生成的是一個統一的servlet,被編成一個統一的字節碼文件,只生成一個class文件 |
多個 |
Include不能帶參數,編譯之前傳參數無意義 |
<jsp:include>可以 |
包含頁面和被包含頁面訪問的是同一個request對象,兩者contentType必須設置的一樣。 |
雖然是不同的request對象,但被包含頁面的request可以取得包含它的頁面的參數,並添加了自己的參數 |
常用 |
不常用 |
15. forward和sendredirect的區別
Sendredirect response.sendredirect |
Forward <jsp:forward page="..jsp"/> |
是不同的request,相當於在地址欄敲點內容又回了一下車,跟原來的request一點關係沒有 |
雖然是不同的對象,但是,可以取到上一個頁面的內容 |
send後的語句會繼續執行,除非return |
forward後的語句不會繼續發送給客戶端 |
速度慢 |
速度快 |
需要到客戶端的往返,可以轉到任何頁面, 不只侷限於應用服務器的內部一些個servlet、jsp,其它的路徑都沒問題。往客戶端發了一條指令,相當於命令一下瀏覽器把地址改一下再點提交。前一個頁面的參數全都丟失了,相當於你直接在地址欄敲了新的地址。 |
服務器內部轉換,只侷限在應用服務器的內部。 |
地址欄有變化 |
地址欄沒有變化 |
可以傳參數,直接寫在url後面 |
可以傳參數 |
/代表的是http://127.0.0.1/ 代表的域名的根路徑,而不是webapp的根路徑 <%response.sendRedirect("/test/ServletToJSP");%> <form action="/test/ServletToJSP"> <a href="/test/ServletToJSP">test</a> |
/代表的是http://127.0.0.1/test this.getServletContext().getRequestDispatcher ("/servlet_jsp/ServletUseJsp.jsp") 並且只能以/開頭 |
常用 |
常用 |