最近有个项目改造,经过一番讨论后决定使用struts1,为什么不是struts2,呵呵,不是由我一个人说了算了,因为使用习惯了struts2,回头再来用struts1,感觉非常不爽,所以打
算对其进行改造一番,在网上也搜了一些关于struts1改造,都只是支持了Annotation配置和从IOC中取Action,我的改造目标在此之上加了一些,主要有:
1.支持基于Annotation的配置
2.不使用ActionForm但不去除它
3.支持Action方法参数值注入
4.简化文件上传处理
5.自定义返回结果处理如:直接返回string、Json、或者导出Excel
6.支持url到actionmethod的映射,如/actionPath/actionMethod.do而不是/actionPath.do?cmd=actionMethod
废话不多说,先看效果代码:
//定义action的入口URL
@Action(path="/hello")
//spring bean定义
@Component("hello")
public class HelloAction {
//领域数据对象
public static class Hello {
private String say;
public String getSay() {
return say;
}
public void setSay(String say) {
this.say = say;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
public String toString() {
return String.format("%s:'Hello,%s'", say,name);
}
}
//如果一个方法想作为一个外部接口,必须定义@ActionMethod,此配置有两个属性:
//path和resultType,path表示对外部的访问接口,不定义则直接使用方法名,resultType表示
//对返回的对象根据设置的结果进行任意处理
//returnType="string",表示对返回的任何对象调用toString直接写到响应流中去
@ActionMethod(resultType="string")
public String say(String name) {
return String.format("<h2>hello,%s</h2>", name);
}
//resultType=json表示对返回的对象以json格式的字符串写进响应流
@ActionMethod(resultType="json")
public List test(@Param("a")//表示从request取参数名为a的参数进行转型,转型使用commons工具实现,如果没有定义@param,则取参数的参数名则直接使用方法定义的形参名,对于Request,Response,actionForm,actionMapping属于默认处理类型,不需要定义@Param
List<String> aa,@Param("b")List<Integer> bb){
List all = Lists.newList();
all.addAll(aa);
all.addAll(bb);
return all;
}
@ActionMethod(resultType="string")
public Hello go(@Param("..")Hello hello) {
return hello;
}
@ActionMethod()
//文件上传直接使用commons的FileItem,Struts的文件上传不支持对同参数名的多个文件上传
public String upload(List<FileItem> test,ExecuteContext ctx) {
ctx.storeObject("files",Lists.toArray(test), Scope.REQUEST);
return "/upload";
}
}
主要就是继承RequestProcessor对创建Action、ActionMapping和ActionExecute这三个步骤进行改造,至于怎么改造看提交的代码啦!
分享到:
相关推荐
3. **配置方式多样化**:支持Annotation和XML配置,让开发者可以选择更适合自己的配置方式。 4. **与第三方框架的集成**:Struts2可以与Spring、SiteMesh和Tiles等框架无缝集成,增强了应用程序的功能和可扩展性。 ...
3. **配置方式多样**:Struts2支持XML和Annotation两种配置方式,使得配置更加灵活。 4. **Action与Servlet API解耦**:通过使用拦截器(Interceptor),Action的业务逻辑与Servlet API分离,使得代码更易于测试和...
4. **ActionForm**:在早期的Struts版本中,ActionForm用于封装用户的请求参数,但现在已经被ModelDriven和Annotation-based注解所替代。 5. **配置文件**:Struts配置文件(struts-config.xml或struts2的struts....
1. **添加Struts支持**:右键点击项目,在弹出的菜单中选择`MyEclipse -> Add Struts Capabilities`或直接通过菜单栏中的`MyEclipse -> Project Capabilities -> Add Struts Capabilities`进行操作。 2. **选择...
它支持两种验证方式:基于注解的验证(Annotation-based Validation)和基于XML的验证(XML-based Validation)。自定义校验主要是通过编写自定义校验器或扩展内置校验器来实现。 2. **自定义校验器实现** 自定义...
Struts2是一个基于Action的Model-View-Controller(MVC)框架,它源于Apache Struts 1.x系列,并与WebWork框架合并,提供了更强大的特性和功能。 Struts2框架的核心特性包括: 1. **基于Action的MVC设计模式**:每...
Struts2支持多种类型的Action实现,包括简单的POJO对象,而不仅仅是继承特定基类的Action。Action的主要职责是处理业务逻辑,并返回一个结果字符串来决定下一步的操作,比如转向某个JSP页面或使用FreeMarker模板等。...
- **RESTful支持**:SpringMVC支持RESTful风格的URL,例如使用`@RequestMapping("/items/{id}")`来映射`GET /items/1`这样的请求。 #### 七、RESTful风格的URL RESTful风格强调资源的URI和HTTP方法的正确使用,...
5. **使用MyEclipse自动生成实体类和映射文件**:利用MyEclipse的工具快速生成POJO类和对应的HBM映射文件,简化开发工作量。 6. **定义DAO接口及其实现**: - 定义DAO接口(如`CatalogDao`),声明基本的数据访问...
相比之下,Struts2更加依赖于Action类。 - **配置复杂度**:SpringMVC通过注解等方式简化了配置过程,而Struts2则需要更多的XML配置文件。 - **性能**:SpringMVC通常被认为具有更好的性能,特别是在高并发场景下。 ...
### Struts2精通知识点解析 #### 一、Struts2简介及发展历程 - **Struts2** 是一种基于...无论是在传统配置方式还是零配置模式下,Struts2都为开发者提供了丰富的工具和支持,帮助他们轻松应对各种复杂的业务需求。
1. **生成POJO类**: - 定义实体类,并使用注解(如@Entity、@Id等)来映射数据库表。 2. **编写DAO层**: - 创建DAO接口,定义基本的CRUD操作。 - 实现DAO接口,使用@Repository注解标注。 3. **编写Biz层**:...
Struts2拥有一个活跃的开发者社区,支持Annotation和XML配置,提供与Spring、SiteMesh和Tiles的集成,以及与OGNL(Object-Graph Navigation Language)表达式语言的融合。此外,它还包含基于主题的标签库和Ajax支持...
- **Action**:控制器类,负责处理用户请求。 - **ActionForm**:表单对象,用于封装用户提交的表单数据。 - **DynaValidatorForm**:动态表单对象,提供动态验证功能。 - **ActionMapping**:配置文件中 action ...
│深入浅出STRUTS 2 Struts Ti却发现了二者在技术与开发人员这两个层面上的共同之处,不久之后,两个项目就在WebWork的技术基础上进行了合并2。 当我们说起WebWork的时候,我们实际上说的是两个项目——XWork和...
-- 此处hibernate 的映射 采用的是.xml 配置同则应设置具体配置文件名(*.hbm.xml)</value>--> </list> </property> <!-- 事务配置管理 --> <bean id="transactionManager" class="org.springframework...
- **Module**:用于组织相关的Action和资源,便于管理和维护。 - **AbstractCmdAction与AbstractPageCmdAction**:提供了常用Action的基类,方便继承和扩展。 #### 三、配置文件 - **web.xml**:部署描述符文件,...
这是为了让Spring管理Action类,并通过Spring的AOP(面向切面编程)特性来增强Action的功能。 ##### 8. 配置Struts - 在Struts的配置文件`struts.xml`中,添加相应的Action配置。这里的类名应指向Spring中定义的...