偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

利用Stripes實(shí)現(xiàn)Java Web開發(fā)

開發(fā) 后端
Stripes是一個(gè)以讓程序員的web開發(fā)簡(jiǎn)單而高效為準(zhǔn)則來(lái)設(shè)計(jì)的基于動(dòng)作的開源Java web框架。本文將介紹利用Stripes實(shí)現(xiàn)Java Web開發(fā)。

Stripes是一個(gè)以讓程序員的web開發(fā)簡(jiǎn)單而高效為準(zhǔn)則來(lái)設(shè)計(jì)的基于動(dòng)作的開源Java web框架。本文將介紹Stripes與其它如Struts之類基于動(dòng)作的框架的區(qū)別和其提供的一些存在于Ruby on Rails之中的簡(jiǎn)單性,利用Stripes實(shí)現(xiàn)Java Web開發(fā)。

Stripes是一個(gè)以讓程序員的web開發(fā)簡(jiǎn)單而高效為準(zhǔn)則來(lái)設(shè)計(jì)的基于動(dòng)作的開源Java web框架。傳統(tǒng)的Java web開發(fā)著眼于借去耦(Decoupling)來(lái)實(shí)現(xiàn)其靈活性,但導(dǎo)致多個(gè)的配置文件,額外的對(duì)象,和其他資源的分散。這些困難造成相當(dāng)多的程序員的更高的學(xué)習(xí)時(shí)間和低下的效率。其結(jié)果是有些Java程序員被一些非Java的框架所吸引去了:Ruby on Rails或者Django。一些Java web框架,如Stripes,正在開始從這些非Java框架中汲取其成功經(jīng)驗(yàn):簡(jiǎn)單而高效的開發(fā)。本文將介紹Stripes與其它如Struts之類基于動(dòng)作的框架的區(qū)別和其提供的一些存在于Ruby on Rails之中的簡(jiǎn)單性。

圖1是典型的用Stripes寫的應(yīng)用程序中的正常事件流程和組件。

用Stripes寫的應(yīng)用程序中的正常事件流程和組件

圖 1 典型Stripes流程

如你所見,利用Stripes實(shí)現(xiàn)Java Web開發(fā)過(guò)程中,其流程基本上就是一個(gè)MVC框架。Stripes和其他的基于動(dòng)作的框架的一個(gè)主要的區(qū)別是沒(méi)有一個(gè)外部的配置文件。我們隨后將看到,Stripes用annotation和約定而非配置來(lái)提高產(chǎn)出和減少雜亂。

編寫你的***個(gè)Stripe動(dòng)作(Action)

讓我們現(xiàn)在就開始通過(guò)創(chuàng)建Hello World例程來(lái)了解Stripes框架和理解其運(yùn)作。HelloWorldAction類將提示用戶輸入姓氏和名字然后在另一個(gè)View里面顯示,首先我們來(lái)編寫controller類。

public class HelloWorldAction implements ActionBean
{
 @ValidateNestedProperties(
 {
  @Validate(field = "firstName", required = true, on = {"hello"}),
  @Validate(field = "age", required = true, minvalue = 13, on = {"hello"})
 })
 private Person person;
 private ActionBeanContext context;
 @DefaultHandler public Resolution index()
 {
  return new ForwardResolution("Hello.jsp");
 }
 public Resolution hello()
 {
  return new ForwardResolution("SayHello.jsp");
 }
 public void setPerson(String person) {this.person = person;}
 public String getPerson() { return person;}
 public void setContext(ActionBeanContext c) {this.context = c; }
 public ActionBeanContext getContext() {return context; }}

Controller類是一個(gè)實(shí)現(xiàn)了Stripes特有接口ActionBean的POJO(Plain Old Java Object,譯注:讀破粥)。所有的Stripes動(dòng)作類都要實(shí)現(xiàn)這一接口以讓StripesDispatcher servlet在運(yùn)行服務(wù)時(shí)為其注入一個(gè)ActionBeanContext對(duì)象。ActionBeanContext對(duì)象可以讓你存取的對(duì)象如request、response、和servlet context等servlet API。大多數(shù)時(shí)候在Stripes應(yīng)用中是不用讀取這些底層API對(duì)象的。

