国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用Struts開發(fā)基于MVC的Web應(yīng)用

2019-11-17 06:26:30
字體:
供稿:網(wǎng)友

  MVC介紹

  MVC模式是一種非常理想化的設(shè)計(jì)模式,應(yīng)用MVC模式完成兩個(gè)以上項(xiàng)目的人都有同樣的體會(huì),他們已經(jīng)對(duì)以前的工作方法進(jìn)行了徹底的改造。工作模式的改變要付出痛苦的代價(jià),但現(xiàn)在你有現(xiàn)成的技術(shù)架構(gòu)可以采用,避免在項(xiàng)目中自己開發(fā)、摸索。它就是開源Apache Struts framework,它提供了實(shí)現(xiàn)MVC設(shè)計(jì)模式最好的實(shí)現(xiàn)工具。

  在本文中,我們將簡單了解、體會(huì)一下模型-視圖-控制器(MVC)設(shè)計(jì)模式,非凡地,我們來看看如何用Struts架構(gòu)來完美地實(shí)現(xiàn)MVC模式。我們先從理論上簡單地描述MVC模式,然后用我們一個(gè)簡單的例子來實(shí)現(xiàn)我們自己的MVC架構(gòu)。在對(duì)MVC模式有了了解后,我們用Struts來看這個(gè)新技術(shù)是如何幫助我們迅速、簡單地創(chuàng)建基于MVC的Web應(yīng)用。

  模型-視圖-控制器(Model-View-Controller)模式

  MVC模式最早是在Smalltalk(一種面向?qū)ο蟮恼Z言)這種程序語言設(shè)計(jì)中被提出來的。我們暫時(shí)先忽略它的歷史,集中注重力在關(guān)注它怎樣被應(yīng)用在Web應(yīng)用開發(fā)中。

  當(dāng)java的Servlets技術(shù)最開始出現(xiàn)的時(shí)候,程序員們馬上意識(shí)到這是一項(xiàng)極其有用的技術(shù)。與同時(shí)代的CGI Web開發(fā)技術(shù)相比,Servlets更快,更靈活,更可靠,更強(qiáng)大。然而,開發(fā)基于Servlets技術(shù)的Web應(yīng)用有一個(gè)巨大的缺陷--需要使用例如out.PRintln之類的語句來輸出瀏覽器識(shí)別的Html。頻繁使用這個(gè)方法是個(gè)錯(cuò)誤的傾向,開發(fā)極其浪費(fèi)時(shí)間(程序員需要經(jīng)常退出所有應(yīng)用程序進(jìn)行重新編譯)。并且這也使修改Web頁面的工作也變得很困難,因?yàn)閃eb的表現(xiàn)和邏輯在一堆令人懼怕的代碼中摻乎在一起。

  于是作為解決方法的JavaServer Pages(jsp)出現(xiàn)了,它們將Servlets變成它們運(yùn)行的結(jié)果。應(yīng)用JSP技術(shù),我們將業(yè)務(wù)邏輯用一系列夾雜在HTML中的<%>標(biāo)識(shí)來表達(dá)。以開發(fā)JSP為核心的應(yīng)用盡管比以Servlet為核心的應(yīng)用有進(jìn)步,但看起來仍然是雜亂無章的,仍然需要用額外的代碼來控制應(yīng)用頁面的流轉(zhuǎn)。在布滿格式化代碼的JSP頁面上,沒有地方來增加這樣額外的控制代碼。顯然需要尋找別的出路。

  不久人們熟悉到同時(shí)應(yīng)用JSP和Servlets兩種技術(shù)開發(fā)Web應(yīng)用是一種不錯(cuò)的選擇。究竟,Servlets擅優(yōu)點(diǎn)理業(yè)務(wù)邏輯的編程,處理請(qǐng)求,控制功能頁面的流轉(zhuǎn),而JSP則是格式化請(qǐng)求處理結(jié)果,通過瀏覽器獲得用戶輸入。這種工作機(jī)制后來變成了人們長說的Model2(用JSP或Servlets中單獨(dú)的一種實(shí)現(xiàn)web應(yīng)用被稱做Model 1).

  Model 2不是一項(xiàng)革命性的新模式,其實(shí)它是來自于Smalltalk語言研發(fā)過程中出現(xiàn)的MVC模式。大多數(shù)情況下,Java程序員趨向于可完全互換地使用這兩個(gè)名詞。
  什么是MVC模式?

  此前我們已對(duì)MVC在開發(fā)基于Java技術(shù)Web應(yīng)用中的使用歷史有了初步的了解,現(xiàn)在讓我們來看看這種模式的細(xì)節(jié)。本節(jié)中,我們來準(zhǔn)確地了解一下Models、Views、Controllers的確切含義,它們實(shí)現(xiàn)的任務(wù),以及如何利用它們實(shí)現(xiàn)一個(gè)簡單的MVC框架。我們先來看看Model、View、Controller是如何交互工作的。

