本篇博文会根据一个简单的项目,来引导大家入门stripes framework!
1、开始前的准备:
(1)、java开发环境
(2)、eclipse或myEclipse IDE,如果是eclipse的话,应该是javaEE版的
(3)、服务器comcat(可以直接使用IDE导入comcat的解压包,直接在IDE(eclipse)上面运行服务器,这样简单)
(4)、jar包,(见下图)
####*** 相关的项目源码下载链接在本博文底部(包含jar包)***####

现在,我们开始一段神奇的旅程!let‘s go!
1、配置配件:web.xml
我先把内容贴初来
在上面的xml配置文件中,主要是关于Stripes Filter和Stripes Dispatcher Servlet的配置,因为我们刚刚开始接触stripes,所以我们暂时不要纠结它,just copy它到我们的项目中来就OK了,并且上面的东东在每一个stripes项目中都是这样的,so<?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>
just do it。
2、我们的项目的配置工作还没有结束,放心,都是很简单的。只需copy和paste就可以了。我指的是src文件下面的三个以properties为后缀的文件。这些是和日志等相关的,如果没有他们,问题不大,项目还是照样能跑的。我留着,你随意,嘿嘿!!!
3、接下来我们开始我们的前台的编写。我们这个小应用是一个简单的计算器,只能实现加法和除法功能,具体请看下面的代码,其中我标上了注释。所以。。。。。
前台已经准备就绪,我们的工作已经准备得差不多了。当我们输入两个数字,点击add按钮的时候,就会跳到后台来。<%@ 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>
那么,后台怎么接受和处理呢?请看。。。。。。
对于URL这一块,需要具体解释一下。Stripes的默认设置会检查ActionBean,同时依赖于它们的类和包名决定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可以改变类名到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
源码下载链接
##############欢迎转载,但请标明转载处,谢谢。###############