第二章 Web應(yīng)用程序初步_第1頁(yè)
第二章 Web應(yīng)用程序初步_第2頁(yè)
第二章 Web應(yīng)用程序初步_第3頁(yè)
第二章 Web應(yīng)用程序初步_第4頁(yè)
第二章 Web應(yīng)用程序初步_第5頁(yè)
已閱讀5頁(yè),還剩60頁(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)介

第二章Web應(yīng)用程序–初步2目標(biāo)理解JSP理解JSP頁(yè)面的各種構(gòu)成元素了解JSP頁(yè)面的執(zhí)行過(guò)程了解JSP的優(yōu)點(diǎn)運(yùn)用MyEclipse6.5開(kāi)發(fā)JSP3JSP概念2-1Java服務(wù)器頁(yè)面(JavaServerPage,JSP)以擴(kuò)展名.jsp保存有效地控制動(dòng)態(tài)內(nèi)容生成在JavaServerPage里面使用Java編程語(yǔ)言和類(lèi)庫(kù)HTML用于表示頁(yè)面,而Java代碼用于訪問(wèn)動(dòng)態(tài)內(nèi)容JSP頁(yè)面Java服務(wù)器4JSP概念2-2<%@pagecontentType="text/html;charset=GBK"%><html><head><title>JSP演示1</title></head><bodybgcolor="#ffffff"><%java.util.Datenow=newjava.util.Date();out.println("當(dāng)前時(shí)間是:"+now);%><h1>你好,這就是一個(gè)JSP頁(yè)面,簡(jiǎn)單不?</h1></body></html>演示示例15JSP頁(yè)面元素3-1JSP頁(yè)面的元素靜態(tài)內(nèi)容指令表達(dá)式ScriptletJSP頁(yè)面<%Java代碼%><%=Java表達(dá)式%>HTML靜態(tài)文本以“<%@”開(kāi)始,以“%>”結(jié)束。比如:<%@includefile="

Filename"%>聲明動(dòng)作<%!函數(shù)或方法%>以“<jsp:動(dòng)作名”開(kāi)始,以“</jsp:動(dòng)作名>”結(jié)束比如:<jsp:includepage="Filename"/>注釋<!--這是注釋,但客戶端可以查看到--><%--這也是注釋,但客戶端不能查看到--%>6JSP頁(yè)面元素3-2<%@pagecontentType="text/html;charset=GBK"language="java"import="java.util.Calendar"%><%!StringgetHello(Stringname){return"Hi,"+name+"!";}%><%Calendarnow=Calendar.getInstance();%>JSP聲明JSPScriptletJSP指令7JSP頁(yè)面元素3-3<html><head><title>JSP頁(yè)面構(gòu)成</title></head><!--這是注釋,但客戶端可以察看到--><%--這也是注釋,但客戶端不能察看到--%><body><h1align="center">JSP頁(yè)面構(gòu)成</h1><%=getHello("朋友")%><%if(now.get(Calendar.AM_PM)==Calendar.AM){%>早上好!<%}else{%>下午好!<%}%><br><br><jsp:includeflush="false"page="welcome.jsp"><jsp:paramname="str"value="參數(shù)"/></jsp:include></body></html>靜態(tài)內(nèi)容JSP表達(dá)式JSP注釋演示示例2JSP動(dòng)作8JSP執(zhí)行過(guò)程2-1客戶端JSP頁(yè)面3執(zhí)行2轉(zhuǎn)譯編譯1Servlet請(qǐng)求響應(yīng)JSP執(zhí)行過(guò)程9JSP執(zhí)行過(guò)程2-2轉(zhuǎn)換和編譯編譯ServletJSP!確定JSP中的錯(cuò)誤從JSP元素中提取數(shù)據(jù)為JSP生成一個(gè)Servlet轉(zhuǎn)譯10JSP的優(yōu)點(diǎn)3-1將內(nèi)容與表示分離請(qǐng)求響應(yīng)JSP頁(yè)面靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容客戶端服務(wù)器JSP程序員頁(yè)面設(shè)計(jì)人員11JSP的優(yōu)點(diǎn)3-2強(qiáng)調(diào)可重用組件

JSP頁(yè)面1靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容JSP頁(yè)面2靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容JSP頁(yè)面3靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容JavaBean多個(gè)JSP頁(yè)面使用相同的JavaBean12JSP的優(yōu)點(diǎn)3-3簡(jiǎn)化頁(yè)面開(kāi)發(fā)-Web設(shè)計(jì)人員和Web程序員使用Web開(kāi)發(fā)工具開(kāi)發(fā)JSP頁(yè)面JSP頁(yè)面靜態(tài)內(nèi)容動(dòng)態(tài)內(nèi)容Web開(kāi)發(fā)工具M(jìn)acromediaDreamweaverMyEclipse