圖SM01
用Struts開發(fā)基于MVC的Web應(yīng)用(圖一)
Figure 1 : Model 2/MVC架構(gòu)

  如上圖所示,用戶通過提交requests與Controller組件(通常表現(xiàn)為Servlets)交互。接著Controller組件實(shí)例化Model組件(通常表現(xiàn)為JavaBeans或者類似技術(shù)),并且根據(jù)應(yīng)用的邏輯操縱它們。一旦Model被創(chuàng)建,Controller決定下一個(gè)為用戶顯示的View(經(jīng)常表現(xiàn)為JSP),同時(shí)View與Model交互操作,獲得并為用戶顯示相關(guān)數(shù)據(jù)。在它被提交到Controller重新開始此操作之前,View可以修改Model的狀態(tài)。

  為了更全面得理解組件之間的交互,我們來看一個(gè)應(yīng)用這種框架實(shí)現(xiàn)的簡單例子。這是一個(gè)完成提交、記錄用戶登陸信息的簡單應(yīng)用。

  View

  本例的View由兩個(gè)簡單的JSP頁面組成。請(qǐng)參考代碼 (login.jsp、welcome.jsp)。

  1>login.jsp只是簡單地提供了用戶輸入姓名和口令的操作界面。輸入完成后,登陸頁提交輸入到controller Servlet(代碼如后Controller部分說明),告訴它需要調(diào)用"登陸操作(login action)"(操作參數(shù)通過form來傳遞);

  2>welcome.jsp頁面利用用戶前頁提供的用戶姓名顯示一個(gè)歡迎信息。這里只是簡單地調(diào)用了session中的JavaBean(從userBean的tag標(biāo)識(shí)可以看到)。這個(gè)Bean是被Controller置于session中,我們接下來可以看到。

  Controller

  樣例中的controller由一個(gè)Servlet構(gòu)成,代碼參見(Controller.class)。實(shí)現(xiàn)了我們應(yīng)用中的Controller。

  這是個(gè)簡單的controller,僅僅根據(jù)一個(gè)request參數(shù)(action)決定調(diào)用哪一個(gè)action。本例中,頁面將login action作為參數(shù)傳遞進(jìn)來,所以LoginAction被調(diào)用。該action實(shí)現(xiàn)了一個(gè)標(biāo)準(zhǔn)接口(Action),定義了將Request和Response對(duì)象作為參數(shù)的execute方法。這個(gè)action類返回被調(diào)用的下一頁的路徑,于是用戶重定向到此頁面。

  LoginAction類從request中獲得username參數(shù),創(chuàng)建一個(gè)新的model對(duì)象(UserBean),并將其傳至Session,并返回"/welcome.jsp"標(biāo)識(shí)流轉(zhuǎn)的下一頁面是welcome.jsp.

  Model.

  我們示例中的model也很簡單,僅由一個(gè)JavaBean構(gòu)成。代碼參考UserBean.class。

  Action的擴(kuò)展應(yīng)用

  如你所示,這是一個(gè)很簡單的Model 2應(yīng)用,但它可以被在更大程度擴(kuò)展。比如,我們可以動(dòng)態(tài)配置映射request參數(shù)的action,我們也可以具體化controler的流轉(zhuǎn)控制(比如action可以通過一個(gè)配置治理器(configuration manager)來動(dòng)態(tài)獲得需要返回的頁面,而不是象現(xiàn)在這樣寫死在程序里)。

  然而,事實(shí)上有一個(gè)現(xiàn)成的框架提供所有這些控制、MVC組裝相關(guān)的可配置項(xiàng),甚至更多。

  這個(gè)現(xiàn)成的框架就是Struts。

更多的請(qǐng)看:http://www.QQread.com/windows/2003/index.html

