利用Stripes实现Java Web开发

2016-02-19 20:07 7 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的利用Stripes实现Java Web开发,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】

Stripes是一个以让程序员的web开发简单而高效为准则来设计的基于动作的开源Java web框架。本文将介绍Stripes与其它如Struts之类基于动作的框架的区别和其提供的一些存在于Ruby on Rails之中的简单性。
  
  Stripes是一个以让程序员的web开发简单而高效为准则来设计的基于动作的开源Java web框架。传统的Java web开发着眼于借去耦(Decoupling)来实现其灵活性,但导致多个的配置文件,额外的对象,和其他资源的分散。这些困难造成相当多的程序员的更高的学习时间和低下的效率。其结果是有些Java程序员被一些非Java的框架所吸引去了:Ruby on Rails或者Django。一些Java web框架,如Stripes,正在开始从这些非Java框架中汲取其成功经验:简单而高效的开发。本文将介绍Stripes与其它如Struts之类基于动作的框架的区别和其提供的一些存在于Ruby on Rails之中的简单性。
  
  图1是典型的用Stripes写的应用程序中的正常事件流程和组件。
  
  

 
  图 1 典型Stripes流程

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)
  如你所见,其流程基本上就是一个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属性也知道要执行哪一个方法。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  用约定、不用配置文件
  
  我们现在有了Java组件,我们该做配置了,把动作映射的一个URL上,并将其连接到我们的两个view上面去。等一下!我们在用Stripes,我们不需要外部配置文件!
  
  虽然这听来似乎好得不像是真的,但这的确是Stripes的一项最具生产效率的功能。Stripes使用约定而非配置文件来映射动作到URL上。我们也无须使用一个外部配置文件来把view映射到一个个标记名字上。这意味着程序员不用再为了一个标记名字——比方说SUCCESS——的实际

来源:https://www.tulaoshi.com/n/20160219/1622823.html

延伸阅读
        一、简介 在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据。当然,入侵检测可以用很多方法实现,包括软件、硬件防火墙,入侵检测的策略也很多。在这里我们主要介绍的是Java Web应用程...
搞Java开发这么多年,说起J2EE Web开发,还真是百感交集、爱恨交加: 我爱J2EE服务器端编程带来的高可靠性、安全性和运行期的高效稳定性; 我恨以手工方式来编写jsp页面代码,我恨基于有限的Html界面组件进行编程! 俺一向佩服的牛人袁红岗说得好:现状让人有时怀念VB、Delphi可视化编程的时代,有时甚至会羡慕微软的.net、St...
标签: Web开发
上次我说了用ASP,PHP,C#分别实现Google的Translate开发一个API ( Tags:Google Translate API ) ,由于很多程序代码由JAVA实现(JSP),我还是利用一点时间做了一个java版本的,本人在JAVA方面还是入门的程度,期间,查了一些资料,虽然程序比较短,但是还是比较淘气的。   和上一话所说的利用JAVA获取URL的内容,这篇的技术实现获取,...
通过编程方式实现短信息的发送对很多人来说是一件比较烦杂的事情,目前一般的解决方法是通过计算机和手机的连线,通过可对手机编程的语言编写相关的手机短信息程序来实现,而这种方法对于一般人来说是很难达到的,因为此种方法不仅要有很多必备的硬件设备,也还需懂得手机编程的相关知识。本文就来探讨一下另外一种通过Visual C#发送短信息...
一.项目简介: Java语言是一种可移植的,简单的,健壮的嵌入式语言。并且对网络,数据库有很好的支持,基于JAVA语言的这种特性可以十分轻易地建立一个小型INTERNET服务器。!-- frame contents --   !-- /frame contents -- 本项目中,作者用JAVA语言编写了一个WEB微型服务器,对简单的HTTP请求进行响应,并通过后端数据库对用户...

经验教程

843

收藏

95
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部