頁(yè)面設(shè)計(jì)人員JSP程序員13總結(jié)JSP頁(yè)面使用HTML顯示靜態(tài)內(nèi)容,并使用Java代碼生成動(dòng)態(tài)內(nèi)容JSP頁(yè)面的元素為靜態(tài)內(nèi)容、JSP指令、JSP表達(dá)式、JSPScriptlet和注釋可以使用標(biāo)準(zhǔn)開(kāi)發(fā)工具創(chuàng)建JSP頁(yè)面JSP使用可重用的跨平臺(tái)組件(如JavaBean)JSP允許創(chuàng)建自定義標(biāo)簽,使JSP開(kāi)發(fā)更容易JSP執(zhí)行過(guò)程的各個(gè)階段為轉(zhuǎn)譯、編譯和執(zhí)行14StrutsMVCStruts是目前非常流行的基于MVC的JavaWeb框架MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)常見(jiàn)的MVC組件Struts:Apache的,最流行的MVC組件Struts2:Apache用Struts和WebWork的組合出來(lái)的新產(chǎn)品,目前上升勢(shì)頭強(qiáng)勁WebWork:這個(gè)可是老牌的MVC組件,后來(lái)組合成了Struts2,不過(guò)自身仍在發(fā)展SpringMVC:SpringFramework自己整合自己Spring的優(yōu)勢(shì)推出的MVC組件,用戶也不少JSF:這個(gè)是一個(gè)規(guī)范,Sun的和Apache的都有各自的實(shí)現(xiàn)。用戶量很大,被眾多IDE支持。Tapestry:最徹底的MVC開(kāi)發(fā)框架,豐富的組件資源,重用性很高。.netmvc:在.net上的mvc組件,經(jīng)過(guò)了preview1~5,RC1,RC2,目前已經(jīng)是正式版了,微軟給出的定義是可以用于生產(chǎn)的架構(gòu)。

MVC的優(yōu)點(diǎn)低耦合性視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個(gè)應(yīng)用的業(yè)務(wù)流程或者業(yè)務(wù)規(guī)則的改變只需要改動(dòng)MVC的模型層即可。因?yàn)槟P团c控制器和視圖相分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則可維護(hù)性

分離視圖層和業(yè)務(wù)邏輯層也使得WEB應(yīng)用更易于維護(hù)和修改有利于軟件工程化管理

由于不同的層各司其職,每一層不同的應(yīng)用具有某些相同的特征,有利于通過(guò)工程化、工具化管理程序代碼。15Struts基本概念

Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。Struts2是Struts的下一代產(chǎn)品,是在struts1和WebWork的技術(shù)基礎(chǔ)上進(jìn)行了合并的全新的Struts2框架。其全新的Struts2的體系機(jī)構(gòu)與Struts1的體系結(jié)構(gòu)差別巨大。Struts2以WebWork為核心,采用攔截器的機(jī)制來(lái)處理用戶的請(qǐng)求,這樣的設(shè)計(jì)也使得業(yè)務(wù)邏輯控制器能夠與ServletAPI完全脫離開(kāi),所以Struts2可以理解為WebWork的更新產(chǎn)品。雖然從Struts1到Struts2有著太大的變化,但是相對(duì)于WebWork,Struts2的變化很小。

16Struts原理Struts是MVC的一種實(shí)現(xiàn),它將Servlet和JSP標(biāo)記(屬于J2EE規(guī)范)用作實(shí)現(xiàn)的一部分。Struts繼承了MVC的各項(xiàng)特性,并根據(jù)J2EE的特點(diǎn),做了相應(yīng)的變化與擴(kuò)展。171客戶端初始化一個(gè)指向Servlet容器(例如Tomcat)的請(qǐng)求

2這個(gè)請(qǐng)求經(jīng)過(guò)一系列的過(guò)濾器(Filter)(這些過(guò)濾器中有一個(gè)叫做ActionContextCleanUp的可選過(guò)濾器,這個(gè)過(guò)濾器對(duì)于Struts2和其他框架的集成很有幫助,例如:SiteMeshPlugin)

3接著StrutsPrepareAndExecuteFilter被調(diào)用,StrutsPrepareAndExecuteFilter詢問(wèn)ActionMapper來(lái)決定這個(gè)請(qǐng)是否需要調(diào)用某個(gè)Action

4如果ActionMapper決定需要調(diào)用某個(gè)Action,StrutsPrepareAndExecuteFilter把請(qǐng)求的處理交給ActionProxy

5ActionProxy通過(guò)ConfigurationManager詢問(wèn)框架的配置文件,找到需要調(diào)用的Action類(lèi)

6ActionProxy創(chuàng)建一個(gè)ActionInvocation的實(shí)例。

7ActionInvocation實(shí)例使用命名模式來(lái)調(diào)用,在調(diào)用Action的過(guò)程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