Struts介紹

  Struts項(xiàng)目作為一個(gè)設(shè)想是Craig McClanahan2000年提出的,目標(biāo)是為利用Java技術(shù)開發(fā)基于MVC模式的Web應(yīng)用提供一個(gè)標(biāo)準(zhǔn)模式。Struts 1.0在2001年中期被最終發(fā)布,現(xiàn)在成為Apache Foundation的Jakarta項(xiàng)目的一部分。StrUCts應(yīng)用范圍極廣,可以用在不同的項(xiàng)目,不同的行業(yè)(我所見到的從電信到電子商務(wù)都有應(yīng)用實(shí)例)。

  Struts是一個(gè)高度可配置、高度擴(kuò)展性的MVC框架,我們幾乎可以用它開發(fā)任何能想到的用Java技術(shù)的Web應(yīng)用。MVC模式的每一部分在Structs中都有相關(guān)對(duì)應(yīng)部分。

  Struts的安裝

  可以在http://apache.get-software.com/jakarta/struts/binaries/jakarta-struts-1.1.zip下載獲得Struts的最新版本(目前是1.1)。下載后解壓zip文件。發(fā)布包中包含了所有開發(fā)Struts應(yīng)用所需的類庫。發(fā)布包的Webapps目錄下有一個(gè)空白的Struts Web應(yīng)用(struts-blank.war),它已經(jīng)包含了一個(gè)Web應(yīng)用的骨架,非常有用,在這個(gè)基礎(chǔ)上建立自己的應(yīng)用顯然對(duì)初學(xué)者能很快得到成就感。

  自己的代碼放在WEB-INF/classes 目錄下,根據(jù)自己的需要修改配置文件WEB-INF/struts-config.xml,做到這步,Struts的配置就完成了。現(xiàn)在就擁有了一個(gè)完全有效的Struts應(yīng)用了。
讓我們來看看Struts提供的組件

  View層

  大多數(shù)Struts應(yīng)用的view層是由JSP組成的。為了使view的開發(fā)更加輕易,Struts提供了一整套JSP自定義的tag庫。這些tag庫使我們能很輕易地提供完全國際化的用戶界面,這些界面通常是與Struts應(yīng)用中的Model組件交互。

  通常Web應(yīng)用的動(dòng)態(tài)前端都是基于HTML表單的,這些應(yīng)用的用戶需要應(yīng)用的可靠性得到保證,這樣就需要表單校驗(yàn)。假如用標(biāo)準(zhǔn)的JSP,記錄表單的內(nèi)容和從一個(gè)JavaBean獲得表單內(nèi)容簡單乏味而且輕易出錯(cuò)。Structs應(yīng)用FormBean使表單處理和校驗(yàn)變得輕易。FormBean與Struts的tag庫結(jié)合,使帶form的View開發(fā)變得輕易而自然。

  下面是一個(gè)Struts的JSP頁面樣例。

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<html:html>
<head></head>

<body bgcolor="white">

<html:errors/>
<html:form action="/logon">
<table border="0" width="100%">
<tr>
<td>
Username:
</td>
<td>
<html:text property="username"/>
</td>
</tr>
<tr>
<td>
PassWord:
</td>
<td>
<html:password property="password"/>
</td>
</tr>
<tr>
<td>
<html:submit/>
</td>
<td>
 
</td>
</tr>
</table>

