成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用Stripes實現Java Web開發

開發 后端
Stripes是一個以讓程序員的web開發簡單而高效為準則來設計的基于動作的開源Java web框架。本文將介紹利用Stripes實現Java Web開發。

Stripes是一個以讓程序員的web開發簡單而高效為準則來設計的基于動作的開源Java web框架。本文將介紹Stripes與其它如Struts之類基于動作的框架的區別和其提供的一些存在于Ruby on Rails之中的簡單性,利用Stripes實現Java Web開發。

Stripes是一個以讓程序員的web開發簡單而高效為準則來設計的基于動作的開源Java web框架。傳統的Java web開發著眼于借去耦(Decoupling)來實現其靈活性,但導致多個的配置文件,額外的對象,和其他資源的分散。這些困難造成相當多的程序員的更高的學習時間和低下的效率。其結果是有些Java程序員被一些非Java的框架所吸引去了:Ruby on Rails或者Django。一些Java web框架,如Stripes,正在開始從這些非Java框架中汲取其成功經驗:簡單而高效的開發。本文將介紹Stripes與其它如Struts之類基于動作的框架的區別和其提供的一些存在于Ruby on Rails之中的簡單性。

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

用Stripes寫的應用程序中的正常事件流程和組件

圖 1 典型Stripes流程

如你所見,利用Stripes實現Java Web開發過程中,其流程基本上就是一個MVC框架。Stripes和其他的基于動作的框架的一個主要的區別是沒有一個外部的配置文件。我們隨后將看到,Stripes用annotation和約定而非配置來提高產出和減少雜亂。

編寫你的***個Stripe動作(Action)

讓我們現在就開始通過創建Hello World例程來了解Stripes框架和理解其運作。HelloWorldAction類將提示用戶輸入姓氏和名字然后在另一個View里面顯示,首先我們來編寫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類是一個實現了Stripes特有接口ActionBean的POJO(Plain Old Java Object,譯注:讀破粥)。所有的Stripes動作類都要實現這一接口以讓StripesDispatcher servlet在運行服務時為其注入一個ActionBeanContext對象。ActionBeanContext對象可以讓你存取的對象如request、response、和servlet context等servlet API。大多數時候在Stripes應用中是不用讀取這些底層API對象的。

ActionBeanContext類還提供當前動作的狀態并可以添加信息消息和錯誤消息到當前動作中。ActionBeanContext的變量和其讀寫方法可以放在一個基類里面,因為所有的Stripes動作都要實現之。

Controller類的其他部分對于任何Java程序員來說都是很面熟的。有一個Person對象和其讀寫方法是用來讀寫用戶的姓名給view的。雖然這僅僅是一個簡單的嵌套對象,Stripes可以通過Java集合、泛型支持、和下標化的屬性來實現更復雜完善的數據捆綁。因為Stripes可以處理復雜數據捆綁,你的領域對象(Domain Object)可以在其他需要它們的層重用。例如:通過Stripes你可以很容易的收集一個領域對象的信息,然后用其他的POJO框架,如Hibernate或者EJB3來對其進行持久化。

Person對象變量上有一個Stripes驗證annotation用來保證用戶在激活hello方法的時候已經輸入了姓名。如果用戶沒有輸入這兩個必需的變量,原始頁會被返回,并顯示一個相關的錯誤消息。該驗證只有在hello事件被申請的時候才會被激活,因為annotation的屬性中指定了(on = {"hello"})。Stripes還會使用實用默認法則,根據驗證方法和變量名稱產生一個錯誤信息。例如,如果Person類的firstName變量在提交的時候沒有提供,用戶將看到:

Person First Name is a required field.

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

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

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

若是用戶輸入了一個小于13的整數,用戶將看到這個消息:

The minimum allowed value for Age is 13.

同樣地,我們沒有必要為這些錯誤消息提供任何外部的配置文件。Annotation提供的驗證與你的變量在同一個位置上,使得程序員定位驗證、理解驗證的內容、和對驗證進行維護變動更容易。

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

public Resolution eventName

請注意index方法被標注為@DefaultHandler annotation。因為在本動作中有多個事件,其中一個必須被指定為默認事件。如果調用本動作的URL沒有指定哪個事件,Stripes則查找標注有@DefaultHandler annotation的事件,并執行。

