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

下載本文檔

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

文檔簡介

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

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

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

1.查看自己的所有訂單

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

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

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

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

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

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

后臺管理員:后臺JSP頁面,可以提交六種請求:

1.查看商城所有的訂單

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

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

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

5.對某一訂單進行出貨操作

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

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

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

●MVC開發(fā)模式

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

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

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

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

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

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

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

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

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

6.1使用JSP+Servlet+JavaBean

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

實現(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

實現(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

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

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

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

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

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

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

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

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

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

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

實現(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

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

//后臺所有客戶訂單顯示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

實現(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

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

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

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

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

Servlet可完成如下功能:

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

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

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

JavaServletAPI

destroy()方法

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

GetServletConfig()方法

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

GetServletInfo()方法

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

四個步驟:

1)擴展HttpServlet抽象類

2)重載適當(dāng)?shù)姆椒āH绺采w(或稱為重寫)doGet()或doPost()方法

3)用HttpServletRequest對象獲取請求信息,常用方法:

getParameterNames()getParameter()getParameterValues()4)生成HTTP響應(yīng)。使用HttpServletResponse對象生成響應(yīng),“響應(yīng)”對象含有g(shù)etWriter()方法以返回一個PrintWriter對象。使用PrintWriter的print()和println()方法以編寫Servlet響應(yīng)來返回給客戶機。或者,直接使用out對象輸出有關(guān)HTML文檔內(nèi)容。6.2Servlet知識總結(jié)■Servlet的配置1)Servlet的名稱、類和其它選項的配置在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知識總結(jié)■Servlet的配置2)初始化參數(shù)

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

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

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

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

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

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

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

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

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

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

7.1使用Servlet過濾器實現(xiàn)

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

7.1使用Servlet過濾器實現(xiàn)

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

httpreq=(HttpServletRequest)request;

HttpServletResponse

httpres=(HttpServletResponse)response;

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

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

chain.doFilter(request,response);

7.1使用Servlet過濾器實現(xiàn)

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

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

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

PrintWriterout=response.getPrintWriter();

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

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

2、將過濾行為放入doFilter方法

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

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

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

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

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

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

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

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

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

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

chain.doFilter(srequest,sresponse);}publicvoidsetFilterConfig(finalFilterConfigfilterConfig){this.filterConfig=filterConfig;}}7.3字符編碼過濾器在web.xml中進行過濾器注冊和參數(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章使用過濾器實現(xiàn)用戶授權(quán)驗證■思考題簡述過濾器的基本編寫過程。如果不使用過濾器實現(xiàn)用戶授權(quán)驗證功能,我們可以用什么技術(shù)來達到同樣的“用戶授權(quán)驗證”功能?請使用過濾器實現(xiàn)用戶訪問權(quán)限控制。例如:后臺管理用戶使用的JSP文件放在Admin文件夾中,只有后臺登錄的用戶才可以訪問,前臺登錄用戶不能訪問!請編寫過濾器來實現(xiàn)?JavaWeb應(yīng)用開發(fā)計算機與軟件學(xué)院

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

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

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

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

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

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

1)為用戶訪問監(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)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(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)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)

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

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

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

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

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

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

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

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

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

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

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

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

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

●ServletContextListener●HttpSessionListener●ServletRequestListener

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

1.在ServletContextListener接口:publicvoidcontextInitialized(ServletcontextEventsce)

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

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

2.在HttpSessionListneter接口:publicvoidsessionCreated(HttpSessionEventse)

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

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

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

容器銷毀一個Request請求對象時激發(fā);通過參數(shù)獲得當(dāng)前被銷毀的ServletRequest對象。8.2servlet監(jiān)聽器知識總結(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ā)生變化時,Servlet容器將產(chǎn)生相應(yīng)的事件,此時監(jiān)聽器來接收和處理這些事件。

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

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

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

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

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

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

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

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

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

2、HttpSessionAttributeListener

編程接口:attributeeAdded(HttpSessionBindingEventevent)

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

在Session,有對象取代另一個對象時激發(fā)attributeRemoved(HttpSessionBindingEventevent)

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

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

有對象加入Session時會被自動調(diào)用valueUnBound(HttpSessionBindingEventevent)

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

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

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

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

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

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

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

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

SpringMVC是Spring提供的一個基于MVC設(shè)計模式的輕量級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ù),只是一種思想,一個重要的面向?qū)ο缶幊痰姆▌t,IoC指的是將對象的創(chuàng)建權(quán)交給Spring去創(chuàng)建。IoC

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

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

9.3Spring依賴注入Spring

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論