stripes framework(框架)入门教程(附案例分析)

来源:互联网 发布:智能健康数据分析图 编辑:程序博客网 时间:2024/05/18 06:19
stripes框架是基于MVC设计模式的开源的web应用框架,坚持“convention over configuration(惯例优先原则)”致力于比Struts和SpringMVC更加轻量级的设计,不需要对每一个page/action进行映射配置,ActionBean会被主动发现,采用Annotation配置的方式。简单粗暴,容易上手!
本篇博文会根据一个简单的项目,来引导大家入门stripes framework!


1、开始前的准备:
(1)、java开发环境
(2)、eclipse或myEclipse IDE,如果是eclipse的话,应该是javaEE版的
(3)、服务器comcat(可以直接使用IDE导入comcat的解压包,直接在IDE(eclipse)上面运行服务器,这样简单)
(4)、jar包,(见下图)

####***相关的项目源码下载链接在本博文底部(包含jar包)***####

stripes framework(框架)入门教程(附案例分析) - 一个人躺在沙滩上 - 一个人躺在沙滩上
 
现在,我们开始一段神奇的旅程!let‘s go!
1、配置配件:web.xml
我先把内容贴初来

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<description>
Stripes Examples
</description>
<display-name>Stripes Examples</display-name>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Configuration of the Stripes Filter. -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<filter>
<description>
Provides essential configuration and request processing services
for the Stripes framework.
</description>
<display-name>Stripes Filter</display-name>
<filter-name>StripesFilter</filter-name>
<filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>

<!-- REQUIRED init parameter for the Stripes Filter. -->
<init-param>
<param-name>ActionResolver.Packages</param-name>
<param-value>net.sourceforge.stripes.examples</param-value>
</init-param>

<!-- Optional init parameter for the Stripes Filter. -->
<init-param>
<param-name>ActionBeanContext.Class</param-name>
<param-value>net.sourceforge.stripes.examples.bugzooky.BugzookyActionBeanContext</param-value>
</init-param>

<init-param>
<param-name>Stripes.EncryptionKey</param-name>
<param-value>Don't Copy/Paste Me! Make up your own encryption key and keep it secret!</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>StripesFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

<filter-mapping>
<filter-name>StripesFilter</filter-name>
<servlet-name>StripesDispatcher</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>


<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<!-- Configuration of the Stripes dispatcher Servlet. -->
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<servlet>
<servlet-name>StripesDispatcher</servlet-name>
<servlet-class>net.sourceforge.stripes.controller.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>StripesDispatcher</servlet-name>
<url-pattern>/dispatcher</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>StripesDispatcher</servlet-name>
<url-pattern>/action/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>StripesDispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>

在上面的xml配置文件中,主要是关于Stripes Filter和Stripes Dispatcher Servlet的配置,因为我们刚刚开始接触stripes,所以我们暂时不要纠结它,just copy它到我们的项目中来就OK了,并且上面的东东在每一个stripes项目中都是这样的,so
just do it。

2、我们的项目的配置工作还没有结束,放心,都是很简单的。只需copy和paste就可以了。我指的是src文件下面的三个以properties为后缀的文件。这些是和日志等相关的,如果没有他们,问题不大,项目还是照样能跑的。我留着,你随意,嘿嘿!!!


3、接下来我们开始我们的前台的编写。我们这个小应用是一个简单的计算器,只能实现加法和除法功能,具体请看下面的代码,其中我标上了注释。所以。。。。。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<!-- stripes的标签,相当于引用stripes标签的作用,没有它,就不能使用其标签-->

<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My First Stripe</title>
<style type="text/css">
input.error { background-color: yellow; }
</style>
</head>
<body>
<h1>Stripes Calculator</h1>

Hi, I'm the Stripes Calculator. I can only do addition. Maybe, some day, a nice programmer
will come along and teach me how to do other things?
<!--这里使用了stripes的表单标签,action后面是路径,这些属性和jsp中的差不多-->
<stripes:form action="/examples/quickstart/Calculator.action" focus="">
<stripes:errors/>
<table>
<tr>
<td>Number 1:</td>
<td><stripes:text name="numberOne"/></td>
</tr>
<tr>
<td>Number 2:</td>
<td><stripes:text name="numberTwo"/></td>
</tr>
<tr>
<td colspan="2">

<!--请留意这里的name属性,比如addiction,就对应ActionBean类(下面我会给出)中方法addition-->

 <stripes:submit name="addition" value="Add"/>
<stripes:submit name="d" value="Divide"/>
</td>
</tr>
<tr>
<td>Result:</td>

<!--注意这个result字段,它会对应ActionBean类中的result字段-->

 <td>${actionBean.result}</td>
</tr>
</table>
</stripes:form>
</body>
</html>


前台已经准备就绪,我们的工作已经准备得差不多了。当我们输入两个数字,点击add按钮的时候,就会跳到后台来。
那么,后台怎么接受和处理呢?请看。。。。。。

