Java Web應(yīng)用開發(fā)項(xiàng)目教程 課件 王俊松 第6-12章 基于MVC模式的訂單模塊 -JSP技術(shù)_第1頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程 課件 王俊松 第6-12章 基于MVC模式的訂單模塊 -JSP技術(shù)_第2頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程 課件 王俊松 第6-12章 基于MVC模式的訂單模塊 -JSP技術(shù)_第3頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程 課件 王俊松 第6-12章 基于MVC模式的訂單模塊 -JSP技術(shù)_第4頁(yè)
Java Web應(yīng)用開發(fā)項(xiàng)目教程 課件 王俊松 第6-12章 基于MVC模式的訂單模塊 -JSP技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩234頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院第6章基于MVC模式的訂單模塊■本章要點(diǎn):

前臺(tái)訂單操作功能設(shè)計(jì)與實(shí)現(xiàn)后臺(tái)訂單操作功能設(shè)計(jì)與實(shí)現(xiàn)Servlet控制器設(shè)計(jì)與實(shí)現(xiàn)模型JavaBean業(yè)務(wù)操作設(shè)計(jì)與實(shí)現(xiàn)MVC開發(fā)模式JSP與Servlet關(guān)系6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)前臺(tái):會(huì)員查看自己所有的訂單在前臺(tái)JSP頁(yè)面(cartSelect.jsp)可以提交四種請(qǐng)求:

1.查看自己的所有訂單

2.在自己所有的訂單中查看已經(jīng)出貨的訂單

3.在自己所有的訂單中查看尚未出貨的訂單

4.查看自己某一訂單的詳細(xì)信息6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)功能圖6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)操作流程6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)

后臺(tái)管理員:后臺(tái)JSP頁(yè)面,可以提交六種請(qǐng)求:

1.查看商城所有的訂單

2.查看所有已經(jīng)出貨的訂單

3.查看所有尚未出貨的訂單

4.查看某一訂單的詳細(xì)信息

5.對(duì)某一訂單進(jìn)行出貨操作

6.刪除某一訂單6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)功能圖6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■功能分析與設(shè)計(jì)

●MVC開發(fā)模式

通常這種分層方式被稱為MVC(ModelViewController)三層結(jié)構(gòu)。請(qǐng)求由Controller(控制器)開始,分發(fā)給對(duì)應(yīng)業(yè)務(wù)操作,Model(模型)代表的數(shù)據(jù)模型承擔(dān)業(yè)務(wù)操作,最后將得到的結(jié)果送到View(視圖)層顯示。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■訂單顯示開發(fā)流程(orderList.jsp)

登錄會(huì)員點(diǎn)擊“查看訂單”菜單,向Servlet容器發(fā)送請(qǐng)求,Servlet容器接收客戶請(qǐng)求,查詢會(huì)員所有訂單信息,最后將響應(yīng)結(jié)果轉(zhuǎn)發(fā)到訂單顯示頁(yè)面。訂單顯示頁(yè)面如下:6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet容器根據(jù)orderAction區(qū)分客戶請(qǐng)求主要涉及:查當(dāng)前用戶訂單:orderAction="orderAbstract"))返回:list=order.selectOrderByName(curUserName)orderAction.equals("orderDelivered")返回:list=order.selectOrderByNameAndDeliverySign(用戶,出貨標(biāo)志);某個(gè)訂單詳細(xì)信息:orderAction="orderDetail"))返回:list=orderDetail.selectOrderDetailByNumber(orderId);6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■開發(fā)流程1.添加“查詢訂單”入口,發(fā)起的http請(qǐng)求。2.在類OrderDao.java中,定義查詢會(huì)員訂單的方法。3.創(chuàng)建Servlet控制器類OrderServlet.java,重寫doPost()方法,在方法中完成業(yè)務(wù)邏輯:(1)獲取會(huì)員請(qǐng)求類別信息,存到orderAction中;(2)響應(yīng)http查詢訂單請(qǐng)求,執(zhí)行相應(yīng)的業(yè)務(wù)邏輯;(3)調(diào)用方法,從后臺(tái)取得會(huì)員所有訂單資料;(4)轉(zhuǎn)發(fā)頁(yè)面至orderList.jsp頁(yè)面,顯示訂單信息。4.修改配置文件web.xml。5.創(chuàng)建訂單顯示頁(yè)面orderList.jsp頁(yè)面,從request中取得訂單信息并顯示。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■顯示訂單詳細(xì)開發(fā)流程概述(orderItemList.jsp

控制器orderAction和orderId的值,確定需執(zhí)行的操作;其中第一個(gè)參數(shù)確定是顯示詳細(xì)訂單信息,第二個(gè)參數(shù)是訂單編號(hào);形如,http://localhost:8080/estore/OrderServlet?orderAction=orderDetail&orderId=2014100711402202921386.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■編程詳解orderItemList.jsp1.添加查詢?nèi)肟冢瑐鬟f訂單號(hào)orderId,發(fā)起http請(qǐng)求。2.添加方法OrderDetailDao.selectOrderDetailByNumber(StringorderId)。3.在doPost()中響應(yīng)http“訂單詳細(xì)信息”請(qǐng)求,并完成業(yè)務(wù)處理。4.新建orderItemList.jsp頁(yè)面,從request中取得訂單詳細(xì)集合,遍歷集合,顯示訂單信息。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet控制器OrderServlet.java的實(shí)現(xiàn)Servlet與JspJSP是一種特殊的Servlet,所有的JSP頁(yè)面最終都會(huì)被服務(wù)器轉(zhuǎn)換成Servlet來(lái)執(zhí)行。JSP頁(yè)面被請(qǐng)求時(shí),服務(wù)器會(huì)先根據(jù)JSP頁(yè)面生成Java文件,然后使用jdk的編譯器將此文件編譯,得到的class文件處理用戶的請(qǐng)求并返回響應(yīng)。再次請(qǐng)求JSP頁(yè)面,服務(wù)器先檢查JSP文件是否被修改過(guò)修改:重新生成Java,重新編譯沒(méi)有修改:直接運(yùn)行上次的class文件

6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet控制器OrderServlet.java的實(shí)現(xiàn)●JSP文件運(yùn)行過(guò)程圖6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例第一步:編寫HelloServlet.java類,編譯成class放在WEB-INF/classes下。packageservlet;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassHelloServletextends

HttpServlet{

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();out.println("hello");}}HelloServlet在doGet()方法中獲取response(響應(yīng)),寫入“hello”。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例第二步:修改WEB-INF目錄下的web.xml,添加HelloServlet的配置信息。<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"version="2.4"><servlet><servlet-name>HlloeServlet</servlet-name><servlet-class>servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/HelloServlet</url-pattern></servlet-mapping></web-app>6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例運(yùn)行結(jié)果如下:6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例編寫一個(gè)效果與HelloServlet完全一樣的hello.jsp放在WEB-INF目錄下運(yùn)行結(jié)果6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作示例Hello.jsp文件編譯后所在文件目錄圖

