**JSP Web應用程序開發教程習題答案**
## **第1篇 ?JSP基本技術**
## **第1章** **JSP運行環境**
### **思考題**
1\. 常用的代碼混合動態網頁編程技術有哪幾種?
常用的代碼混合動態網頁編程技術有ASP、PHP、JSP三種。在頁面中嵌入VB代碼為ASP;嵌入PHP代碼為PHP;嵌入Java代碼為JSP。
2\. 通過URL向服務器傳遞數據的查詢參數用什么字符標識其開始?簡述其輸入格式。
以半角問號“?”開始,格式為:?str=abc#a1
3\. 服務器返回404和500錯誤,分別表示什么意思?
404表示無法找到客戶端所給地址的任何資源,即沒有所請求的頁面。主要原因是請求地址錯誤,此時應仔細核對輸入的路徑和文件名是否正確,是否存在這樣的路徑和文件;另一個原因是虛擬路徑不起作用,即Web應用程序未加載,此時應仔細核對虛擬路徑配置標記是否正確,Web應用程序的配置文件web.xml的格式是否正確,也可從服務器控制臺顯示的信息或日志文件中記錄的信息查找原因。500表示程序邏輯有錯誤,此時應根據錯誤提示調試程序代碼。
4\. 簡述JSP動態網頁的處理過程。
JSP Web服務器在處理JSP網頁時,首先由JSP引擎將JSP文件轉化為Servlet(一種Java類),其次將該Servlet編譯為.class文件,然后調用Servlet引擎執行class文件,輸出HTML網頁發送到客戶端的瀏覽器中顯示。
5\. Tomcat服務器配置文件的路徑和名稱是什么?
Tomcat安裝目錄/conf/server.xml
6\. Tomcat服務器的主目錄是什么?
Tomcat安裝目錄/webapps
7\. Tomcat服務器中設置所有網站通用配置項的配置文件的路徑和名稱是什么?
Tomcat安裝目錄/conf/web.xml
8\. JSP Web應用程序配置文件的路徑和名稱是什么?
Web應用程序的根目錄/WEB-INF/web.xml
9\. 將JSP Web應用程序發布到Tomcat服務器有哪幾種方式?
將Web應用程序發布到Tomcat服務器,有以下三種方法:
(1)將Web應用程序目錄復制到Tomcat的應用程序目錄webapps下;
(2)創建Web應用程序存檔文件(WAR),將.war文件復制到應用程序目錄webapps下;
(3)建立虛擬路徑。
10\. 如何在Tomcat服務器中配置虛擬目錄?
編寫Context標記的XML片斷:
將這段XML片斷放在服務器配置文件server.xml的Host標記中,(結束標記前即可)。或者將其保存為單獨的一個XML文件中,放置在$TOMCAT\_HOME/conf/Catalina /localhost /目錄下,其中文件名(除.xml擴展名部分)為虛擬目錄名,此時path屬性將不起作用。
## **第2章** **JSP基本語法**
### **思考題**
1\. JSP頁面主要由哪些元素構成?
JSP頁面主要由HTML網頁及其中嵌入的Java代碼構成。組成JSP頁面的各元素有:普通網頁內容,又稱為模板元素;Java代碼,又稱為腳本元素;注釋;指令;動作。
2\. JSP中導入Java類包使用page指令的什么屬性?
page指令的import屬性,如:
3\. page指令的contentType屬性與pageEncoding屬性有何區別?
pageEncoding屬性指定的編碼是JSP文件本身的編碼,JSP網頁編譯時,根據pageEncoding設定的編碼讀取JSP文件,轉化成統一的UTF-8編碼的 Servlet源文件(一種Java類)。contentType屬性指定的編碼是服務器發送給客戶端時的網頁內容編碼,是Servlet類輸出網頁時使用的編碼。pageEncoding 和contentType的默認設置都是 ISO-8859-1. 而設定了其中一個, 另一個就跟著一樣了。
4\. page指令的errorPage屬性與isErrorPage屬性如何協同進行網頁的錯誤處理?
普通網頁中使用page指令的errorPage屬性,指定頁面出錯時將轉向的錯誤處理頁面,此頁面的isErrorPage屬性默認為false;錯誤處理頁面中page指令的isErrorPage屬性為true,表示其它網頁出錯時轉向本頁面。
5\. 簡述include指令與include動作的異同。
include指令是靜態包含、編譯時包含,被包含的內容插入到Servlet類中;SP引擎將對所包含的文件進行語法分析,對各種類型的被包含文件都作為JSP文件對待。include動作是動態包含、運行時包含,資源的路徑和名稱不需要在編譯前確定,可以動態的生成;被包含的內容插入到輸出的網頁中;JSP引擎不對所包含的文件進行語法分析,對被包含的JSP文件單獨編譯,而對其它類型的被包含文件只作為靜態文件插入到輸出的網頁中。
6\. 簡述聲明中定義的變量與Scriptlet中定義的變量的區別。
聲明中的變量和方法作為Servlet類的字段和方法,聲明中定義的變量屬類變量,是全局性的;而Scriptlet中定義的變量屬于Service方法,是局部變量。
7\. 寫出在網站配置文件(web.xml)中設定一部分網頁自動包含序言和頁腳內容的配置代碼。
\*.jsp
/header.jsp
/footer.jsp
8\. JSP動作的 page屬性指定轉向地址時,如果以“/”開頭,那么這個地址相對于什么路徑?
相對于Web應用程序的根目錄,即網站的根目錄。
## **第3章** **JSP內置對象**
### **思考題**
1\. JSP提供了哪幾個內置對象?
JSP中有9個內置對象:out、request、response、session、application、pageContext、config、page、exception。
2\. 在聲明中可以使用內置對象嗎?為什么?
聲明中不能使用內置對象。JSP的內置對象定義在Servlet類的Service方法中,而聲明中的內容位于Servlet類內。
3\. 內置對象out的輸出方法print()和腳本中System.out.print()輸出方法有什么不同?
out.print()方法輸出至客戶端,通過互聯網在遠端顯示;而System.out.print()方法輸出至服務器的控制臺,在本地顯示。
4\. 比較request對象的getParameter()方法和getAttribute()方法的不同。
getParameter方法獲取客戶端提交的參數,這個數據只能是字符串類型的;getAttribute方法獲取服務器端設置的屬性,這個數據必須預先由setAttribute方法設置,不經過網絡傳輸,可以是任何Java數據類型,getAttribute方法獲取數據后全部作為Object類型,需強制轉化為原來的類型進行處理。request對象沒有也不需要setParameter方法。
5\. response.sendRedirect()方法和動作的頁面轉向有什么不同?
response對象的sendRedirect方法與動作的作用都是頁面轉向,但二者有著顯著的區別。動作轉向前后的網頁在同一個請求(request)作用域,只能在同一個應用程序間重定向,轉向是在服務器端進行的,瀏覽器地址欄中的URL沒有變化,轉向地址參數最前面的“/”解析為當前Web應用程序根目錄;response對象sendRedirect方法的轉向過程是:服務器向瀏覽器發送重定向指令,將轉向地址發送到客戶端,由瀏覽器重新進行一次請求。轉向前后的網頁不在同一個請求上下文,轉向地址可以在任何位置,瀏覽器地址欄中顯示轉向后的URL,轉向地址參數最前面的“/”解析為當前服務器的根目錄。
6\. 比較Cookie和Session技術的異同?
Cookie和Session的作用一樣,是為了彌補HTTP訪問的無狀態性,保持對客戶端的狀態跟蹤,但Cookie將數據保存在客戶端,只能是文本類型,以服務器名稱+Cookie名稱標識,開發廠家為Netscape,缺陷有安全隱患,占用網絡帶寬。Session將數據保存在服務器上,可以是復雜的對象類型,以SessionID來標識,開發廠家為Microsoft,缺陷為占用服務器資源,不易在多臺服務器之間共享。SessionID通常要用Cookie保存在客戶端。
7\. 寫出網站配置文件(web.xml)中設置Session過期時間的代碼。
30
8\. 標識用戶Session的sessionID如何保存和傳遞?
sessionID用于對各客戶端進行標識,必須與各客戶端聯系起來,在許多服務器上,如果瀏覽器支持Cookie的話,就直接使用Cookie來傳遞和保存。如果不支持Cookie,或者將瀏覽器設置為不接受Cookie,就自動轉化為URL-rewiting(重寫URL,這個URL包含客戶端的sessionID)。另一種保持客戶端會話的技術是表單隱藏字段,也就是服務器自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把sessionID傳遞回服務器。
9\. JSP的4個作用域是什么?
JSP規范定義了page、request、session、application 4個作用域,通俗地講,作用域即是有效范圍。每種作用域都對應一個上下文,在這個上下文中可以關聯(存儲)基本類型的數據和對象引用,以供享有同一個上下文的程序代碼訪問。這4個作用域的范圍逐級包含,層層擴大。
10\. 比較pageContext對象的getAttribute()方法和findAttribute()方法的不同?
getAttribute()和findAttribute()方法都是獲取指定名稱的屬性值。getAttribute()方法默認在page作用域獲取,其重載方法可用第2個參數指定具體的作用域,1:page、2:request、3:session、4:application。findAttribute()方法自動按照page、request、session、application順序查找指定名稱的屬性值,返回最先找到的屬性值,如果在4個作用域中都沒有查找到,則返回null。
## **第4章** **Servlet**
### **思考題**
1\. 簡述Servlet的生命周期及其與Servlet接口中方法的對應關系。
Servlet加載和實例化后,在內存中的的生命周期有3個階段,分別是初始化、服務、銷毀,分別與javax.servlet.Servlet接口中的init()、service()和destroy()方法相對應。
2\. 簡述GenericServlet類中的兩個init方法的作用與關系。
GenericServlet類是一個抽象類,實現了Servlet接口和ServletConfig接口,給出了除service()方法外的其他4個方法的簡單實現,定義了一個通用的、不依賴于具體協議的Servlet。在GenericServlet類中定義兩個重載的init()方法,第一個帶參數的init()方法是Servlet接口中init()方法的實現。在這個方法中,首先將ServletConfig對象的參數保存在一個transient實例變量中,然后調用第二個不帶參數的init()方法。通常我們在編寫繼承自GenericServlet的Servlet類時,只需要重寫第二個不帶參數的init()方法就可以了。如果覆蓋了第一個帶參數init()方法,那么應該在子類的該方法中,包含一句super.init(config)代碼的調用。
3\. HttpServlet類是如何封裝Servlet接口的Service方法的?
HttpServlet類是為了快速開發應用于HTTP協議而提供的一個抽象類,它繼承自GenericServlet類,用于創建適合Web站點的HTTP Servlet。HttpServlet類中提供了 兩個重載的service()方法,第一個public service()方法是GenericServlet類中service()方法的實現。在這個方法中,首先將req和res對象轉換為HttpServletRequest(繼承自ServletRequest接口)和HttpServletResponse(繼承自ServletResponse接口)類型,然后調用第二個protected service方法,在該方法中首先調用HttpServletRequest對象的getMethod()方法,獲取HTTP請求方法的名字,然后根據請求方法的類型,調用相應的doXxx ()方法。因此,我們在編寫HttpServlet的派生類時,通常不需要去覆蓋service()方法,而只需重寫相應的doXxx()方法,對客戶的請求進行處理。
4\. 簡述Servlet與JSP之間的關系。
JSP與Servlet實質是一回事,Servlet是JSP的底層技術,JSP網頁在運行時要轉化為Servlet類,然后編譯、執行,輸出HTML網頁文件。JSP是Servlet的簡化設計,JSP簡化了Servlet的編寫。
5\. 簡述JSP內置對象與Servlet規范中接口的對應關系。
JSP內置對象是Servlet API中某些接口或類的實例,其中request是javax.servlet.http.HttpServletReauest接口的實例;response是javax.servlet.http.HttpServletResponse接口的實例;session是javax.servlet.http.HttpSession接口的實例;application是javax.servlet.ServletContext接口的實例;config是javax.servlet.ServletConfig接口的實例。pageContext是javax.servlet.jsp.PageContext接口的實例;out是javax.servlet.jsp.JspWriter接口的對象;page是java.lang.Object類的實例;exception是java.lang.Throwable接口的實例。
6\. 簡述Servlet的開發流程。
(1)編寫Servlet源程序;
(2)編譯Servlet程序,并將編譯后的class文件放置于網站特定的目錄下;
(3)配置Servlet,或者在Servlet程序中用注解標注;
(4)請求運行Servlet.
7\. 包結構為jsp.info.lyu的Servlet,寫出其class文件在網站中的放置路徑。
網站根目錄/WEB-INF/classes/jsp/info/lyu/
8\. 若Servlet的訪問路徑為/servlet/antestsvt,需兩個初始化參數:username="testuser";pwd="abc123"。寫出其注解配置代碼。
@WebServlet(urlPatterns={"/servlet/antestsvt?"}, initParams={@WebInitParam(name="username",value="testuser"), @WebInitParam(name= "pwd", value="abc123") })
## **第5章** **Java Bean**
### **思考題**
1\. Java Bean的索引屬性與簡單屬性有什么區別?
Simple屬性:與一個簡單類型的字段對應,僅是對此類型字段的讀寫操作;Indexed屬性:與一個數組類型的字段對應。使用與該屬性對應的set/get方法可取得數組中的一個值,或整個數組的值。此類屬性可有兩對set/get方法。
2\. Java Bean屬性的讀寫性由什么決定?
屬性的讀寫性由定義屬性的設置器(setter方法)和獲取器(getter方法)決定。只有獲取器的屬性為只讀屬性,只有設置器的屬性為只寫屬性,設置器與獲取器都具備的屬性為可讀寫屬性。
3\. Java Bean屬性的Getter方法和Setter方法都有返回值和參數嗎?
Getter方法有返回值,沒有參數; Setter方法都有參數,沒有返回值。
4\. 寫出動作的最常用的語法格式。
5\. 設置userBean的哪個屬性,屬性值從何處而來?
設置id值為userBean的所有屬性,屬性值為客戶端提交的、與屬性同名的參數值,沒有提交同名的參數時,相應的屬性設置為null。
6\. 寫出動作的語法格式。
## **第6章** **JDBC**
### **思考題**
1\. 簡述交互式和嵌入式兩種訪問數據庫方式。
SQL統一和簡化了對各種關系型數據庫管理系統(RDBMS)的操作。SQL語言有兩種使用方式:一種是在終端(數據庫專用的客戶端程序)交互方式下使用,稱為交互式SQL;另一種是嵌入在高級語言的程序中使用,稱為嵌入式SQL。
2\. 簡述ODBC與JDBC的基本原理。
ODBC基于SAG的調用級接口規范CLI。ODBC基本上分為三層:應用層、驅動程序管理器、驅動程序。應用層為開發者或用戶提供標準的接口函數、語法和錯誤代碼等;驅動程序管理器是ODBC技術的核心,由ODBC實現,建立應用層的功能調用與驅動程序的連接;驅動程序由微軟、DBMS廠商或第三方開發商提供,它必須符合ODBC的規范。這個驅動對應用程序的開發者是透明的,并允許根據不同的DBMS采用不同的技術加以優化實現。ODBC技術借鑒了現代操作系統設備管理的思想,ODBC驅動程序管理器類似于操作系統的設備管理器,數據庫驅動程序類似于外部設備的驅動程序,ODBC應用層接口類似于操作系統提供的有關設備的API。應用程序利用ODBC訪問數據庫類似于使用打印機等外部設備,盡管打印機的種類千差萬別,但在應用程序中調用的API是一致的。ODBC為用戶提供了簡單、標準、透明的數據庫訪問方式。
JDBC是Java數據庫連接(Java DataBase Connectivity)的簡稱,是Java語言訪問數據庫的API,JDBC還是SUN公司的注冊商標。JDBC的原理與ODBC基本上一致,總體上分為三個層次,應用層為開發者提供統一的編程接口,驅動程序管理器加載和管理數據庫驅動程序,并將應用層的調用對應于相應的驅動程序操作,驅動程序面向數據庫廠商,為驅動程序的開發提供統一的接口。JDBC在實現上克服了ODBC沒有面向對象的特性、底層功能與高級功能混雜、復雜難學等缺點,以Java語言的風格和優點為基礎進行了優化,所以JDBC十分簡潔和易于使用。
JDBC和ODBC都是基于X/Open SQL的調用級接口,是繼SQL之后,數據庫領域又一重要的標準化技術成果。JDBC為數據庫應用開發人員、數據庫前臺工具開發人員提供了一種標準的應用程序設計接口,使開發人員可以用純Java語言編寫完整的數據庫應用程序。
3\. JDBC核心API在什么位置?包結構是什么?
JDBC API為Java開發者使用數據庫提供了統一的編程接口,它由一組Java類和接口組成,包括在java.sql包中,該程序包位于JRE安裝目錄lib子目錄下的rt.jar文件中。
4\. JDBC核心API有哪些常用的接口和類?
JDBC核心API有常用的接口和類有Driver接口、DriverManager類、Connection接口、Statement接口、ResultSet接口。
5\. 簡述JDBC訪問數據庫的過程。
(1)加載JDBC驅動:Class.forName("package.DriverName");
(2)建立與數據庫的連接:Connection con=DriverManager.getConnection("url","root","");
(3)創建語句對象:Statement stmt=con.createStatement();
(4)通過語句對象執行SQL語句返回結果集:ResultSet rst=stmt.executeQuery(“SQL");
(5)結果處理:String str=rst.getString(“1”);
6\. 使用DriverManager類的getConnection(“url”)方法建立與數據庫連接時,傳遞的參數:連接字符串url,可以提供哪些信息?
數據庫服務器的URL地址、端口號、數據庫名、用戶名和密碼等。
7\. 數據庫的JDBC驅動程序.jar文件通常要放在網站的什么位置?
網站根目錄/WEB-INF/lib目錄下。
8\. 對于64位Windows操作系統,32位ODBC配置程序的路徑與名稱是什么?
對于64位Windows操作系統,64位ODBC配置程序為:C:\\Windows\\system32\\ odbcad32.exe,32位ODBC配置程序為:C:\\Windows\\SysWOW64\\odbcad32.exe,從“控制面板\-管理工具”打開的ODBC數據源是64位的ODBC數據源,即使ODBC數據源標題名稱中有32字樣。要配置32位ODBC數據源需運行SysWOW64文件夾下的odbcad32.exe程序。
9\. JDBC訪問數據庫時通常用Statement對象的哪個方法執行SQL查詢語句,用哪個方法執行SQL更新語句?
executeQuery()方法執行SQL查詢語句;executeUpdate()方法執行SQL更新語句。
10\. 簡述ORM模式的原理。
ORM(Object Relation Map)即對象關系映射,是Java對象與關系數據庫之間的映射模式。其思想是用一個Java Bean對象表示關系數據庫表中的一條記錄,其中Bean的一個屬性值對應于記錄的一個字段值;用多個Java Bean對象組成的一個集合對象表示關系數據庫中的一個表,其中集合中的一個Bean對象對應于表中的一條記錄。利用這種映射關系,允許應用程序以面向對象的方式,通過對Java對象的操作而達到對數據庫對象操作的目的。
11\. JDBC執行存儲過程的語句對象是什么?指定存儲過程的語法格式是什么?
JDBC執行存儲過程的語句對象是CallableStatement,CallableStatement對象為所有的DBMS提供了一種以標準形式調用存儲過程的方法。所調用的存儲過程包含于CallableStatement對象中。這種調用是用Statement對象支持的一種換碼語法來實現的。換碼語法告訴驅動程序其中的代碼應該以不同方式處理。驅動程序將掃描任何換碼語法,并將它轉換成特定數據庫可理解的代碼。這使得換碼語法與 DBMS無關,并允許程序員使用在沒有換碼語法時不可用的功能。換碼子句由花括號和關鍵字界定:{keyword . . . parameters . . . },關鍵字指示轉義子句的類型。
12\. Tomcat服務器的局部數據源如何配置?主要設置哪些連接信息?
局部數據源只與特定的Web應用相關,在該Web應用對應的Context(上下文)中配置。例如,為jspex Web應用配置局部數據源,修改Tomcat安裝目錄下conf\\Catalina\\localhost下的jspex.xml文件,為Context元素增加一個Resources子元素,詳細代碼如下:
<Resource name="jspex/conpool"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/jspex\_utf8?useUnicode=true&characterEncoding =UTF-8"
username="root"
password=""
type="javax.sql.DataSource"
maxActive="10"
maxIdle="4"
maxWait="-1"
auth="Container"
description="jspex DataBase Connection pool"
/>
## **第7章** **Eclipse**
### **思考題**
1\. 下載Eclipse選擇具體的程序包時應考慮哪幾個因素?
(1)選擇針對相應操作系統平臺的發布程序:取決于用戶的操作系統,Windows操作系統選擇Release for Windows的程序。
(2)安裝版與非安裝版的選擇:安裝版是Eclipse Installer安裝包,下載文件的擴展名為.exe,下載后雙擊安裝。非安裝版為擴展名為.zip的壓縮文件,下載后解壓即可運行,無須安裝。非安裝版還需選擇不同用途的程序包,安裝版只有一個程序包,在安裝時進行功能選擇。推薦下載非安裝版。
(3)32位與64位的選擇:取決于系統中安裝的JSDK,32位JSDK只能運行32位的Eclipse;64位的JSDK只能運行64位的Eclipse。
(4)新版與舊版的選擇:取決于系統中安裝的JSDK版本,較新版本的JSDK可選擇當前新版的Eclipse,舊版的JSDK應選擇Eclipse的歷史版本,具體見下載頁面的提示(Hint)或參閱Eclipse的發布文檔。
(5)選擇合適的功能發布包:取決于應用目的,對于Java Web應用開發,應下載Eclipse IDE for Java EE Developers發布包。當然下載經典發布版,或者其它功能的發布版,通過安裝相關的插件也能實現對應的功能。因為Java Web開發需要的Eclipse插件較多,如果有此任務的話,強烈建議下載Eclipse IDE for Java EE Developers發布包,增加其它開發功能時再安裝相應的插件。
2\. 在dropins目錄中安裝插件,對插件目錄結構有何要求?
dropins目錄與插件的子目錄features和plugins之間只能分隔一層目錄(或者沒有也行),目錄名自定義,通常取插件名稱,或者以傳統的“eclipse”命名。
3\. 簡述Eclipse中視圖與透視圖的關系。
視圖是界面中的基本單元,它是一個功能窗口,以圖表形式直觀的顯示項目中的某類數據。視圖右上方有下拉菜單,可以設置視圖的屬性,或者進行與視圖相關的一些操作。透視圖是包含一系列視圖和編輯器的可視容器。透視圖起到一個組織工作界面的作用,每個透視圖都有自己的視圖集及布局和可見的菜單、工具欄項。
4\. 使用Eclipse IDE for Java EE Developers開發JSP,基本設置項有哪些?設置位置在何處?
(1)JRE(Java Runtime Environment)
配置Java運行環境以及編譯時依賴的類庫,配置路徑:Preferences -> Java -> Installed JREs;
(2)Workspace
設置Eclipse工作空間的路徑,Eclipse中的項目默認保存在該目錄下。修改Workspace目錄,從菜單項File -> Switch Workspace -> Other打開Workspace Launcher對話框,設置好Workspace目錄,點擊“OK”按鈕,Eclipse將重啟并更換新的Workspace目錄。
(3)Server
Web服務器設置,是Java Web開發的基本設置項。配置路徑:Preferences -> Server -> Runtime Environment。
5\. Eclipse內嵌的Tomcat服務器,默認設置下其主目錄的物理路徑是什么?假設Eclipse的Workspace路徑設置為D:\\workspace。
D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps,如果建立過多個服務器,倒數第二級目錄也可能為tmp1或tmp2等。
6\. 簡述使用Eclipse IDE for Java EE Developers開發JSP的基本流程。
設置一下Server參數(JSDK可從環境變量中獲取,Workspace目錄在啟動時提示設置);建立動態Web項目框架;建立目錄、包;編輯接口、類、JSP等各類文件,其中接口、類等Java源程序在保存時可自動進行編譯(默認選擇菜單項Project -> Build Automatically);調試運行;打包發布。
## **第2篇 ?JSP應用開發專題**
## **第8章** **頁面之間數據的傳遞**
### **思考題**
1\. 對于同一個用戶會話,在不同的頁面之間傳遞數據的方法有哪些?
(1)通過URL;
(2)通過表單隱藏域;
(3)通過Cookie;
(4)通過session;
(5)通過ServletContext對象;
(6)通過application;
(7)通過文件系統或者數據庫。
2\. 在不同用戶之間共享數據的方法有哪些?
(1)通過ServletContext對象;
(2)通過application;
(3)通過文件系統或者數據庫。
## **第9章** **JSP中文問題**
### **思考題**
1\. 簡述ASCII碼與GB2312編碼的關系?
GB2312是一個在ASCII碼基礎上派生的簡體中文字符集。GB2312采用雙字節編碼,為了與系統中基本的ASCII字符集區分開,所有漢字編碼的每個字節的第一位都是1。其編碼規則為:第一個字節的值在0x81到0xFE之間,第二個字節的值在0x40到0xFE之間。
2\. 簡述Unicode、UCS、UTF-8編碼的關系?
Unicode和UCS是全世界文字的統一編碼格式。Unicode固定使用16 bits(兩個字節)來表示一個字符,共可以表示65536個字符。UCS是國際標準ISO 10646定義的通用字符集(Universal Character Set, UCS),使用32位(四個字節)表示一個字符。UCS分三個實現級別(對組合字符的支持度不同),UCS的16位子集稱為基本多語言面(Basic Multilingual Plane, BMP),被編碼在16位BMP以外的字符都屬于非常特殊的字符(比如象形文字)。Unicode標準嚴密地包含了ISO 10646-1實現級別3的基本多語言面。1991年前后,Unicode和UCS這兩個項目合并雙方的工作成果, 并為創立一個單一編碼表而協同工作。從Unicode 2.0開始,Unicode項目采用了與ISO 10646-1相同的字庫和字碼。UTF-8(UCS Transformation Format)是UCS的簡化或壓縮編碼格式,UTF-8以多字節來表示字符的UCS編碼。
3\. 簡述Java源程序編譯為class文件過程中的編碼轉換。
Java源程序編譯為.class文件時,編譯器(javac.exe)使用\-encoding參數接收用戶指定的Java源程序的編碼格式,將源程序中的字符按指定的編碼格式轉換為Unicode編碼,保存時再轉換為UTF-8。如果編譯時用戶沒有指定\-encoding參數的值,則編譯器使用JSDK的默認文件編碼對源程序進行處理,JSDK的默認文件編碼保存在file.encoding屬性中,這個屬性值獲取至操作系統默認采用的編碼格式(WindowsXP的值為GBK)。
4\. 簡述JSP程序轉化為Servlet源程序,再編譯為class文件過程中的編碼轉換。
JSP解析器(JSPC)按JSP頁面中設定的字符集解釋JSP文件中出現的所有字符,包括中文字符和ASCII字符,然后把這些字符轉換成Unicode字符進行處理,再轉化成UTF-8格式存為Servlet(.java)文件;編譯后的類(.class)文件,在內存中為Unicode編碼,保存時仍用UTF-8格式;執行.class文件時的輸出,使用JSP設定的字符集。
JSP文件中page指令的contentType屬性指定的編碼用于第一步轉化,pageEncoding屬性指定的編碼用于最后的.class文件輸出。如果這兩個屬性只指定一個,則另一個也取同樣的值。如果在JSP文件中未指定任何編碼,則使用服務器默認的編碼ISO-8859-1對源文件進行解析和最后的頁面輸出。與Java程序的編譯不同,服務器處理JSP文件所采用的默認編碼與操作系統的默認編碼無關。
5\. 頁面使用UTF-8編碼來編寫和保存,設置頁面編碼為UTF-8,以UTF-8編碼來傳遞和處理數據,接收客戶端POST的中文參數前,如何設置request內置對象的編碼,才不會出現亂碼?
request.setCharacterEncoding("UTF-8");
6\. 頁面和數據庫都使用UTF-8編碼來編寫和保存,以UTF-8編碼來傳遞和處理數據,MySQL數據庫連接字符串需加哪些參數,中文才不會亂碼?
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8。
## **第10章** **JSP應用程序的安全性**
### **思考題**
1\. 簡述Servlet服務器的內置安全機制。
Web服務器提供的可控安全機制,通過在配置文件web.xml中設置Web資源的安全約束、驗證方式、用戶、角色等實現頁面的訪問控制。這種可配置的安全機制使應用程序的維護和擴展變得容易靈活。從Servlet2.2規范開始就內置了安全機制,服務器提供的這些安全特性,為Web應用程序的安全性提供了簡單和有力的保證。
2\. 用什么元素、如何配置安全約束規則?
元素用于定義Web資源的安全約束,指明Web應用程序中的哪些資源受保護,哪些角色可以訪問這些受保護的資源。
??
????administration
????administration pages
????/admin/\*
????POST
????GET
??
??
????access by authorised administrators
????admin
??
以上安全約束聲明表示,客戶以GET、POST方式訪問/admin/下的資源時要進行安全驗證,只有屬于admin角色的用戶才可以通過驗證。
:聲明受保護的資源。
:定義受保護的資源的名稱。
:說明性描述
//可以包含多個子元素,即指定多個資源路徑。
:指定受保護的資源的路徑。
:指定受保護的HTTP方法,如GET、POST、PUT。如果沒有定義此屬性,則所有的HTTP方法都受保護。如果設定了某種方法,例如GET,則表示客戶通過該方法訪問資源要進行安全驗證。
:聲明允許訪問受保護資源的角色,可以包含多個子元素,即可以指定多個角色。
:指定可以訪問該資源的角色。
3\. 用什么元素、如何配置角色?
元素用于聲明Web應用程序中的安全角色。
??an administrator role
??admin
4\. 用什么元素、如何配置驗證方式。
元素用于定義驗證方式。目前JSP支持的驗證方式有4種,HTTP基本身份驗證BASIC,HTTP概要身份驗證DIGEST,HTTPS客戶端身份驗證CLIENT-CERT,基于表單的身份驗證FORM。
??BASIC
??BASIC authentication test!
5\. 基于表單的身份驗證,JSP規范要求表單的動作(action)屬性值是什么?用戶名、密碼輸入框的名稱(name)屬性值分別是什么?
基于表單的身份驗證,需要設計一個表單頁面和一個錯誤提示頁面。JSP規范要求表單的動作是j\_security\_check,用戶名和密碼域分別命名為j\_username和j\_password。錯誤提示頁面可以是任何形式,但最常用的是頁面,用來說明用戶輸入了無效的用戶名或密碼。
6\. Tomcat服務器內置安全機制中,應用程序的用戶及其角色等安全信息有哪幾種保存形式?
Tomcat服務器有4種類型的安全域:
(1)內存域:在初始化階段,從XML文件中讀取安全驗證信息,并把它們以一組對象的形式放在內存中。
(2)數據庫域:安全信息存放在數據庫中,通過配置JDBC訪問數據庫中保存的安全信息。
(3)數據源域:通過JNDI數據源訪問存放在數據庫中的安全信息。
(4)JNDI域:通過JNDI訪問存放于LDAP目錄服務器中的安全驗證信息。
7\. 數據庫域保存用戶及角色和數據表及字段有哪些?
數據庫安全域使用數據庫來存儲用戶信息,其中保存用戶與角色的數據庫、數據表及其各個字段都是可配置的。數據庫中必須兩個數據表:第一個為用戶表(表名由userTable屬性指定),表中每一行對應這個安全域能識別的每個有效用戶,用戶表至少包含兩欄:username(用戶名,由userNameCol屬性指定)和password(密碼,由userCredCol屬性指定)。第二個表為角色表(表名由roleTable屬性指定),表中每一行對應于為每個特定用戶指定的每個有效角色,表中至少包含2欄:用戶名(字段名同用戶表)和角色名(由roleNameCol屬性指定)。
8\. 如何配置數據庫域?
數據庫安全域使用數據庫來存儲用戶信息,配置代碼示例如下:
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/jspex"
connectionName="root"
connectionPassword=""
????????userTable="realm\_users"
????????userNameCol="username"
????????userCredCol="password"
????????userRoleTable="user\_roles"
????????roleNameCol="rolename"
/>
## **第3篇 ?JSP高級技術**
## **第11章** **Servlet監聽器**
1\. ServletContextListener接口中有哪些方法?對應哪些事件的處理?
ServletContextListener接口用于監聽ServletContext的創建和刪除。該接口提供了2個方法,它們被稱為“Web應用程序的生命周期方法”。
(1)ContextInitialized(ServletContextEvent event)方法:通知正在收聽的對象,應用程序已加載及初始化。
(2)ContextDestroyed(ServletContextEvent event)方法:通知正在收聽的對象,應用程序已卸載。
2\. HttpSessionActivationListene接口中有哪些方法?對應哪些事件的處理?
HttpSessionActivationListener接口用來監聽HTTP會話Active、Passivate情況。該接口提供2個方法。
(1)SessionDidActivate(HttpSessionEvent event)方法:通知正在收聽的對象,它的Session已經變為有效狀態。
(2)SessionWillPassivate(HttpSessionEvent event)方法:通知正在收聽的對象,它的Session已經變為無效狀態。
3\. ServletRequestAttributeListener接口中有哪些方法?對應哪些事件的處理?
ServletRequestListener接口用來監聽客戶端的請求。該接口提供了2個方法:
(1)RequestInitalized(ServletRequestEvent event)方法:通知正在收聽的對象ServletRequest已經被加載及初始化。
(2)RequestDestroyed(ServletRequestEvent event)方法:通知正在收聽的對象ServletRequest已經被卸載。
4\. 簡述Web監聽程序的設計步驟。
(1)編寫一個實現相關Listener接口的Java類。
(2)針對相應的事件動作,在Listener接口的相應方法中實現程序邏輯。
(3)在Web應用程序中配置監聽器。監聽器只有部署到網站中,并且有相應的事件發生后,監聽器中的相應方法才會執行。
5\. 寫出web.xml中配置Web監聽程序的代碼。
Web監聽程序的部署代碼:
??
????package.ListenerName
??
6\. Servlet 3.0規范中監聽器配置的注解符是什么?
Servlet 3.0規范中關于監聽器配置的注解符為@WebListene。@WebListene作用于類,使用時標注在監聽器類定義語句之前。@WebListene注解符的屬性只有value,String類型,且是可選的,value屬性值為監聽器的描述信息。
## **第12章** **Servlet過濾器**
1\. 簡述過濾器的生命周期及其與Filter接口中方法的對應關系。
過濾器程序必須實現Filter接口,它有3個方法,與過濾器的生存周期密切相關。
public void init(FilterConfig filterConfig) throws ServletException
init()方法進行初始化操作,獲取容器傳遞來的FilterConfig對象,通過該對象提供的方法獲取應用程序的ServletContext對象和初始化參數。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException
doFilter()方法包含過濾器業務邏輯,在其中進行所有的過濾器工作。每當應用程序請求處理時,容器都將調用這個方法。
public void destroy()
當服務器不需要使用過濾器時,容器調用destroy()方法進行清理工作。
2\. 比較Filter接口與FilterChain接口中兩個doFilter()方法的不同作用。
Filter接口的doFilter()方法包含過濾器業務邏輯,在其中進行所有的過濾器工作。每當應用程序請求處理時,容器都將調用這個方法。Filter接口的doFilter()方法取一個FilterChain對象作為它的一個參數,在其中調用FilterChain對象的doFilter()方法時,激活下一個相關的過濾器,該方法之后的代碼為過濾器的后處理邏輯,在網頁資源處理后才執行。
FilterChain接口中的doFilter()方法,啟動過濾器鏈中下一個過濾器(Filter接口)的doFilter()方法。如果調用的過濾器是鏈中最后一個過濾器,則開始真正的資源處理。只有當其后所有的過濾器都從其doFilter()方法調用中返回時,該方法才會返回。FilterChain接口中的doFilter()方法,在Filter接口的doFilter()方法中調用。
3\. 過濾器類doFilter()方法中哪些代碼是請求的預處理邏輯?哪些代碼是應答的后處理邏輯?
Filter接口的doFilter()方法中調用FilterChain接口中的doFilter()方法之前的代碼是請求的預處理邏輯,之后的代碼是應答的后處理邏輯。
4\. 簡述過濾器程序的設計步驟。
(1)建立一個實現Filter接口的類。這個類需要實現3個方法,分別是:doFilter()、init()和destroy()。doFilter()方法包含主要的過濾行為。init()方法初始化Filter,而destroy()方法釋放Filter占用的資源。
(2)在doFilter()方法中編寫過濾代碼。
(3)調用FilterChain對象的doFilter()方法。Filter接口的doFilter()方法取一個FilterChain對象作為它的一個參數。在調用此對象的doFilter()方法時,激活下一個相關的過濾器。如果沒有另一個過濾器與servlet或JSP頁面關聯,則servlet或JSP頁面被激活。chain.doFilter()方法之前的代碼為請求的預處理邏輯,而之后的代碼則是請求的后處理邏輯。
(4)配置和映射過濾器。
5\. 寫出web.xml中配置過濾器程序的代碼。
??
filter1 Description
filter1 DisplayName
filter1
????packages.FilterName
initial param1
value of param1
filter1 Initial Parameter
?? ?
??
????filter1
????/filter/\*
REQUEST
FORWARD
??
6\. Servlet 3.0規范中過濾器配置的注解符是什么?
Servlet 3.0規范中關于過濾器配置的注解符有@WebFilter和@WebInitParam。@WebFilter是核心注解符,該注解符作用于類,使用時標注在Filter類定義語句之前;@WebInitParam注解符嵌套在@WebFilter內標注一個初始化參數。
## **第13章** **表達式語言**
1\. 寫出EL的基本語法格式。
EL是一種簡單語言,其基本語法格式:${Expr}
2\. JSP頁面中引入了名稱為user的Java Bean,寫出訪問其name屬性的EL語句。
${user.name} 或:${user\["name"\]}
3\. 寫出訪問用戶提交的請求參數param1的EL語句。
${param\['param1'\]}
4\. 寫出訪問請求作用域中attr1屬性的EL語句。
${pageContext.request.attr1} 或:${requestScope\[‘attr1’\]}
5\. 寫出訪問會話作用域中session1屬性的EL語句。
${sessionScope.session1}
6\. 表達式${userName}會返回哪個作用域中的userName屬性?
在page、request、session、application對象中順序查詢userName屬性,找到該屬性,就返回其值;如果在所有作用域中都沒有找到這個屬性,那么返回null。
## **第14章** **自定義標簽**
1\. 簡述JSP基本語法之一的動作元素與自定義標簽的關系?
自定義標簽是對JSP標記的一種擴展,執行自定義的操作。每個自定義標簽都與一個Java類相關聯,這個類定義了相應標簽的執行邏輯,稱為標簽處理類或標簽處理程序。當一個含有自定義標簽的JSP頁面被JSP引擎編譯成Servlet時,自定義標簽被轉化成了對標簽處理類的操作。JSP中內置的動作標簽,實質是系統預定義的標簽。
2\. JSP taglib指令的格式與作用是什么?
3\. 簡述Tag接口的運行流程。
當容器創建一個新的標簽實例后,通過setPageContext()設置標簽的頁面上下文。標簽處理程序可以通過javax.servlet.jsp.PageContext來與JSP交互,通過PageContext對象,標簽處理程序可以訪問JSP中的request、session和application對象。
使用setParent()方法設置這個標簽的上一級標簽。如果沒有上一級標簽,設置為null。標簽可以互相嵌套,內層的標簽處理程序可以通過它的parent屬性來訪問上層的標簽處理類。
調用相應的屬性設置器(set方法)設置標簽的屬性。屬性設置器在標簽處理程序中定義,屬性值在JSP頁面中賦予,屬性在標簽庫描述文件中聲明。如果沒有定義屬性,就不調用此類方法。
調用doStartTag()方法處理開始標簽。這個方法可以返回EVAL\_BODY\_INCLUDE和SKIP\_BODY。當返回EVAL\_BODY\_INCLUDE時,就處理標簽的Body;如果返回SKIP\_BODY,則忽略標簽的Body。
調用doEndTag()方法處理結束標簽,這個方法可以返回EVAL\_PAGE和SKIP\_PAGE。當返回EVAL\_PAGE時,容器在標簽結束后將繼續處理JSP頁面的其它部分;如果返回SKIP\_PAGE,標簽結束后容器將不再處理JSP頁面的其它部分。
4\. 簡述SimpleTag接口的運行流程。
(1)容器每次遇到標簽時,創建新的標簽處理程序實例。
(2)調用setJspContext()和setParent()方法設置上下文環境。JspContext類是JSP 2.0 API中增加的,作為PageContext的父類。它將PageContent類中的信息抽象化,使簡單標簽可以在Servlet的請求應答環境之外運行。setParent()方法保存其父標志處理器的引用,以便嵌套的標志之間可以相互聯系和合作。只有這個標簽在另一個標簽之內時,才調用setParent()方法。
(3)調用每個屬性的setter方法以設置這些屬性。
(4)調用setJspBody()方法設置正文內容。標簽的正文內容用JspFragment對象表示,該對象由容器創建,通過setJspBody()方法傳遞給標志。JspFragment只能包含模板元素和動作元素,不允許包含腳本或腳本表達式。當頁面中無動作元素時,setJspBody()方法不會被調用。JspFragment類中的方法有:
abstract JspContext getJspContext():返回與JspFragment對象關聯的JspContext對象
abstract void invoke(Writer out):運行JspFragment中保存的內容,并輸出至參數指定的java.io.Writer對象中,
(5)調用doTag()方法,所有的標簽邏輯、迭代和對Body的處理等都在該方法中進行。
(6)在doTag()方法返回后,標簽處理結束。
5\. 寫出tld文件中聲明一個標簽的基本代碼。
????hello1
????jspex.tag.HelloTag1
????empty
????Simple Tag
?
6\. 簡述自定義標簽的開發步驟。
(1)創建自定義標簽,首先需要創建一個標簽處理程序,標簽處理程序是一個執行自定義標簽操作的Java類,必須實現特定的接口。
(2)其次要創建標簽庫描述文件.tld;標簽庫描述文件是一個XML文件,在其中聲明標簽名稱及其與標簽處理程序的對應,以及屬性、變量等。
(3)在JSP文件中使用自定義標簽時,要用taglib指令導入標簽庫 —— 即一組標簽/標簽處理程序對。
7\. 嵌套的自定義標簽,子標簽處理程序中如何獲取父標簽處理類的引用?
在子標志處理程序中通過getParent()方法獲取服務器傳遞的父標志處理類的引用,進而直接訪問父標志處理器實例或調用其上的方法。
8\. 簡述標志文件中屬性與變量的區別。
標志文件中屬性與變量的區別是:屬性在頁面中賦值,在.tag文件中獲取使用,變量在.tag文件中賦值,在頁面中獲取使用。
## **第15章** **標準標簽庫**
1\. 簡述JSTL與自定義標簽的關系。
JSTL (Java Server Pages Standard Tag Library)是由JCP (Java Commnunity Process)所制定的標準規范,它封裝了JSP開發中常見的功能,給Java Web開發人員提供一個標準的通用標簽庫。是已標準化的自定義標簽。
2\. JSP中使用JSTL需要哪些類庫包?
JSTL需要的jstl.jar、standard.jar
3\. 寫出JSP頁面中使用JSTL核心標簽庫時的taglib指令。
4\. 寫出JSTL中格式化日期的標簽格式。
" pattern="yyyy年MM月dd日HH點mm分ss秒" />
5\. 寫出JSTL中格式化數字的標簽格式。
//該結果被保存在"money"變量中,并將根據Locale環境顯示當地的貨幣格式。
?//-- $12.00
## **第4篇 ?JSP常用組件**
## **第16章** **文件上傳和下載組件**
1\. 文件上傳時對于選擇文件的表單Form有什么要求?
上傳文件時,對于選擇文件的Form表單,有兩個要求:
(1)METHOD應用POST,即METHOD="POST"。
(2)增加屬性:ENCTYPE="multipart/form-data"
2\. SmartUpload完成上傳和保存功能的方法是什么?
SmartUpload的upload()方法上傳文件到服務器;save()方法保存上傳的文件。
3\. 如何控制上傳文件的類型和大小?
SmartUpload的setAllowedFilesList()、setDeniedFilesList()、setMaxFileSize()方法可以控制上傳文件的大小,如:
// 只允許上傳htm/html/txt類型文件
mySmartUpload.setAllowedFilesList("htm,html,txt");
// 設置不允許上傳的文件類型
// 禁止上傳帶有exe, bat, jsp擴展名的文件和沒有擴展名的文件。
mySmartUpload.setDeniedFilesList("exe,bat,jsp,,");
// 設置允許上傳文件的大小限制
mySmartUpload.setMaxFileSize(50000);
4\. 如何控制文件的下載?
SmartUpload的setContentDisposition()方法,設定contentDisposition為null,以禁止瀏覽器自動打開文件,保證點擊鏈接后是下載文件。
## **第17章** **日志組件**
1\. Log4j的輸出級別設置為哪一級時,程序中的fatal()、error()和warn()方法會被執行,而info()、debug()和trace()方法不會被執行?
Log4j的輸出級別設置為WARN時,程序中的fatal()、error()和warn()方法會被執行,而info()、debug()和trace()方法不會被執行。
2\. 在屬性文件中定義輸出級別為Error,輸出至appender1,名稱為logger1的Logger,寫出其配置代碼。
log4j.logger.logger1\=ERROR,appender1
3\. 在屬性文件中定義輸出到文件log.txt,輸出格式為HTMLLayout,名稱為appender1的Appender,寫出其配置代碼。
log4j.appender.?appender1\=org.apache.log4j.FileAppender
log4j.appender.?appender1.File=log.txt
log4j.appender.?appender1.layout=org.apache.log4j.HTMLLayout
4\. 使用屬性文件.property配置Log4j日志,在程序中如何加載配置文件?使用XML文件配置又如何加載?
在應用程序中,通常使用PropertyConfigurator.configure()方法加載屬性配置文件,使用DOMConfigurator.configure()方法加載XML配置文件,對Log4j進行初始化。如果創建Logger實例前,Log4j沒有被初始化,靜態初始化程序根據log4j.configuration屬性的默認值,自動查找/WEB-INF/classes/目錄下的log4j.xml或者log4j.properties。如果找到任一配置文件,調用相應的configure()方法,加載配置文件,并初始化Log4j。
5\. 簡述commons-logging的LogFactory.getLog()方法查找底層日志工具的過程。
LogFactory.getLog()方法啟動一個發現過程,即找出必需的底層日志記錄功能的實現,具體的發現過程如下:
(1)commons-logging首先在類路徑中尋找一個commons-logging.properties文件。這個屬性文件必須定義org.apache.commons.logging.Log屬性,它的值應該是上述任意Log接口實現的完整限定名稱。
(2)如果上面的步驟失敗,commons-logging檢查系統屬性
org.apache.commons.logging.Log。
(3)如果沒有設置org.apache.commons.logging.Log系統屬性,commons-logging將在類路徑中尋找Log4j的類,如果找到了,commons-logging就使用Log4j。其中,Log4j本身的屬性仍要通過log4j.properties文件正確配置。
(4)如果上述查找均沒找到適當的Logging API,但應用程序正運行在JRE1.4或更高版本上,則默認使用JRE1.4的日志記錄功能。
(5)最后,如果上述操作都失敗,則將使用內建的SimpleLog,把所有日志信息直接輸出到System.err。
6\. 簡述應用程序使用commons-logging進行日志記錄的步驟。
(1)建立配置文件commons-logging.properties,在其中指定使用Log4j作為底層日志組件。該文件應放置于/WEB-INF/classes/目錄下。
(2)建立Log4j的配置文件。
(3)在應用程序中使用commons-logging API記錄日志。
- Java Web項目開發學習手冊
- 一、B/S開發環境搭建
- 1.1 tomcat服務器目錄結構及作用
- 1.2 在IDE開發工具上配置tomcat服務器
- 1.3 簡單web項目在tomcat服務器上運行的方法
- 1.4 開發工具設置
- 1.5 總結
- 二、Servlet技術應用
- 2.1 HttpServlet中的主要方法及應用
- 2.1.1 基于Eclipse完成一個JavaWeb項目
- 2.2 HttpRequest,HttpResponse的應用
- 2.2.1客戶端請求
- 2.2.2服務器響應
- 2.2.3Servlet HTTP 狀態碼
- 2.2.4圖片驗證碼類
- 2.2.5注冊模擬實現(帶驗證碼)
- 2.3 ServletConfig對象和ServletContext對象的概念
- 2.4 總結
- 三、JSP技術應用
- 3.1 JSP基本語法
- 3.2 JSP標簽和指令
- 3.3 JSP中的隱式對象
- 3.4 常用應用操作
- 3.4.1 JSP客戶端請求
- 3.4.2 JSP服務器響應
- 3.4.3 HTTP狀態碼
- 3.4.4 表單處理
- 3.4.5 過濾器
- 3.4.6 Cookie處理
- 3.4.7 Session處理
- 3.4.8 文件上傳
- 3.4.9 日期處理
- 3.4.10 頁面重定向
- 3.4.11 點擊量統計
- 3.4.12 自動刷新
- 3.4.13 發送郵件
- 3.5 JSP高級應用
- 3.5.1 JSP標準標簽庫(JSTL)
- 3.5.2 JSP連接數據庫
- 3.5.3 JSP XML數據處理
- 3.5.4 JSP JavaBean
- 3.5.5 自定義標簽
- 3.5.6 表達式語言
- 3.5.7 異常處理
- 3.5.8 調試
- 3.5.9 JSP國際化
- 3.6 實踐代碼
- 3.6.1 實踐代碼
- 3.6.2 項目實戰
- 3.7 總結
- 四、MVC思想的理解和搭建MVC
- 4.1 MVC設計模式的思想
- 4.2 MVC設計模式的實現步驟
- 4.3 項目實踐
- 4.4 總結
- 五、EL表達式和JSTL技術
- 5.1 EL表達式及其應用
- 5.2 常用的JSTL標簽的應用
- 5.3 項目實踐
- 5.4 總結
- 六、Cookie和Session
- 6.1 cookie對象的概念和應用
- 6.2 session對象的概念和應用
- 6.3 項目實踐
- 6.4 總結
- 七、過濾器技術應用
- 7.1 Filter的概念及應用
- 7.2 Filter、FilterChain、FilterConfig 介紹
- 7.3 用戶登錄過濾案例
- 7.4 項目實戰
- 7.5總結
- 八、異步請求技術
- 8.1 JSON數據格式
- 8.2 使用AJAX實現異步請求
- 8.3 用戶名校驗案例
- 8.4小結
- 綜合項目技術實訓
- 1.BS項目開發項目實戰
- 2.項目需求分析和系統設計
- 2.1需求分析
- 2.2類型模型設計
- 2.3原型設計
- 3.項目數據庫分析和系統設計
- 4.BS項目編程實現
- 4.1搭建框架和命名規約
- 4.2實現步驟
- 4.2.1創建實體類
- 4.2.2創建過濾器類
- 4.2.3創建工具類
- 4.2.4創建DAO接口及其實現類
- 4.2.5創建Service接口及其實現類
- 4.2.6創建測試類
- 4.2.7創建控制器類
- 5.企業開發流程規范
- 6.總結
- 九、練習題及答案
- 企業開發常用技術
- 1.Maven技術
- Java命名規范解讀
- 參考資料
- 開發中常用的應用服務器和Web服務器