</html:form>
</body>
</html:html>
  從以上JSP樣例可以看出,這與標(biāo)準(zhǔn)的HTML 表單不同。頁面中沒有雜亂無章的JSP<%>代碼,然而它卻能完成更多的功能。此JSP引入了Struts的HTML tag 庫,它增加了能夠完成收集提供了校驗(yàn)、錯(cuò)誤處理、model交互功能的表單。注重<html:errors> tag,它可以顯示model或者controller已經(jīng)注冊(cè)的錯(cuò)誤。<html:form> tag則創(chuàng)建了一個(gè)基于ActionForm對(duì)象的HTML表單。上例中表單的action被置于 /login,我們用這個(gè)值到配置文件(示例如后)中去找對(duì)應(yīng)的ActionForm。這種映射關(guān)系由表單對(duì)象的名字和它被存儲(chǔ)的范圍(session,頁面,應(yīng)用等等)組成。對(duì)象的屬性用<html:text> 、<html:password> tag來表示,構(gòu)成表單。值得炫耀的好處是,ActionForm被提交時(shí)可以自動(dòng)拾獲對(duì)應(yīng)的表單數(shù)據(jù),無須我們操心。

  從前面我們提到的ActionForm的用處來看,它似乎應(yīng)該被視為應(yīng)用的Model,然而事實(shí)上他們應(yīng)當(dāng)被當(dāng)作應(yīng)用中controller的一部分。ActionForm bean中顯示了model的屬性,但它們不包含任何持續(xù)性邏輯或者業(yè)務(wù)邏輯。ActionForm只是用來在Model、View之間傳遞Model信息。

  因?yàn)锳ctionForm屬于controller中的一部分,我們將在后面controller的部分來具體了解它。

  Model層

  Struts應(yīng)用中的model層可以應(yīng)用任何基于Java的技術(shù)實(shí)現(xiàn),比如EJB,Hibernate,或者JDO。通常,model是作為包含數(shù)據(jù)和業(yè)務(wù)邏輯的簡單JavaBean出現(xiàn)的。如前所述ActionForm對(duì)象不是真正model層的體現(xiàn),同時(shí)Model層應(yīng)當(dāng)獨(dú)立于HTML的表單對(duì)象。假如可能的話,model對(duì)象的開發(fā)應(yīng)當(dāng)是與使用的開發(fā)技術(shù)和開發(fā)環(huán)境(Struts或者其他)無關(guān)的,這樣我們就可以在不同的環(huán)境和應(yīng)用中很輕易地重用它們。

  為了演示,我們開發(fā)了一個(gè)簡單的基于JavaBean的model層對(duì)象,它不包含持續(xù)性邏輯。這個(gè)對(duì)象與我們的ActionForm對(duì)象映射,未來使用model層對(duì)象時(shí),我們只需用更復(fù)雜的邏輯來代替它。

  Controller層

  Struts內(nèi)置一個(gè)實(shí)現(xiàn)了controller主要功能的Servlet,它提供將需要調(diào)用的URL與一個(gè)action對(duì)象對(duì)應(yīng)起來的功能。這個(gè)Servlet被稱作ActionServlet,完成下列功能:

  1>根據(jù)用戶要求決定需要的action;

  2>為View提供View需要的數(shù)據(jù);

  3>決定要顯示的下一個(gè)View。

  ActionServlet(強(qiáng)調(diào):該Servlet已由Struts實(shí)現(xiàn),是Struts架構(gòu)的核心所在,開發(fā)者無須關(guān)心)的重頭工作是調(diào)用一系列簡單的Action類。Struts開發(fā)人員的工作主要是提供這些actions來實(shí)現(xiàn)應(yīng)用的邏輯。創(chuàng)建action必須實(shí)現(xiàn)action接口。此接口包含以下方法:

public ActionForward execute(ActionMapping mapping,
ActionForm form,HttpServletRequest request,HttpServletResponse response)
throws Exception;
  如上所示,該方法將ActionForm作為它的一個(gè)參數(shù)。上面提到的ActionServlet保證了正確的form傳遞給這個(gè)方法。在View層我們說過,ActionForms在Model層和View之間傳遞數(shù)據(jù)。

  ActionForms是一個(gè)非常簡單的對(duì)象;以下代碼顯示了我們將在一個(gè)簡單的HTML表單中用到的ActionForms:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class Login extends ActionForm {

 protected String username;
 protected String password;

 public void setUsername(String username) {
  this.username = username;
 }

 public String getUsername() {
  return username;
 }

 public void setPassword(String password) {
  this.password=password;
 }

 public String getPassword() {
  return password;
 }

}
  Action還包含一個(gè)ActionMapping對(duì)象。它被ActionServlet自動(dòng)處理,體現(xiàn)應(yīng)用的配置。具體配置可以從一個(gè)XML文件獲得,通常就是struts-config.xml文件,下面將會(huì)提到。

  action運(yùn)行方法將標(biāo)準(zhǔn)的request 、response作為參數(shù),應(yīng)用可以利用這些調(diào)用參數(shù)。action類處理完畢后,將ActionMapping所映射的要調(diào)用的下一個(gè)頁面作為參數(shù)返回給ControllerServlet(Struts內(nèi)置)。

更多的請(qǐng)看:http://www.qqread.com/windows/2003/index.html

集成Struts組件

  我們來看Struts是如何將這三層的組件組合在一起構(gòu)成完整的應(yīng)用。Struts應(yīng)用用struts-config.xml來完成配置。這個(gè)配置文件包含了應(yīng)用的所有可配置信息,包括:

  1>要用到的controller

  2>ActionForms和他們對(duì)應(yīng)的HTML forms

  3>Actions

  4>ActionMappings,它控制應(yīng)用的整個(gè)功能流轉(zhuǎn)

  struts-config.xml的重要配置元素都包含在<struts-config>標(biāo)識(shí)下。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
  配置ActionForm對(duì)象:

<form-beans>
<form-bean
name="logonForm"
type="com.samjdalton.struts.LogonForm"/>
</form-beans>
  以上配置聲明一個(gè)"logonForm"的表單,接著說明需要用com.samjdalton.struts.LogonForm class來完成該表單設(shè)置。

  下一步,我們聲明ActionMappings。

<action-mappings>

<action
path="/Login"
forward="/login.jsp"/>
<action
path="/Welcome"
forward="/welcome.jsp"/>

<action
path="/ProcessLogin"
type="com.samjdalton.struts.LoginAction"
name="logonForm"
scope="request"
validate="true"
input="/Login.do">
<forward
name="success"
path="/Welcome.do"/>
<forward
name="failure"
path="/Logon.do"/>
</action>
</action-mappings>
  這段配置聲明了我們應(yīng)用中的三個(gè)action。前兩個(gè)(/Login 、/Welcome)很簡單,他們的前向都是JSP頁面。第三個(gè)復(fù)雜一些,它在一個(gè)表單提交時(shí)被調(diào)用,它創(chuàng)建一個(gè)利用logonForm 元素構(gòu)建的ActionForm,然后調(diào)用LoginAction類來處理信息。我們可以看到兩個(gè)<forward>元素,這些定義了應(yīng)用的功能流轉(zhuǎn)控制。應(yīng)用參考他們的名字(成功或者失敗),然后控制被交到相關(guān)資源。

更多的請(qǐng)看:http://www.qqread.com/windows/2003/index.html

實(shí)例學(xué)習(xí)Struts

  簡單看過了Struts的組成及組裝,現(xiàn)在來實(shí)現(xiàn)一個(gè)簡單的應(yīng)用,它實(shí)現(xiàn)與本文開頭例子中相同的功能,即用戶登陸并顯示歡迎信息。

  應(yīng)用中的view由2個(gè)簡單JSP構(gòu)成,第一個(gè)為登陸頁,如下:

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

<html:html>
<head></head>

<body bgcolor="white">

<html:errors/>

<html:form action="/ProcessLogin">
<table border="0" width="100%">
<tr>
<td>
Username:
</td>
<td>
<html:text property="username"/>
</td>
</tr>
<tr>
<td>
Password:
</td>
<td>
<html:password property="password"/>
</td>
</tr>
<tr>
<td>
<html:submit/>
</td>
<td>
 
</td>
</tr>
</table>

</html:form>
</body>
</html:html>
  這個(gè)與不用Struts的例子中的頁面非常類似,不同之處僅僅是用Struts <html> tags定義了表單和調(diào)用的Action是配置中定義的"/ProcessLogin"。表單提交后相應(yīng)的ActionForm將被創(chuàng)建,同時(shí)相應(yīng)的action被調(diào)用處理該輸入。我們還可以看到<html:errors> tag被用到,這個(gè)是為了自動(dòng)顯示表單中定義的校驗(yàn)錯(cuò)誤信息(下面將提到)。

  第二個(gè)JSP如下:

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

<html:html>

<h1>W(wǎng)elcome <bean:write name="loginForm" property="username" /></h1>

</html:html>
  本頁簡單地顯示了一個(gè)命名為"loginForm"的ActionForm bean的一個(gè)屬性(username).

  接著是controller層。controller層由ActionForm、Action兩個(gè)類實(shí)現(xiàn)。ActionForm類很簡單,主要是對(duì)應(yīng)model(本例中是一個(gè)簡單的JavaBean對(duì)象)。

package com.samjdalton.struts;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm {
 private LoginBean bean;

 public LoginForm() {
  this.bean=new LoginBean();
 }
 public LoginForm(LoginBean bean) {
  this.bean = bean;
 }

 public void setUsername(String username) {
  bean.setUsername(username);
 }

 public String getUsername() {
  return bean.getUsername();
 }

 public void setPassword(String password) {
  bean.setPassword(password);
 }

 public String getPassword() {
  return bean.getPassword();
 }
}
  Action類用上面的ActionForm從view獲得信息,并且修改model狀態(tài)。

  Action類代碼如下:

package com.samjdalton.struts;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;