在Catalina/localhost/org/apache/jsp目錄下,可以看到兩個(gè)文件,分別是hello_jsp.class和hello_jsp.java。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第一步)6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第二步)6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第三步)6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)

1)為OrderServlet添加方法和完善doPost()方法和doget()方法

2)OrderServlet控制器根據(jù)操作元素orderAction的值確定執(zhí)行相應(yīng)原動(dòng)作:前臺(tái)已經(jīng)響應(yīng)了orderList和orderDetails,和按出貨狀態(tài)查詢的請(qǐng)求代碼,后臺(tái)主要涉及到下列標(biāo)識(shí)orderDelivered,deliverySign是訂單發(fā)貨標(biāo)志selectAllOrder是查詢所有用戶訂單Despatch是根據(jù)獲取的orderId設(shè)置出貨狀態(tài)deleteOrder是根據(jù)獲取的orderId刪除指定訂單等實(shí)現(xiàn)了管理員對(duì)訂單的增刪改查要求。6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法

if(orderAction.equals("despatch")){//根據(jù)獲取的orderId出貨Listlist=newArrayList();Stringi=request.getParameter("i");if(i!=null)request.setAttribute("i",i);order.updateSignOrder(request.getParameter("orderId").toString());//更改出貨狀態(tài)list=order.selectAllOrder();//刷新訂單顯示request.setAttribute("AllOrder",list);request.getRequestDispatcher("pages/admin/order/orderSelect.jsp").forward(request,response);}6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法

//后臺(tái)所有客戶訂單顯示if(orderAction.equals("selectAllOrder")){//查詢所有訂單Listlist=newArrayList();Stringi=request.getParameter("i");if(i!=null)request.setAttribute("i",i);list=order.selectAllOrder();request.setAttribute("AllOrder",list);request.getRequestDispatcher("pages/admin/order/orderList.jsp").forward(request,response);}6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法if(orderAction.equals("deleteOrder")){//根據(jù)獲取的orderId刪除指定訂單Listlist=newArrayList();Stringi=request.getParameter("i");if(i!=null)request.setAttribute("i",i);order.deleteOrder(request.getParameter("orderId").toString());//刪除指定orderId訂單list=order.selectAllOrder();//所有訂單重新讀取繼續(xù)顯示request.setAttribute("AllOrder",list);request.getRequestDispatcher("pages/admin/order/orderList.jsp").forward(request,response);}6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■創(chuàng)建Servlet類OrderServlet.java(第四步)為OrderServlet添加方法和完善doPost()方法和doget()方法其它增刪改查的功能均與上述例子類似//若上述標(biāo)志均不滿足,則顯示主頁(yè)面else{//沒(méi)有對(duì)應(yīng)的action,顯示主頁(yè)面out.println("<script>parent.location.href='/estore/pages/product/main.jsp';</script>");}out.flush();out.close();…6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■模型和JavaBean

根據(jù)OrderServet方法調(diào)用請(qǐng)求,在OrderDao.java中添加相應(yīng)的方法:6.1使用JSP+Servlet+JavaBean

實(shí)現(xiàn)訂單操作■Servlet技術(shù)特性分析

Servlet可完成如下功能:

(1)創(chuàng)建動(dòng)態(tài)完整的HTML頁(yè)面(2)創(chuàng)建可嵌入的HTML片段(3)與其它服務(wù)器資源(包括數(shù)據(jù)庫(kù)和基于Java的應(yīng)用程序)進(jìn)行通信(4)實(shí)時(shí)處理多個(gè)客戶的請(qǐng)求(5)對(duì)特殊的處理采用MIME類型過(guò)濾數(shù)據(jù),如圖像轉(zhuǎn)換(6)將定制的處理提供給所有服務(wù)器的標(biāo)準(zhǔn)例行程序。例如,Servlet可以修改如何認(rèn)證用戶6.2Servlet知識(shí)總結(jié)■Servlet的生命周期初始化 服務(wù)器創(chuàng)建一個(gè)Servlet實(shí)例并且調(diào)用Servlet的init()方法初始化Servlet裝入:如果已配置自動(dòng)裝入選項(xiàng),則在服務(wù)器啟動(dòng)時(shí)自動(dòng)裝入客戶機(jī)首次向Servlet發(fā)出請(qǐng)求重新裝入Servlet請(qǐng)求處理 服務(wù)器調(diào)用Servlet的service()方法,service()方法從“請(qǐng)求”對(duì)象獲得請(qǐng)求信息、處理該請(qǐng)求并用“響應(yīng)”對(duì)象的方法以將響應(yīng)傳回客戶機(jī)。service()方法可以調(diào)用其它方法來(lái)處理請(qǐng)求,例如doGet()、doPost()或其它的方法。終止 當(dāng)服務(wù)器不再需要Servlet,或重新裝入Servlet的新實(shí)例時(shí),服務(wù)器會(huì)調(diào)用Servlet的destroy()方法。6.2Servlet知識(shí)總結(jié)■JavaServletAPIinit()方法

在Servlet的生命期中,僅執(zhí)行一次init()方法。在服務(wù)器裝入Servlet時(shí)執(zhí)行的??梢赃M(jìn)行配置,在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問(wèn)Servlet時(shí)裝入Servlet。無(wú)論有多少客戶機(jī)訪問(wèn)Servlet,都不會(huì)重復(fù)執(zhí)行init()service()方法

service()方法是Servlet的核心。每當(dāng)一個(gè)客戶請(qǐng)求一個(gè)HttpServlet對(duì)象,該對(duì)象的service()方法就要被調(diào)用,而且傳遞給這個(gè)方法一個(gè)“請(qǐng)求”(ServletRequest)對(duì)象和一個(gè)“響應(yīng)”(ServletResponse)對(duì)象作為參數(shù)。 在HttpServlet中已存在service()方法。缺省的服務(wù)功能是調(diào)用與HTTP請(qǐng)求的方法相應(yīng)的do功能。Servlet編程:覆蓋doXxx()方法,GET:doGet()6.2Servlet知識(shí)總結(jié)■

JavaServletAPI

destroy()方法

destroy()方法僅執(zhí)行一次,即在服務(wù)器停止且卸載Servlet時(shí)執(zhí)行該方法。

GetServletConfig()方法

GetServletConfig()方法返回一個(gè)ServletConfig對(duì)象,該對(duì)象用來(lái)返回初始化參數(shù)和ServletContext。ServletContext接口提供有關(guān)servlet的環(huán)境信息。

GetServletInfo()方法

GetServletInfo()方法是一個(gè)可選的方法,它提供有關(guān)servlet的信息,如作者、版本、版權(quán)。6.2Servlet知識(shí)總結(jié)■創(chuàng)建HTTPServlet類

四個(gè)步驟:

1)擴(kuò)展HttpServlet抽象類

