欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

轻量级mvc框架之:stripes (一、约定大于配置)

程序员文章站 2022-07-15 12:46:03
...

struts实在是太耀眼了,导致其他一些mvc框架被受冷落,连官方的jsf都没能取代struts。事实上,不少mvc框架有各自不少优点。

下面介绍一款轻量级mvc框架:Stripes

stripes非常轻,除了依赖commons-logging.jar外,本身只有一个jar包:stripes-1.5.7.jar

项目网址: http://www.stripesframework.org

下载地址:http://sourceforge.net/projects/stripes/files/stripes/Stripes%201.5.7/stripes-1.5.7-src.zip/download  (含官方例子,很合适入门)

最新版本:1.5.7

特性:吸取了ruby on rails的约定大于配置的优点,在Stripes里看不到xml配置文件,自动完成Action的映射,辅之少量注解即可完成Action的Mapping,validation,ajax等特性。

 stripes是怎样绑定action到对应的url的?

一。stripes的约定大于配置规则如下:

1.去掉包名含有www、web、stripes、action前面部分。

2. 去掉类名的Action、ActionBean

3. 把.替换为/ ,然后加上后缀 .action

例:net.sourceforge.stripes.examples.quickstart.CalculatorActionBean

-> examples.quickstart.CalculatorActionBean

-> examples.quickstart.Calculator

-> /examples/quickstart/Calculator.action

 

当然,也可以用注解annotation来绑定自己想定义的地址

比如在类的上面加上注解:

@UrlBinding("/user/login")

则对应的上下文地址是: /user/login.action

 

二。一个类多方法映射

    在struts2里,一个类可以写多个方法,绑定不同的url和返回视图页,

在stripes里也可以有多个方法,而且更方便,支持一个表单,两个不同名称的提交按钮,这两个submit的name分别对应Action类里的两个方法,名称需一致。

比如:

表单

<form action="User.action">
username: <input type="text" name="username"/>
password: <input type="text" name="password"/>
<input type="submit" name="login" value="登录" /> 
<input type="submit" name="register" value="注册" /> 
<a href="User.action?list">已注册用户</a>
</form>

 Action类:

public UserAction implements ActionBean{
    ...
    public Resolution login() {
     // dosomething();
    }
    public Resolution register() {
     // dosomething();
    }   
    public Resolution list() {
     // dosomething();
    }
}

 点击登录,则对应url为 User.action?login=, 执行login方法体里的代码。

 点击注册,则对应url为 User.action?register=, 执行register方法体里的代码。

 

 三。验证

通过@Validate注解来设置。

可参照官方例子,里面较全

 

四。web.xml的配置

	<filter>
		<display-name>Stripes Filter</display-name>
		<filter-name>StripesFilter</filter-name>
		<filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class>
		<init-param>
			<!-- 指定扫描Action的包路径 -->
			<param-name>ActionResolver.Packages</param-name>
			<param-value>com.jiayuan.stripes.demo.web.action</param-value>
		</init-param>
		<init-param>
			<!-- 扩展包,此处用于读取多个properties文件,默认只读取StripesResources -->
			<param-name>Extension.Packages</param-name>
			<param-value>stripes.extension</param-value>
		</init-param>
		<init-param>
			<!-- locale指定和编码指定 -->
			<param-name>LocalePicker.Locales</param-name>
			<param-value>zh_CN:UTF-8,en_US:UTF-8</param-value>
		</init-param>
		<init-param>
		    <!-- 多个resourceBundles,多个resource,则用逗号分开 -->
			<param-name>ResourceBundles.BaseNames</param-name>
			<param-value>application</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>
	<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>

 

五。中文乱码问题

  只需要在配stripes的filter时,初始参数LocalePicker.Locales配为zh_CN:UTF-8或zh_CN:GBK即可解决中文乱码问题。

 

六。文件上传

 stripes里已经集成有上传模块,支持cos、commons-upload两种上传方式,

只需在对应的Action里申明一个

private FileBean upload; // .. 省略getter,setter

 

然后在需要保存文件的地方:

File file = new File(context.getServletContext().getRealPath("/upload/" + saveFileName));
upload.save(file);

 即可上传文件到/upload目录下。

 

附demo