顯示層(View)

現在讓我們給Hello World例程加上顯示層的邏輯。Stripes默認支持JSP為顯示層的標準技術,不過你也可以用其他的顯示層技術,比如FreeMaker。除了Stripes的tag庫以外,沒有什么新的東西要學。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>
......

這個JSP易讀易維護。而Stripes用于form和input的tag跟對應的HTML代碼非常相似。stripes:form tag包含一個beanclass屬性,其值為我們前面定義的controller類的完整類名。我們可以用stripes:form中的action屬性來替換beanclass屬性,但是beanclass屬性可以讓你在以后對Stripes動作進行重構的時候更加方便。如果你要用在stripes:form tag中使用action屬性,方法如下:

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

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

我們現在已經完成了提交姓名的值給HelloWorldAction,剩下的就是在另一個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將自己通過一個對動作的引用讀取person的姓名信息并顯示。為達到這一目的,Stripes自動在request的屬性中添加一個名為actionBean動作對象,以供JSTL存取。***,我們用了一個strips:link tag來建立一個返回HelloWorldAction地鏈接從而可以讓我們輸入不同的姓名。我們以可以通過如下辦法顯式地創建一個指向index事件的stripes:link:

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

因為我們已經用annotation把index方法標記為@DefaultHandler,Stripes無須event屬性也知道要執行哪一個方法,這樣完成利用Stripes實現Java Web開發。

【編輯推薦】

  1. 淺談如何構建Java Web快速開發框架
  2. 快速啟動一個Java Web編程框架
  3. 告訴你怎樣學Java才是硬道理
  4. 垃圾清理勢在必行——Java垃圾收集算法
  5. 想動就“動” Java也可以“動態”靈活
責任編輯:王觀 來源: 論壇整理
相關推薦

2009-01-11 10:13:39

Stripes開發框架JSP

2018-03-14 11:13:35

Web服務器Nginx

2015-12-31 10:14:54

React.js開發Web應用

2011-06-24 16:19:59

QT web Webkit

2009-04-13 11:38:27

IBMdWWeb

2009-05-18 09:21:46

XMLRIAREST

2012-09-28 10:18:53

IBMdw

2009-06-23 16:29:51

JSFSpring MVCStruts 2

2011-02-25 15:49:09

NecessitasQtAndroid

2010-03-21 19:05:19

微軟MSF

2017-02-27 17:06:43

Java Web開發亂碼

2009-09-03 16:52:44

Java Web開發框

2009-06-18 12:06:30

Java Web開發框

2009-08-21 17:17:49

C#攝像頭編程

2016-01-27 09:39:13

JoobyJava Web流程

2011-01-20 10:17:25

ibmdwWeb

2017-04-20 09:49:35

SwashbuckleWeb API Hel核心

2009-06-23 16:52:16

JSFHibernateWeb應用

2017-02-14 21:15:48

2010-09-15 12:15:23

NessusWEB應用安全掃描
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久69精品久久久久久国产越南 | av在线免费观看网址 | 免费在线一区二区三区 | 雨宫琴音一区二区在线 | 亚洲高清久久 | 免费av观看 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 黄色大片免费播放 | 自拍偷拍中文字幕 | 欧美做暖暖视频 | 久久久久久久一区 | 久在线观看 | 国产高清在线精品一区二区三区 | 视频在线h| 精品国产欧美在线 | 日韩久久精品视频 | 一区二区三区亚洲 | 欧美日韩亚洲一区 | 精品视频一区二区三区在线观看 | 国产精品欧美一区二区 | 在线免费观看一区二区 | 午夜激情免费视频 | 91天堂网 | 亚洲欧美另类在线 | 成人av网站在线观看 | 啪一啪在线视频 | 一区二区三区观看视频 | 九九热热九九 | 国产精品成人一区二区三区夜夜夜 | 日韩最新网站 | www.狠狠干 | 日本激情一区二区 | 欧美中文一区 | 黄色片视频免费 | 免费能直接在线观看黄的视频 | 国产一区二区 | 中文字幕免费在线 | av天天看| 91观看 | 国产99久久久久 | 色悠悠久|