2)重載適當(dāng)?shù)姆椒?。如覆蓋(或稱為重寫)doGet()或doPost()方法

3)用HttpServletRequest對(duì)象獲取請(qǐng)求信息,常用方法:

getParameterNames()getParameter()getParameterValues()4)生成HTTP響應(yīng)。使用HttpServletResponse對(duì)象生成響應(yīng),“響應(yīng)”對(duì)象含有g(shù)etWriter()方法以返回一個(gè)PrintWriter對(duì)象。使用PrintWriter的print()和println()方法以編寫Servlet響應(yīng)來(lái)返回給客戶機(jī)?;蛘?,直接使用out對(duì)象輸出有關(guān)HTML文檔內(nèi)容。6.2Servlet知識(shí)總結(jié)■Servlet的配置1)Servlet的名稱、類和其它選項(xiàng)的配置在web.xml文件:

<servlet><description>manager</description><display-name>manager</display-name><servlet-name>OrderServlet</servlet-name><servlet-class>our.OrderServlet</servlet-class></servlet>

6.2Servlet知識(shí)總結(jié)■Servlet的配置2)初始化參數(shù)

Servlet可以配置一些初始化參數(shù):

<servlet><init-param><param-name>number</param-name><param-value>1000</param-value></init-param></servlet>

可以通過(guò)init()方法體中調(diào)用getInitParameter()方法訪問(wèn)。6.2Servlet知識(shí)總結(jié)■Servlet的配置3)Servlet的映射在web.xml配置文件中可以給一個(gè)Servlet做多個(gè)映射,因此可以通過(guò)不同的方法訪問(wèn)這個(gè)Servlet。

<servlet-mapping><servlet-name>OrderServlet</servlet-name><url-pattern>/OrderServlet</url-pattern></servlet-mapping>

第6章基于MVC模式的訂單模塊■思考題Servlet與Servlet之間以及Servlet與Jsp之間是如何實(shí)現(xiàn)通信的?Jsp和Servlet是什么關(guān)系?各有什么優(yōu)點(diǎn)?MVC開發(fā)模式的優(yōu)點(diǎn)是什么?利用MVC模式改寫“商品展示”模塊。JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院第7章使用過(guò)濾器實(shí)現(xiàn)用戶授權(quán)驗(yàn)證■本章要點(diǎn):

Servlet過(guò)濾器開發(fā)技術(shù)用戶授權(quán)驗(yàn)證功能模塊設(shè)計(jì)與實(shí)現(xiàn)

Servlet過(guò)濾器技術(shù)特性分析

Servlet過(guò)濾器的典型應(yīng)用7.1使用Servlet過(guò)濾器實(shí)現(xiàn)

用戶授權(quán)驗(yàn)證功能■用戶登錄驗(yàn)證功能分析Session中留下相應(yīng)的用戶對(duì)象作為標(biāo)識(shí)每個(gè)頁(yè)面或Servlet中都添加身份驗(yàn)證的代碼顯然會(huì)對(duì)編程造成很大的麻煩,也會(huì)增加多余的代碼。而Servlet過(guò)濾器可以截取從客戶端發(fā)送到服務(wù)器的請(qǐng)求,并作出處理答復(fù)。7.1使用Servlet過(guò)濾器實(shí)現(xiàn)

用戶授權(quán)驗(yàn)證功能■過(guò)濾器應(yīng)用控制流程如下圖

7.1使用Servlet過(guò)濾器實(shí)現(xiàn)

用戶授權(quán)驗(yàn)證功能■Servlet過(guò)濾器實(shí)現(xiàn)一創(chuàng)建過(guò)濾器SessionFilter,通過(guò)NEW命令創(chuàng)建一個(gè)Class文件,配置如下

7.1使用Servlet過(guò)濾器實(shí)現(xiàn)

用戶授權(quán)驗(yàn)證功能■Servlet過(guò)濾器實(shí)現(xiàn)二在doFilter方法中放入過(guò)濾行為:HttpServletRequest

httpreq=(HttpServletRequest)request;

HttpServletResponse

httpres=(HttpServletResponse)response;

HttpServletResponseWrapperwrapper=newHttpServletResponseWrapper((Http-ServletResponse)response);//通過(guò)配置參數(shù)對(duì)象config獲取配置信息中的初始化參數(shù)“l(fā)oginstrings”(需要過(guò)濾的頁(yè)面)StringloginStrings=config.getInitParameter("logonStrings");//獲取配置信息中的初始化參數(shù)“includeStrings”(需要過(guò)濾的頁(yè)面?。㏒tringincludeStrings=config.getInitParameter("includeStrings");//沒(méi)有登錄則需要重定向到的頁(yè)面StringredirectPath=httpreq.getContextPath()+config.getInitParameter("redirectPath");…7.1使用Servlet過(guò)濾器實(shí)現(xiàn)

用戶授權(quán)驗(yàn)證功能■Servlet過(guò)濾器實(shí)現(xiàn)三調(diào)用FilterChain對(duì)象的doFilter方法:

chain.doFilter(request,response);

7.1使用Servlet過(guò)濾器實(shí)現(xiàn)