8一旦Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果。返回結(jié)果通常是(但不總是,也可能是另外的一個(gè)Action鏈)一個(gè)需要被表示的JSP或者FreeMarker的模版。在表示的過(guò)程中可以使用Struts2框架中繼承的標(biāo)簽。在這個(gè)過(guò)程中需要涉及到ActionMapper18Struts原理Struts是MVC的一種實(shí)現(xiàn),它將Servlet和JSP標(biāo)記(屬于J2EE規(guī)范)用作實(shí)現(xiàn)的一部分。Struts繼承了MVC的各項(xiàng)特性,并根據(jù)J2EE的特點(diǎn),做了相應(yīng)的變化與擴(kuò)展。1920Struts2和MVC

1.控制器(StrutsPrepareAndExecuteFilter):

用戶請(qǐng)求首先到達(dá)前端控制器StrutsPrepareAndExecuteFilter。StrutsPrepareAndExecuteFilter負(fù)責(zé)根據(jù)用戶提交的URL和struts.xml中的配置,來(lái)選擇合適的動(dòng)作(Action),讓這個(gè)Action來(lái)處理用戶的請(qǐng)求。StrutsPrepareAndExecuteFilter其實(shí)是一個(gè)過(guò)濾器(Filter,servlet規(guī)范中的一種web組件),它是Struts2核心包里已經(jīng)做好的類(lèi),不需要我們?nèi)ラ_(kāi)發(fā),只是要在項(xiàng)目的web.xml中配置一下即可。StrutsPrepareAndExecuteFilter體現(xiàn)了J2EE核心設(shè)計(jì)模式中的前端控制器模式。

2.模型(動(dòng)作Action):

在用戶請(qǐng)求經(jīng)過(guò)StrutsPrepareAndExecuteFilter之后,被分發(fā)到了合適的動(dòng)作Action對(duì)象。Action負(fù)責(zé)把用戶請(qǐng)求中的參數(shù)組裝成合適的數(shù)據(jù)模型,并調(diào)用相應(yīng)的業(yè)務(wù)邏輯進(jìn)行真正的功能處理,獲取下一個(gè)視圖展示所需要的數(shù)據(jù)。Struts2的Action,相比于別的web框架的動(dòng)作處理,它實(shí)現(xiàn)了與ServletAPI的解耦,使得Action里面不需要再直接去引用和使用HttpServletRequest與HttpServletResponse等接口。因而使得Action的單元測(cè)試更加簡(jiǎn)單,而且強(qiáng)大的類(lèi)型轉(zhuǎn)換也使得我們少做了很多重復(fù)的工作。3.視圖(Result):

視圖結(jié)果用來(lái)把動(dòng)作中獲取到的數(shù)據(jù)展現(xiàn)給用戶。在Struts2中有多種優(yōu)秀的結(jié)果展示方式,常規(guī)的jsp,模板freemarker、velocity,還有各種其它專(zhuān)業(yè)的展示方式,如圖表jfreechart、報(bào)表JasperReports、將XML轉(zhuǎn)化為HTML的XSLT等等。而且各種視圖結(jié)果在同一個(gè)工程里面可以混合出現(xiàn)。2122MyEclipse8.5+tomcat+Struts2MyEclipse快速開(kāi)發(fā)Struts2應(yīng)用231.1運(yùn)行MyEclipse8.5241.2.建立WebProject:store125261.3.在MyEclipse配置Tomcat

(窗口菜單的首選項(xiàng))2728292.1配置struts2開(kāi)發(fā)環(huán)境下載struts-組件,解壓下載的組件,在lib目錄下找到其中的以下組件:commons-fileupload-1.3.1.jar文件上傳組件commons-io-2.2.jarcommons-lang-2.4.jarcommons-lang3-3.1.jarcommons-logging-1.1.3.jarASF出品的日志包freemarker-2.3.19.jarjavassist-3.11.0.GA.jarognl-3.0.6.jarObjectGraphNavigationLanguage, Struts2框架通過(guò)其讀寫(xiě)對(duì)象的屬性。struts2-core-.jar

Struts2框架的核心類(lèi)庫(kù)xwork-core-.jarXWork類(lèi)庫(kù),Struts2在其上構(gòu)建

30

Struts-core-2.x.x.jar:

xwork-2.x.x.jar:

ognl-2.6.x.jar:

freemarker-2.3.x.jar:Struts2的UI標(biāo)簽的模版使用Freemarker編寫(xiě)。

commons-logging-1.1.x.jar:ASF出品的日志包。

commons-fileupload-1.2.1.jar:文件上傳組件。把這些jar包復(fù)制到web工程下的WEB-INF/lib目錄中313233342.2配置web.xml文件3536在web.xml中配置struts2核心過(guò)濾器StrutsPrepareAndExecuteFilter37在MyEclipse啟動(dòng)Tomcat38394041發(fā)布工程42點(diǎn)擊按鈕選擇Server4344http://localhost:8080/store1/index.jsp:8080/store1/index.jsphttp://10.118.1762:8080/store1/index.jsphttp:///store1/index.jsp452.3struts.xml文件

46復(fù)制模板struts.xml文件到src目錄下,struts.xml發(fā)布后在WEB-INF/classes下,模板如下2.4創(chuàng)建login.jsp47創(chuàng)建success.jsp48

溫馨提示

  • 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)論