stripes framework(框架)入门教程(附案例分析)
本篇博文会根据一个简单的项目,来引导大家入门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 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
源码下载链接
##############欢迎转载,但请标明转载处,谢谢。###############
stripes framework(框架)入门教程(附案例分析)相关推荐
- 阿里云学生服务器购买以及使用入门教程(附案例学习)
最新版本的阿里云学生服务器该名称为:轻量应用服务器 虽然改名字了,但是还是以前的阿里云学生服务器.这次不仅改名称了,价格降低了(以前是1年114元,现在是1年96元),配置也更好了(以前配置是1核2G ...
- 80篇各ajax框架入门教程
AJAX经典入门教程,入门实例,入门代码收藏. *VS2008 Ajax.NET快速入门教程* (2008-3-25) [本站原创]Ajax!?!入门教程之道 (2008-4-13) [本站原创]Aj ...
- c++框架有哪些_Java Mybatis框架入门教程_v20200726
MyBatis 的前身是 Apache 的开源项目 iBatis.MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架.MyBat ...
- Egg框架入门教程合集之插件/工具/教程/专栏/开源项目
Egg框架入门教程之示例合集 Awesome Egg.js 很棒的清单,精选了最好的Egg.js插件,工具,教程,文章等.欢迎公关! 内容 博客 文章 讲解 会议活动 外挂程式 应用领域 样板 构架 ...
- 腾讯Web前端JX框架入门教程(一)
什么是JX框架 JX框架(Javascript eXtension tools)是模块化的非侵入式Web前端框架,适用于Web Page和Web App项目的开发,特别适合构建和组织大规模.工业级的W ...
- Tornado框架入门教程
Tornado框架入门教程 Tornado在知乎广为使用,当你用Chrome打开网页版本的知乎,使用开发者工具仔细观察Network里面的请求,就会发现有一个特别的状态码为101的请求,它是用浏览器的 ...
- [网络安全自学篇] 七十二.逆向分析之OllyDbg动态调试工具(一)基础入门及TraceMe案例分析
这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步.前文分享了外部威胁防护和勒索病毒对抗.这篇文章将讲解逆向分析OllyDbg动态调试 ...
- 南加大计算机专业硕士申请,南加州大学计算机科学专业硕士申请条件独家整理附案例分析...
H同学,在鑫泉留学精英团队的帮助下,以IBT:95;GRE:317+3.0;GPA:83.6%的成绩,被南加州大学计算机科学专业硕士成功录取.今天给大家分享一下该同学之所以成功被南加州大学计算机科学专 ...
- 公关传播与跨界营销的融合,附案例分析
文 | 公关之家 作者:Leon360k 跨界营销一直以来都受到品牌企业的关注,同时也是品牌在营销实施过程中通过公关传播实现塑造形象.提升影响力.增强美誉度的有效方式. 品牌的跨界营销主要方向包 ...
最新文章
- 上手kubernetes之前,你应该知道这6件事
- Java RMI 入门
- AC日记——Mato的文件管理 bzoj 3289
- 织梦CMS内核宝宝算命取名企业模板
- 通俗易懂设计模式解析——代理模式
- java中方法未定义_java - Java SE中的未定义方法错误 - 堆栈内存溢出
- Spring框架----Spring框架的基本概念
- 荐书丨如何快速成为150万+小程序开发者中的一员
- vijos1053 用spfa判断是否存在负环
- qt如何在TetxEdit设置背景色(可以设置行或列)
- oracle怎么查看索引表空间,oracle查看索引、表空间
- LNode *和LinkList的小区分
- 南开大学2017年数学分析高等代数考研试题
- linux 文件管理器,linux终端文件管理器ranger使用详解
- SystemC自带example的pipe研习
- 实现轮播模拟点击事件
- [转]数据挖掘在金融行业十大应用
- Georgia与Times字体的比较
- C# textbox 根据文字/字符 换行并自适应高度
- QT实现ListWidget排列图片
热门文章
- 【c语言】蓝桥杯算法提高 约数个数
- oracle 12c java 驱动,oracle12c驱动jar包
- mysql 字段授权_mysql授权管理
- pandas 数据分析 相关性_探索 COVID-19 新冠数据来学习 Pandas
- 5月第3周业务风控关注 |网信办公布整治教育类应用的成果 关闭“作业狗”等20余款应用...
- Python基础-第二天
- 【BZOJ1305】 [CQOI2009]dance跳舞
- Visual Studio2015如何连接到windows azure(国内版本)
- Android中LayoutInflater的使用
- 算法-打印两个有序链表的公共部分