用戶授權(quán)驗(yàn)證功能■Servlet過(guò)濾器實(shí)現(xiàn)四對(duì)相應(yīng)的servlet和JSP頁(yè)面注冊(cè)過(guò)濾器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。7.1.3Servlet過(guò)濾器技術(shù)特性分析■Servlet過(guò)濾器工作原理圖

7.1.3Servlet過(guò)濾器技術(shù)特性分析■Servlet過(guò)濾器使用注意

提示:在過(guò)濾器截獲響應(yīng)對(duì)象的時(shí)候,如果輸出流被servlet關(guān)閉了,那么過(guò)濾器就不能夠再改變輸出流中的響應(yīng)信息。在servlet的實(shí)現(xiàn)中,用刷新輸出流,不能夠關(guān)閉輸出流。如:

PrintWriterout=response.getPrintWriter();

…out.flush();//如果希望有過(guò)濾器截獲并處理響應(yīng)信息,此處不能用out.close()代替out.flush()。7.1.3Servlet過(guò)濾器技術(shù)特性分析■Servlet過(guò)濾器鏈工件原理7.1.3Servlet過(guò)濾器技術(shù)特性分析■創(chuàng)建Servlet過(guò)濾器和實(shí)現(xiàn)其編程接口

1、建立一個(gè)實(shí)現(xiàn)Filter接口的類publicclassSessionFilterimplementsFilter所有過(guò)濾器都必須實(shí)現(xiàn)javax.servlet.Filter。這個(gè)接口包含三個(gè)方法,分別為doFilter、init和destroy。7.1.3Servlet過(guò)濾器技術(shù)特性分析■創(chuàng)建Servlet過(guò)濾器和實(shí)現(xiàn)其編程接口

2、將過(guò)濾行為放入doFilter方法

doFilter方法為過(guò)濾器的關(guān)鍵。每當(dāng)調(diào)用一個(gè)過(guò)濾器時(shí),都要執(zhí)行doFilter。

doFilter執(zhí)行的步驟是基于傳入的信息的。因此,要利用作為doFilter的參數(shù)提供的ServletRequest。常用的是HttpServletRequest類型7.1.3Servlet過(guò)濾器技術(shù)特性分析■創(chuàng)建Servlet過(guò)濾器和實(shí)現(xiàn)其編程接口

3、調(diào)用FilterChain對(duì)象的doFilter方法

Filter接口的doFilter方法以一個(gè)FilterChain對(duì)象作為第三個(gè)參數(shù)。在調(diào)用該對(duì)象的doFilter方法時(shí),激活下一個(gè)相關(guān)的過(guò)濾器。這個(gè)過(guò)程一般持續(xù)到鏈中最后一個(gè)過(guò)濾器為止。在最后一個(gè)過(guò)濾器調(diào)用其FilterChain對(duì)象的doFilter方法時(shí),激活請(qǐng)求資源(Servlet或JSP頁(yè)面等)。7.1.3Servlet過(guò)濾器技術(shù)特性分析■創(chuàng)建Servlet過(guò)濾器和實(shí)現(xiàn)其編程接口

4、部署過(guò)濾器過(guò)濾器是Web組件 部署描述符文件的兩個(gè)用于過(guò)濾器的元素:filter和filter-mappingfilter:過(guò)濾器定義

<filter>元素中又包含兩個(gè)必要的子元素<filter-name>和<filter-class>,用來(lái)定義過(guò)濾器的名稱一與過(guò)濾器相關(guān)的java類的路徑,還包含四個(gè)子元素<init-parm>、<icon>、<display-name>和<descryiption>filter-mapping:過(guò)濾器的映射配置 過(guò)濾器的映射配置可以利用過(guò)濾器映射到一個(gè)或多個(gè)Servlet和Jsp文件中,也可以映射到任意的URL中7.2servlet過(guò)濾器知識(shí)總結(jié)■Servlet過(guò)濾器的優(yōu)點(diǎn)以一種模塊化的或可重用的方式封裝公共的行為能夠?qū)⒏呒?jí)訪問(wèn)決策與表現(xiàn)代碼相分離能夠?qū)υS多不同的資源進(jìn)行批量性的更改

提示:過(guò)濾器只在與servlet規(guī)范2.3版兼容的服務(wù)器上有作用。7.3字符編碼過(guò)濾器packagecom.filter;publicclassEncodingFilterimplementsFilter{protectedFilterConfigfilterConfig;privateStringtargetEncoding="gb2312";//初始化過(guò)濾器,和一般的Servlet一樣,它也可以獲得初始參數(shù)。publicvoidinit(FilterConfigconfig)throwsServletException{this.filterConfig=config;

//從配置文件中獲得字符編碼格式

this.targetEncoding=config.getInitParameter("encoding");}//銷毀過(guò)濾器publicvoiddestroy(){this.filterConfig=null;}7.3字符編碼過(guò)濾器

//進(jìn)行過(guò)濾處理,這個(gè)方法最重要,所有過(guò)濾處理的代碼都在此實(shí)現(xiàn)。publicvoiddoFilter(ServletRequestsrequest,ServletResponsesresponse,FilterChainchain)throwsIOException,ServletException{System.out.println("使用以下方法對(duì)請(qǐng)求進(jìn)行編碼:encoding="+targetEncoding);HttpServletRequestrequest=(HttpServletRequest)srequest;//設(shè)置字符編碼格式request.setCharacterEncoding(targetEncoding);//把處理權(quán)發(fā)送到下一個(gè)

chain.doFilter(srequest,sresponse);}publicvoidsetFilterConfig(finalFilterConfigfilterConfig){this.filterConfig=filterConfig;}}7.3字符編碼過(guò)濾器在web.xml中進(jìn)行過(guò)濾器注冊(cè)和參數(shù)配置,具體配置信息如下:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>encoding</filter-name><filter-class>com.filter.EncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>gb2312</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>第7章使用過(guò)濾器實(shí)現(xiàn)用戶授權(quán)驗(yàn)證■思考題簡(jiǎn)述過(guò)濾器的基本編寫過(guò)程。如果不使用過(guò)濾器實(shí)現(xiàn)用戶授權(quán)驗(yàn)證功能,我們可以用什么技術(shù)來(lái)達(dá)到同樣的“用戶授權(quán)驗(yàn)證”功能?請(qǐng)使用過(guò)濾器實(shí)現(xiàn)用戶訪問(wèn)權(quán)限控制。例如:后臺(tái)管理用戶使用的JSP文件放在Admin文件夾中,只有后臺(tái)登錄的用戶才可以訪問(wèn),前臺(tái)登錄用戶不能訪問(wèn)!請(qǐng)編寫過(guò)濾器來(lái)實(shí)現(xiàn)?JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院