package net.sourceforge.stripes.examples.quickstart;


import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.HandlesEvent;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.validation.SimpleError;
import net.sourceforge.stripes.validation.Validate;
import net.sourceforge.stripes.validation.ValidationErrors;
import net.sourceforge.stripes.validation.ValidationMethod;

/**
* A very simple calculator action.
*/

public class CalculatorActionBean implements ActionBean {

//这个对象的作用非常大,比如获取HttpServletRequest等等

 ActionBeanContext context;

//表示这两个property得是double类型

 @Validate(required=true) private double numberOne;
@Validate(required=true) private double numberTwo;
private double result;


//必须要覆写的方法
public ActionBeanContext getContext() {
return context;
}
//必须要覆写的方法
public void setContext(ActionBeanContext context) {
this.context = context;
}

public double getNumberOne() {
return numberOne;
}

public void setNumberOne(double numberOne) {
this.numberOne = numberOne;
}

public double getNumberTwo() {
return numberTwo;
}

public void setNumberTwo(double numberTwo) {
this.numberTwo = numberTwo;
}

public double getResult() {
return result;
}

public void setResult(double result) {
this.result = result;
}


/** An event handler method that adds number one to number two. */

//这个defaultHandler的作用是,这个ActionBean类默认的执行方法,具体什么意思?

//举个例子:如果用户在前台不是点击“加”按钮,而是直接按键盘的Enter键,那么,后台就默认执行这个方法。

//前台中的表单中的submit属性的name就是与这个方法名对应的,也就是,当点击那个按钮之后,程序就知道应该执行这个方法了

 @DefaultHandler
public Resolution addition() {
result = numberOne + numberTwo;
return new ForwardResolution("/index.jsp");
}

/** An event handler method that divides number one by number two. */

   //这个会把名字division覆盖成d,也就是前台会认为这个方法叫d,不再是默认情况下的division了。

   @HandlesEvent(value = "d")
public Resolution division() {
result = numberOne / numberTwo;
return new ForwardResolution("/index.jsp");
}

/**
* An example of a custom validation that checks that division operations
* are not dividing by zero.
*/
@ValidationMethod(on="division")
public void avoidDivideByZero(ValidationErrors errors) {
if (this.numberTwo == 0) {
errors.add("numberTwo", new SimpleError("Dividing by zero is not allowed."));
}
}
}

对于URL这一块,需要具体解释一下。Stripes的默认设置会检查ActionBean,同时依赖于它们的类和包名决定
其URL路径。Stripes可以改变类名到URL路径的映射:
1、删除任何出现在包名路径中“web”,“www”,“stripes”,“action”之前的名称
2、如果在包名路径后面出现有“Action”和“Bean”(或者“ActionBean”),则把其删除
3、在包名的最后加上“.action”
比如,按照上面的规则,有:
net.sourceforge.stripes.examples.quickstart.CalculatorActionBean 变成:
  • examples.quickstart.CalculatorActionBean
  • examples.quickstart.Calculator
  • /examples/quickstart/Calculator.action


到现在,我们已经完成了我们的小项目的编写。你可能会问,有没有搞错?没有其他的配置文件了吗?没有其他的配置文件了。很简单吧!那我们现在可以跑起来了!

#############################################################################
*****************************************************附件****************************************************************
##############################################################################

@UrlBinding:该注释允许 ActionBean 类生成定制 UrlBinding URL 路径。在带注释 的 UrlBinding 路径被

请求时,会调用 ActionBean 类。

@HandlesEvent:该绑定允许通过指定的名称调用actionBean() 方法。默认情况下, Stripes 试图将事件名

解析成 actionBean() 方法中的方法名,除非它找到该注释。

@DefaultHandler:该注释允许在到 ActionBean 的请求中未提供事件名时执行一个方法。默认情况下,如果

只有一个处理程序方法存在于 ActionBean 中,那么该名称自然就 成为默认的名称。

@SessionScope:使用该注释,您可以在初始化时将ActionBean 放置在用户会话中, 从此之后在会话的生命

期重用它。

@Wizard:该注释允许 ActionBean 被看作向导表单的一部分(一个逻辑表单分成多个物理页面)。向导接收

特殊的状态管理和验证处理。

验证注释:

@DontValidate:该注释允许 ActionBean 事件跳过验证。

@Validate:利用该注释,可以在 ActionBean 中为单个字段配置定制的验证规则。 Validate 注释允许特殊

的参数定义验证业务规则。可以利用预配置的验证器,利用一个 表达式或组合(例如 @Validate

(required="true",minlength="1",maxlength="200")) 创建定制验证器。

@ValidateNestedProperties:该注释允许为对象验证使用嵌套的validate() 方法。

@ValidationMethod:利用该注释,您可以在任何事件处理程序被调用之前执行一个特 殊的验证方法。

其他注释:

@Before
@After
@SpringBean
@Test

源码下载链接

##############欢迎转载,但请标明转载处,谢谢。###############
0 0
原创粉丝点击