public class LoginAction extends Action {
 public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm,  javax.servlet.http.HttpServletRequest httpServletRequest,  javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {

// check the username
 LoginForm form = (LoginForm) actionForm;
 if (form.getUsername().equalsIgnoreCase("sam") &&      form.getPassword().equals("password")) {
 // we are in
  return actionMapping.findForward("success");
 } else {
 // not allowed
  return actionMapping.findForward("failure");
 }
}
public ActionErrors validate(ActionMapping actionMapping
HttpServletRequest httpServletRequest) {
 ActionErrors errors = new ActionErrors();

 if ( getUsername() == null getUsername().length() < 1 ) {
  errors.add("name",new ActionError("error.name.required"));
 }

 if ( getPassword() == null getPassword().length() < 1 ) {
  errors.add("pw",new ActionError("error.pw.required"));
 }
 return errors;
}
  可以看到,action檢查用戶在username、password是否輸入了"sam"、"password"。假如輸入正確,action指明要調(diào)用的下一個(gè)view。

更多的請(qǐng)看:http://www.qqread.com/windows/2003/index.html


  action類還包含一個(gè)方法:validate。本例中,validate方法檢查username 和password的輸入,假如輸入有誤,返回錯(cuò)誤信息。這些錯(cuò)誤信息包含在一個(gè)資源文件(為了支持國際化)中,該文件信息在配置文件中被配置。

  應(yīng)用的model是一個(gè)不包含持續(xù)邏輯的標(biāo)準(zhǔn)JavaBean對(duì)象,如下所示:

package com.samjdalton.struts;

public class LoginBean {
 private String username;
 private String password;

public void setUsername(String username) {
 this.username=username;
}

public String getUsername() {
 return username;
}

public void setPassword(String password) {
 this.password = password;
}

public String getPassword() {
 return password;
}
}
  應(yīng)用的struts-config.xml配置文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
 <struts-config>
  <form-beans>
   <form-bean name="loginForm" type="com.samjdalton.struts.LoginForm"/>
  </form-beans>

  <action-mappings>

   <action path="/Login" forward="/login.jsp"/>
    <action path="/Welcome" forward="/welcome.jsp" name="loginForm" scope="request"/>

    <action path="/ProcessLogin" type="com.samjdalton.struts.LoginAction"
name="loginForm" scope="request" validate="true" input="/Login.do">
    <forward name="success" path="/Welcome.do"/>
    <forward name="failure" path="/Login.do"/>
   </action>
 </action-mappings>
 <message-resources parameter="applicationResources" null="false" />
 </struts-config>
  大多數(shù)文件與上例所示相同,僅有的區(qū)別是<message-resources> tag。此tag答應(yīng)我們具體化應(yīng)用代碼中的string類型,好處是輕易國際化。上例中,資源包含在名字為"ApplicationResources.properties"的文件中,它必須存在于應(yīng)用的classpath(萬無一失的方法是將它配置到你的WEB-INF/classes路徑下)。

  配置成功后,IE中輸入如下URL(Tomcat):

http://localhost:8080/<war-file-name>/Login.do

  應(yīng)用運(yùn)行的顯示結(jié)果如下:

用Struts開發(fā)基于MVC的Web應(yīng)用(圖二)
The login page

用Struts開發(fā)基于MVC的Web應(yīng)用(圖三)
The welcome page

用Struts開發(fā)基于MVC的Web應(yīng)用(圖四)
The error page

  小結(jié)

  本文中,我們先介紹了MVC模式,用兩種技術(shù)完成可一個(gè)MVC模式的簡單實(shí)現(xiàn),包括Struts,這項(xiàng)可以開發(fā)更靈活、擴(kuò)展性更強(qiáng)的基于MVC模式的Web應(yīng)用。顯然這已經(jīng)遠(yuǎn)遠(yuǎn)超出了Struts所覆蓋的。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 娄烦县| 衡阳县| 钦州市| 利辛县| 白河县| 德保县| 烟台市| 疏勒县| 陇川县| 阿城市| 准格尔旗| 松原市| 云林县| 枣阳市| 扶风县| 哈尔滨市| 安龙县| 夹江县| 夏河县| 景宁| 十堰市| 西吉县| 北川| 宝应县| 桦南县| 黑河市| 沙湾县| 龙陵县| 航空| 新安县| 五河县| 马龙县| 张北县| 泗水县| 察雅县| 陆良县| 竹北市| 南和县| 青川县| 梁山县| 怀安县|