第8章使用監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■本章要點(diǎn):

Servlet監(jiān)聽器開發(fā)技術(shù)在線人數(shù)統(tǒng)計(jì)功能模塊設(shè)計(jì)與實(shí)現(xiàn)Servlet監(jiān)聽器技術(shù)特性分析Servlet監(jiān)聽器的典型應(yīng)用8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■在線人數(shù)統(tǒng)計(jì)功能分析在系統(tǒng)運(yùn)行過(guò)程中,了解當(dāng)前使用系統(tǒng)的用戶,有多少人在使用系統(tǒng)?具體又是哪些人在使用系統(tǒng)?實(shí)現(xiàn):session監(jiān)聽器javax.servlet.http.HttpSessionListener接口ServletContext監(jiān)聽器javax.servlet.ServletContextListener接口8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

第一步:創(chuàng)建監(jiān)聽器類OnlineCount.java,通過(guò)NEW命令創(chuàng)建一個(gè)Class文件,準(zhǔn)備實(shí)現(xiàn)ServletContextListener、HttpsessionListener接口的監(jiān)聽處理器類8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

生成處理器類代碼如下:publicclassOnlineCountimplementsServletContextListener,HttpSessionListener{publicvoidcontextInitialized(ServletContextEventsce){

//應(yīng)用程序初始化時(shí)啟動(dòng)}publicvoidcontextDestroyed(ServletContextEventsce){//應(yīng)用程序卸載時(shí)啟動(dòng)}publicvoidsessionCreated(HttpSessionEventse){//當(dāng)有用戶訪問(wèn)時(shí)啟動(dòng)}publicvoidsessionDestroyed(HttpSessionEventse){//當(dāng)有用戶退出時(shí)啟動(dòng)}}8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

第二步:為監(jiān)聽行為添加代碼:

1)為用戶訪問(wèn)監(jiān)聽行為添加代碼:publicvoidsessionCreated(HttpSessionEventse){HttpSessionsession=se.getSession();ServletContextcontext=session.getServletContext();Integercounter=(Integer)context.getAttribute("counter");counter=newInteger(Value()+1);//在線人數(shù)增1context.setAttribute("counter",counter);}8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

第二步:為監(jiān)聽行為添加代碼:2)為用戶退出監(jiān)聽行為添加代碼:publicvoidsessionDestroyed(HttpSessionEventse){HttpSessionsession=se.getSession();ServletContextcontext=session.getServletContext();Integercounter=(Integer)context.getAttribute("counter");counter=newInteger(Value()-1);//在線人數(shù)減1context.setAttribute("counter",counter);}8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

第二步:為監(jiān)聽行為添加代碼:3)為應(yīng)用程序初始化添加代碼:publicvoidcontextInitialized(ServletContextEventsce){ServletContextcontext=sce.getServletContext();Integercounter=newInteger(0);context.setAttribute("counter",counter);//初始化在線人數(shù)計(jì)數(shù)器}8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

第二步:為監(jiān)聽行為添加代碼:4)為應(yīng)用程序卸載添加代碼:publicvoidcontextDestroyed(ServletContextEventsce){ServletContextcontext=sce.getServletContext();context.removeAttribute("counter");//刪除在線人數(shù)計(jì)數(shù)器}8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

第三步:將session監(jiān)聽器配置到web.xml配置文件中:…<listener><listener-class>our.OnlineCount</listener-class></listener>…8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

第四步:顯示在線用戶的監(jiān)聽結(jié)果在需要顯示的JSP頁(yè)面frameLeft.jsp中加入如下代碼:<td><fontcolor=“orange”>在線人數(shù)

<%if(application.getAttribute("counter")!=null){%><%=application.getAttribute("counter")%><%}else{%>1<%}%></font></td>8.1使用Servlet監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■Servlet監(jiān)聽器實(shí)現(xiàn)

顯示效果如下圖所示:8.1.3Servlet監(jiān)聽器技術(shù)特性分析■Servlet事件監(jiān)聽器簡(jiǎn)介與Java的GUI事件監(jiān)聽器類似 按監(jiān)聽的對(duì)象劃分:

1.監(jiān)聽?wèi)?yīng)用程序環(huán)境對(duì)象(ServletContext)事件

2.監(jiān)聽用戶會(huì)話對(duì)象(HttpSession)事件

3.監(jiān)聽請(qǐng)求對(duì)象(ServletRequest)事件按監(jiān)聽的事件類劃分:

1.用于監(jiān)聽對(duì)象自身的創(chuàng)建和銷毀的事件監(jiān)聽器

2.用于監(jiān)聽對(duì)象中的屬性的增加和刪除的事件監(jiān)聽器

3.用于監(jiān)聽綁定到HttpSession中的某個(gè)對(duì)象的狀態(tài)的事件監(jiān)聽器8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽對(duì)象的創(chuàng)建、屬性和改變和銷毀

在一個(gè)web應(yīng)用程序的整個(gè)運(yùn)行周期內(nèi),web容器會(huì)創(chuàng)建和銷毀三個(gè)重要的對(duì)象,ServletContext,HttpSession,ServletRequest。在servlet2.4規(guī)范中定義了三個(gè)接口:

●ServletContextListener●HttpSessionListener●ServletRequestListener

8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽對(duì)象的創(chuàng)建、屬性和改變和銷毀

1.在ServletContextListener接口:publicvoidcontextInitialized(ServletcontextEventsce)

應(yīng)用程序部署時(shí)激發(fā);可以通過(guò)事件對(duì)象參數(shù)獲得當(dāng)前被創(chuàng)建的ServletContext對(duì)象publicvoidcontextDestroyed(ServletContextEventsce)

應(yīng)用程序卸載時(shí)激發(fā);可以通過(guò)事件對(duì)象參數(shù)獲得當(dāng)前被卸載的ServletContext對(duì)象。8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽域?qū)ο蟮膭?chuàng)建、屬性和改變和銷毀