ActionBeanContext類還提供當(dāng)前動(dòng)作的狀態(tài)并可以添加信息消息和錯(cuò)誤消息到當(dāng)前動(dòng)作中。ActionBeanContext的變量和其讀寫方法可以放在一個(gè)基類里面,因?yàn)樗械腟tripes動(dòng)作都要實(shí)現(xiàn)之。

Controller類的其他部分對(duì)于任何Java程序員來(lái)說(shuō)都是很面熟的。有一個(gè)Person對(duì)象和其讀寫方法是用來(lái)讀寫用戶的姓名給view的。雖然這僅僅是一個(gè)簡(jiǎn)單的嵌套對(duì)象,Stripes可以通過(guò)Java集合、泛型支持、和下標(biāo)化的屬性來(lái)實(shí)現(xiàn)更復(fù)雜完善的數(shù)據(jù)捆綁。因?yàn)镾tripes可以處理復(fù)雜數(shù)據(jù)捆綁,你的領(lǐng)域?qū)ο螅―omain Object)可以在其他需要它們的層重用。例如:通過(guò)Stripes你可以很容易的收集一個(gè)領(lǐng)域?qū)ο蟮男畔?,然后用其他的POJO框架,如Hibernate或者EJB3來(lái)對(duì)其進(jìn)行持久化。

Person對(duì)象變量上有一個(gè)Stripes驗(yàn)證annotation用來(lái)保證用戶在激活hello方法的時(shí)候已經(jīng)輸入了姓名。如果用戶沒(méi)有輸入這兩個(gè)必需的變量,原始頁(yè)會(huì)被返回,并顯示一個(gè)相關(guān)的錯(cuò)誤消息。該驗(yàn)證只有在hello事件被申請(qǐng)的時(shí)候才會(huì)被激活,因?yàn)閍nnotation的屬性中指定了(on = {"hello"})。Stripes還會(huì)使用實(shí)用默認(rèn)法則,根據(jù)驗(yàn)證方法和變量名稱產(chǎn)生一個(gè)錯(cuò)誤信息。例如,如果Person類的firstName變量在提交的時(shí)候沒(méi)有提供,用戶將看到:

Person First Name is a required field.

這條消息是通過(guò)將Person.firstName進(jìn)行刻讀化處理后得到的。如果有必要,這些錯(cuò)誤消息可以被重載來(lái)提供更多的客戶自定義功能。

另外還有一個(gè)Integer類型的變量age,是Person對(duì)象的一個(gè)屬性。Stripes首先試圖對(duì)request中命為person.age的parameter轉(zhuǎn)換為Integer類型,并將其捆綁到Person對(duì)象上。在Person對(duì)象的age變量被付值以后,Stripes將驗(yàn)證該Integer值是否小于13。如果用戶輸入了一個(gè)字符串而非整數(shù),用戶得到這個(gè)消息:

The value (Mark) entered in field Person Age must be a valid number.

若是用戶輸入了一個(gè)小于13的整數(shù),用戶將看到這個(gè)消息:

The minimum allowed value for Age is 13.

同樣地,我們沒(méi)有必要為這些錯(cuò)誤消息提供任何外部的配置文件。Annotation提供的驗(yàn)證與你的變量在同一個(gè)位置上,使得程序員定位驗(yàn)證、理解驗(yàn)證的內(nèi)容、和對(duì)驗(yàn)證進(jìn)行維護(hù)變動(dòng)更容易。

這個(gè)Stripes動(dòng)作還有兩個(gè)可被激活的方法(稱為事件)。事件是ActionBean類中有如下特征的方法:

public Resolution eventName

請(qǐng)注意index方法被標(biāo)注為@DefaultHandler annotation。因?yàn)樵诒緞?dòng)作中有多個(gè)事件,其中一個(gè)必須被指定為默認(rèn)事件。如果調(diào)用本動(dòng)作的URL沒(méi)有指定哪個(gè)事件,Stripes則查找標(biāo)注有@DefaultHandler annotation的事件,并執(zhí)行。

顯示層(View)

現(xiàn)在讓我們給Hello World例程加上顯示層的邏輯。Stripes默認(rèn)支持JSP為顯示層的標(biāo)準(zhǔn)技術(shù),不過(guò)你也可以用其他的顯示層技術(shù),比如FreeMaker。除了Stripes的tag庫(kù)以外,沒(méi)有什么新的東西要學(xué)。Hello.jsp是初始的顯示,可以讓用戶輸入和提交姓名。