2.在HttpSessionListneter接口:publicvoidsessionCreated(HttpSessionEventse)

創(chuàng)建一個(gè)新的Session對(duì)象時(shí)激發(fā);通過(guò)參數(shù)獲得當(dāng)前被創(chuàng)建的HttpSession對(duì)象publicvoidsessionDestroyed(HttpSessionEventse)

容器銷毀一個(gè)Session對(duì)象時(shí)激發(fā);通過(guò)參數(shù)獲得當(dāng)前被銷毀的HttpSession對(duì)象8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽域?qū)ο蟮膭?chuàng)建、屬性和改變和銷毀

3.在ServletRequestListener接口:publicvoidrequestInitialized(ServletRequestEventsre)容器創(chuàng)建一個(gè)新的Request請(qǐng)求對(duì)象時(shí)激發(fā);通過(guò)參數(shù)獲得當(dāng)前被創(chuàng)建的ServletRequest對(duì)象。publicvoidrequestDestroyed(ServletRequestEventsre)

容器銷毀一個(gè)Request請(qǐng)求對(duì)象時(shí)激發(fā);通過(guò)參數(shù)獲得當(dāng)前被銷毀的ServletRequest對(duì)象。8.2servlet監(jiān)聽器知識(shí)總結(jié)■Servlet監(jiān)聽器介紹

監(jiān)視和控制web應(yīng)用狀態(tài)的變化。

Servlet監(jiān)聽器是web應(yīng)用程序事件模型的一部分,當(dāng)web應(yīng)用中的某些狀態(tài)發(fā)生變化時(shí),Servlet容器將產(chǎn)生相應(yīng)的事件,此時(shí)監(jiān)聽器來(lái)接收和處理這些事件。

在Servlet2.4中有8個(gè)監(jiān)聽器,6個(gè)事件,ServletContext事件監(jiān)聽器、HTTPSession事件監(jiān)聽器和ServletRequest事件監(jiān)聽器。8.2servlet監(jiān)聽器知識(shí)總結(jié)■Servlet監(jiān)聽器8.2servlet監(jiān)聽器知識(shí)總結(jié)■Servlet上下文監(jiān)聽

1、ServletContextListener編程接口:“Web應(yīng)用程序的生命周期方法”。contextInitialized(ServletContextEventevent)

應(yīng)用程序被加載及初始化時(shí)激發(fā)contextDestoryed(ServletContextEventevent)

應(yīng)用程序被載出,即關(guān)閉時(shí)激發(fā)8.2servlet監(jiān)聽器知識(shí)總結(jié)■Servlet上下文監(jiān)聽2、ServletAttributeListener編程接口:attributeAdded(ServletContextAttributeEventevent)

如果有對(duì)象被加入Application時(shí)激發(fā)attributeReplaced(ServletContextAttributeEventevent)

如果在Application內(nèi)有對(duì)象取代另一個(gè)對(duì)象時(shí)激發(fā)attributeRemoved(ServletContextAttributeEventevent)

如果有對(duì)象被從Application移除時(shí)激發(fā)8.2servlet監(jiān)聽器知識(shí)總結(jié)■HTTP會(huì)話監(jiān)聽

1、HttpSessionListener編程接口:sessionCreated(HttpSessionEventevent)

創(chuàng)建新的Session對(duì)象時(shí)被激發(fā)。sessionDestoryed(HttpSessionEventevent)Session對(duì)象被銷毀時(shí)激發(fā)注:HttpSessionEvent類的主要方法:getSession(),可以使用此方法回傳一個(gè)Session對(duì)象。8.2servlet監(jiān)聽器知識(shí)總結(jié)■HTTP會(huì)話監(jiān)聽

2、HttpSessionAttributeListener

編程接口:attributeeAdded(HttpSessionBindingEventevent)

有對(duì)象被加入Session時(shí)激發(fā)attributeReplaced(HttpSessionBindingEventevent)

在Session,有對(duì)象取代另一個(gè)對(duì)象時(shí)激發(fā)attributeRemoved(HttpSessionBindingEventevent)

有對(duì)象從Session內(nèi)被移除時(shí)激發(fā)注:HttpSessionBindingEvent類主要有三個(gè)方法:getName()、getsession()、getValues()。8.2servlet監(jiān)聽器知識(shí)總結(jié)■HTTP會(huì)話監(jiān)聽

3、HttpBindingListener編程接口:實(shí)現(xiàn)監(jiān)聽Http會(huì)話中對(duì)象的綁定信息。唯一不需要在web.xml中設(shè)定ListenervalueBound(HttpSessionBindingEventevent)

有對(duì)象加入Session時(shí)會(huì)被自動(dòng)調(diào)用valueUnBound(HttpSessionBindingEventevent)

有對(duì)象從Session范圍內(nèi)移除時(shí)會(huì)被自動(dòng)調(diào)用8.2servlet監(jiān)聽器知識(shí)總結(jié)■HTTP會(huì)話監(jiān)聽

4、HttpSessionActivationListener編程接口:SessionDidActivate(HttpSessionEventevent) Session對(duì)象的狀態(tài)變?yōu)橛行顟B(tài)時(shí)激發(fā)SessionWillPassivate(HttpSessionEventevent) Session對(duì)象的狀態(tài)變?yōu)闊o(wú)效狀態(tài)時(shí)激發(fā)8.2servlet監(jiān)聽器知識(shí)總結(jié)■Servlet請(qǐng)求監(jiān)聽

1、ServletRequestListener編程接口:requestInitialized(ServletRequestEventevent)ServletRequest對(duì)象被加載及初始化時(shí)激發(fā)requestDestoryed(ServletRequestEventevent)ServletRequest對(duì)象被銷毀時(shí)激發(fā)8.2servlet監(jiān)聽器知識(shí)總結(jié)■Servlet請(qǐng)求監(jiān)聽

2、ServletRequestAttributeListener編程接口:attributeAdded(ServletRequestAttributeEventevent)

有對(duì)象被加入request范圍時(shí)激發(fā)。attributeReplaced(ServletRequestAttributeEventevent)

在request范圍內(nèi)有對(duì)象取代另一個(gè)對(duì)象時(shí)激發(fā)。attributeRemoved(ServletRequestAttributeEventevent)

有對(duì)象被從request范圍移除時(shí)激發(fā)。第8章使用監(jiān)聽器實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)■思考題簡(jiǎn)述編寫監(jiān)聽器的基本過(guò)程。編寫一個(gè)局域網(wǎng)監(jiān)聽器,本地訪問(wèn)可以不用登錄就能直接進(jìn)入主界面Index.jsp,如果是遠(yuǎn)程訪問(wèn)則需要將請(qǐng)求轉(zhuǎn)到登錄頁(yè)面Login.jsp?編寫一個(gè)用戶監(jiān)聽器,將每個(gè)登錄用戶訪問(wèn)的網(wǎng)站頁(yè)面全部記錄下來(lái)寫入一個(gè)數(shù)據(jù)庫(kù)?JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院第9章基于SpringMVC框架的應(yīng)用開發(fā)■本章要點(diǎn):

Spring框架概念SpringIoC容器Spring依賴注入SpringBean配置方式SpringMVC執(zhí)行流程SpringMVC接口基于SpringMVC的應(yīng)用程序創(chuàng)建9.1Spring框架■Spring簡(jiǎn)介:

SpringMVC是Spring提供的一個(gè)基于MVC設(shè)計(jì)模式的輕量級(jí)Web開發(fā)框架,本質(zhì)上相當(dāng)于Servlet。SpringMVC角色劃分清晰,分工明細(xì)。性能方面具有先天的優(yōu)越性,是當(dāng)今業(yè)界最主流的Web開發(fā)框架,最熱門的開發(fā)技能。9.1Spring框架■Spring的基本框架主要包含六大模塊:DAO、ORM、AOP、JEE、WEB、CORE。

9.2SpringIoC容器IoC不是一種技術(shù),只是一種思想,一個(gè)重要的面向?qū)ο缶幊痰姆▌t,IoC指的是將對(duì)象的創(chuàng)建權(quán)交給Spring去創(chuàng)建。IoC

容器是Spring的核心,也可以稱為Spring容器。Spring中使用的對(duì)象都由IoC

容器進(jìn)行實(shí)例化和初始化,包含從創(chuàng)建到銷毀的整個(gè)生命周期。有了IoC容器后,把創(chuàng)建和查找依賴對(duì)象的控制權(quán)交給了容器,由容器進(jìn)行注入組合對(duì)象。對(duì)象與對(duì)象之間是松散耦合,使得程序的整個(gè)體系結(jié)構(gòu)變得非常靈活。

9.3Spring依賴注入Spring

依賴注入(DependencyInjection,DI)和控制反轉(zhuǎn)含義相同,它們是從兩個(gè)角度描述的同一個(gè)概念。使用依賴注入可以更輕松的管理和測(cè)試應(yīng)用程序。使用Spring框架后,被調(diào)用者的實(shí)例不再由調(diào)用者創(chuàng)建,而是由IoC容器創(chuàng)建。IoC容器在創(chuàng)建被調(diào)用者的實(shí)例時(shí),會(huì)自動(dòng)將調(diào)用者需要的對(duì)象實(shí)例注入給調(diào)用者,調(diào)用者通過(guò)IoC容器獲得被調(diào)用者實(shí)例,這稱為依賴注入。

9.4SpringBean在Spring中,構(gòu)成應(yīng)用程序主干并由SpringIoC容器管理的對(duì)象稱為SpringBean。bean是任何Spring應(yīng)用程序的基本構(gòu)建塊。以前Java框架基本都采用XML作為配置文件,但是現(xiàn)在Java框架又不約而同地支持基于Annotation(注解)的“零配置”來(lái)代替XML配置文件,而在Spring3.x提供了三種選擇,分別是:基于XML的配置、基于注解的配置和基于Java類的配置。