<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %>
......
<stripes:errors/>
<stripes:form beanclass="com. myco. web. stripes. action. example. HelloWorldAction"> Say hello to: <br> First name:
<stripes:text name="person.firstName"/> <br> Age:<stripes:text name="person.age"/><br>
<stripes:submit name="hello" value="Say Hello"/>
</stripes:form>
......

這個(gè)JSP易讀易維護(hù)。而Stripes用于form和input的tag跟對(duì)應(yīng)的HTML代碼非常相似。stripes:form tag包含一個(gè)beanclass屬性,其值為我們前面定義的controller類的完整類名。我們可以用stripes:form中的action屬性來(lái)替換beanclass屬性,但是beanclass屬性可以讓你在以后對(duì)Stripes動(dòng)作進(jìn)行重構(gòu)的時(shí)候更加方便。如果你要用在stripes:form tag中使用action屬性,方法如下:

<stripes:form action="/example/HelloWorld.action">

有一個(gè)stripes:input tag指定了一個(gè)名為person.firstName屬性,其作用是將其儲(chǔ)存的輸入值付給controller的Person對(duì)象的firstName變量中。***,stripes:submit tag指定一個(gè)name屬性來(lái)告訴Stripes的HelloWorldAction類使用哪一個(gè)事件。

我們現(xiàn)在已經(jīng)完成了提交姓名的值給HelloWorldAction,剩下的就是在另一個(gè)view中將其反饋給用戶了。

<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld" %>
......
<stripes:errors/>
<h2>Hello ${actionBean.person.firstName} your age is ${actionBean.person.age} </h2> <p/>
<stripes:link beanclass="com.myco.web.stripes.action. example.HelloWorldAction"> Say Hello Again
</stripes:link>
......

本JSP將自己通過(guò)一個(gè)對(duì)動(dòng)作的引用讀取person的姓名信息并顯示。為達(dá)到這一目的,Stripes自動(dòng)在request的屬性中添加一個(gè)名為actionBean動(dòng)作對(duì)象,以供JSTL存取。***,我們用了一個(gè)strips:link tag來(lái)建立一個(gè)返回HelloWorldAction地鏈接從而可以讓我們輸入不同的姓名。我們以可以通過(guò)如下辦法顯式地創(chuàng)建一個(gè)指向index事件的stripes:link:

<stripes:link beanclass="com.myco.web.stripes.action. example.HelloWorldAction" event="index">
Say Hello Again
</stripes:link>

因?yàn)槲覀円呀?jīng)用annotation把index方法標(biāo)記為@DefaultHandler,Stripes無(wú)須event屬性也知道要執(zhí)行哪一個(gè)方法,這樣完成利用Stripes實(shí)現(xiàn)Java Web開發(fā)。

【編輯推薦】

  1. 淺談如何構(gòu)建Java Web快速開發(fā)框架
  2. 快速啟動(dòng)一個(gè)Java Web編程框架
  3. 告訴你怎樣學(xué)Java才是硬道理
  4. 垃圾清理勢(shì)在必行——Java垃圾收集算法
  5. 想動(dòng)就“動(dòng)” Java也可以“動(dòng)態(tài)”靈活
責(zé)任編輯:王觀 來(lái)源: 論壇整理
相關(guān)推薦

2009-01-11 10:13:39

Stripes開發(fā)框架JSP

2018-03-14 11:13:35

Web服務(wù)器Nginx

2011-06-24 16:19:59

QT web Webkit

2015-12-31 10:14:54

React.js開發(fā)Web應(yīng)用

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2009-04-13 11:38:27

IBMdWWeb

2012-09-28 10:18:53

IBMdw

2009-05-18 09:21:46

XMLRIAREST

2011-02-25 15:49:09

NecessitasQtAndroid

2010-03-21 19:05:19

微軟MSF

2017-02-27 17:06:43

Java Web開發(fā)亂碼

2009-09-03 16:52:44

Java Web開發(fā)框

2009-06-18 12:06:30

Java Web開發(fā)框

2009-08-21 17:17:49

C#攝像頭編程

2009-06-23 16:52:16

JSFHibernateWeb應(yīng)用

2017-02-14 21:15:48

2010-09-15 12:15:23

NessusWEB應(yīng)用安全掃描

2017-04-20 09:49:35

SwashbuckleWeb API Hel核心

2016-01-27 09:39:13

JoobyJava Web流程

2009-07-03 09:12:59

Java JSP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)