9.4SpringBean首先需要?jiǎng)?chuàng)建JavaBean。BeanFactory.java類packagecom.njcit.Service;publicinterfaceBeanFactory{publicvoidBeantest();}BeanFactoryImpl.java類packagecom.njcit.service.impl;importcom.njcit.service.BeanFactory;publicclassBeanFactroyImplimplementsBeanFactory{@OverridepublicvoidBeantest(){

System.out.println("這是XML配置的bean!}}9.4SpringBean1.基于XML的配置<?xmlversion="1.0"encoding="UTF-8"?><beans

xmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:context="/schema/context"

xsi:schemaLocation="/schema/beas/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd"><beanid="beanFactroy"class="com.stonegeek.service.impl.BeanFactroyImpl"></beans>9.4SpringBean2.基于Annotation的配置<?xmlversion="1.0"encoding="UTF-8"?><beans

xmlns="/schema/beans"

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:context="/schema/context"

xsi:schemaLocation="/schema/beas/schema/beans/spring-beans-3.0.xsd/schema/context/schema/context/spring-context-3.0.xsd"><beanid="beanFactroy"class="com.stonegeek.service.impl.BeanFactroyImpl"></beans>9.5SpringMVCSpringMVC是什么?SpringMVC是結(jié)構(gòu)最清晰的Servlet+JSP+JavaBean的實(shí)現(xiàn),是一個(gè)典型的教科書式的MVC構(gòu)架。在SpringMVC框架中,Controller替換Servlet來(lái)?yè)?dān)負(fù)控制器的職責(zé),用于接收請(qǐng)求,調(diào)用相應(yīng)的Model進(jìn)行處理,處理器完成業(yè)務(wù)處理后返回處理結(jié)果。Controller調(diào)用相應(yīng)的View并對(duì)處理結(jié)果進(jìn)行視圖渲染,最終客戶端得到響應(yīng)信息。SpringMVC的注解驅(qū)動(dòng)和對(duì)REST風(fēng)格的支持,也是它最具特色的功能。SpringMVC與Spring框架是無(wú)縫集成,性能方面具有先天的優(yōu)越性,對(duì)于開發(fā)者來(lái)說(shuō),開發(fā)效率也高于其它的Web框架,在企業(yè)中的應(yīng)用越來(lái)越廣泛,成為主流的MVC框架。9.5SpringMVCSpringMVC的執(zhí)行流程9.5SpringMVCSpringMVC接口SpringMVC涉及到的組件有DispatcherServlet(前端控制器)、HandlerMapping(處理器映射器)、HandlerAdapter(處理器適配器)、Handler(處理器)、ViewResolver(視圖解析器)和View(視圖)。1)DispatcherServletDispatcherServlet是前端控制器,從圖9-2可以看出,SpringMVC的所有請(qǐng)求都要經(jīng)過(guò)DispatcherServlet來(lái)統(tǒng)一分發(fā)。DispatcherServlet相當(dāng)于一個(gè)轉(zhuǎn)發(fā)器或中央處理器,控制整個(gè)流程的執(zhí)行,對(duì)各個(gè)組件進(jìn)行統(tǒng)一調(diào)度,以降低組件之間的耦合性,有利于組件之間的拓展。2)HandlerMappingHandlerMapping是處理器映射器,其作用是根據(jù)請(qǐng)求的URL路徑,通過(guò)注解或者XML配置,尋找匹配的處理器(Handler)信息。3)HandlerAdapterHandlerAdapter是處理器適配器,其作用是根據(jù)映射器找到的處理器(Handler)信息,按照特定規(guī)則執(zhí)行相關(guān)的處理器(Handler)。9.5SpringMVCSpringMVC接口4)HandlerHandler是處理器,和JavaServlet扮演的角色一致。其作用是執(zhí)行相關(guān)的請(qǐng)求處理邏輯,并返回相應(yīng)的數(shù)據(jù)和視圖信息,將其封裝至ModelAndView對(duì)象中。5)ViewResolverViewResolver是視圖解析器,其作用是進(jìn)行解析操作,通過(guò)ModelAndView對(duì)象中的View信息將邏輯視圖名解析成真正的視圖View(如通過(guò)一個(gè)JSP路徑返回一個(gè)真正的JSP頁(yè)面)。6)ViewView是視圖,其本身是一個(gè)接口,實(shí)現(xiàn)類支持不同的View類型(JSP、FreeMarker、Excel等)。基于SpringMVC的應(yīng)用程序創(chuàng)建E-STORE后臺(tái)登錄頁(yè)面基于SpringMVC的應(yīng)用程序創(chuàng)建E-STORE后臺(tái)登錄后管理頁(yè)面基于SpringMVC的應(yīng)用程序創(chuàng)建數(shù)據(jù)表的概念設(shè)計(jì)管理員信息實(shí)體。管理員信息實(shí)體包括管理員編號(hào)、管理員名稱、密碼、管理員真實(shí)姓名、年齡、管理員類型標(biāo)識(shí)等屬性。其中管理員類型標(biāo)識(shí)用來(lái)區(qū)分管理員的類型,字段是“1”表示為超級(jí)管理員,“0”表示為普通管理員。tb_manager表的結(jié)構(gòu)基于SpringMVC的應(yīng)用程序創(chuàng)建功能實(shí)現(xiàn)流程設(shè)計(jì)(1)用戶在managerLogin.jsp頁(yè)面中填寫登錄用戶名和密碼,以請(qǐng)求參數(shù)的形式提交給控制器ManagerController;(2)ManagerController(Controller層)調(diào)用Service層,Service層調(diào)用Dao層,Dao層完成對(duì)數(shù)據(jù)庫(kù)的查詢,最后逐層返回結(jié)果給ManagerController來(lái)處理客戶請(qǐng)求;(3)若登錄驗(yàn)證成功,跳轉(zhuǎn)至Manager主頁(yè)ManagerIndex.jsp;(4)登錄驗(yàn)證失敗則跳轉(zhuǎn)至登錄頁(yè)面managerLogin.jsp?;赟pringMVC的應(yīng)用程序創(chuàng)建新建工程并引入SpringMVC支持在Eclipse中新建一個(gè)項(xiàng)目,項(xiàng)目名稱為estore_back,如圖。在項(xiàng)目創(chuàng)建完成后,可以在WebContent/WEB-INF下看到自動(dòng)生成的web.xml文件?;赟pringMVC的應(yīng)用程序創(chuàng)建基于SpringMVC的應(yīng)用程序創(chuàng)建將提供的jar包復(fù)制到WebContent/WEB-INF下的lib文件夾內(nèi)基于SpringMVC的應(yīng)用程序創(chuàng)建創(chuàng)建Controller層

創(chuàng)建Service層基于SpringMVC的應(yīng)用程序創(chuàng)建創(chuàng)建Dao層

創(chuàng)建配置文件

基于SpringMVC的應(yīng)用程序創(chuàng)建創(chuàng)建實(shí)體類和工具類在cn.estore下新建包domain;domain包下新建四個(gè)類:CategoryBranch、

CategoryMain、Manager和Product。在cn.estore下新建包utils;在utils包下新建類DBHelper拷貝靜態(tài)資源并修改web.xml配置文件拷貝給出的靜態(tài)資源pages文件夾和resources文件夾到WebContent下,此時(shí)會(huì)出現(xiàn)jsp報(bào)錯(cuò),請(qǐng)將Tomcat依賴添加到項(xiàng)目中基于SpringMVC的應(yīng)用程序創(chuàng)建部署應(yīng)用與測(cè)試(1)部署本W(wǎng)eb應(yīng)用系統(tǒng)。本例中使用的服務(wù)器為Tomcat,在Eclipse中配置Tomcat,然后將本示例中的Web項(xiàng)目部署到目標(biāo)服務(wù)器Tomcat中。(2)啟動(dòng)服務(wù)器。(3)部署基于SpringMVC的應(yīng)用程序創(chuàng)建在瀏覽器中輸入“http://localhost:8080/estore_back/”JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院第10章后臺(tái)用戶管理模塊■本章要點(diǎn):

后臺(tái)管理總體規(guī)劃

管理員登錄功能模塊設(shè)計(jì)與實(shí)現(xiàn)

管理員查詢功能模塊設(shè)計(jì)與實(shí)現(xiàn)

管理員添加功能模塊設(shè)計(jì)與實(shí)現(xiàn)

管理員刪除功能模塊設(shè)計(jì)與實(shí)現(xiàn)10.1E-Store后臺(tái)總體規(guī)劃后臺(tái)開發(fā)相關(guān)文件的位置描述如下:(1)JSP存放在WebContent/pages。(2)實(shí)體類存放在cn.estore.domain。(3)工具類存放在cn.estore.utils。(4)Controller層類存放在cn.estore.controller。(5)Service層接口存放在cn.estore.service,實(shí)現(xiàn)類存放在cn.estore.serviceI

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論