`
colin4k
  • 浏览: 29852 次
文章分类
社区版块
存档分类
最新评论

我的struts2配置,间接实现零配置

阅读更多
所谓间接实现零配置,是指只要做些初始化的配置之后,在以后的开发中基本上不用再对每个Action做配置

struts.xml这样配置
<action name="*/*" method="{2}" class="workbench.web.actions.{1}Action">
   <result name="custom">/view/{1}/${target}.jsp</result>
</action>


struts.properties的配置:
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
struts.devMode = true
struts.enable.DynamicMethodInvocation = false
struts.action.extension = 
struts.enable.SlashesInActionNames = true


然后写一个BaseAction:
public abstract class BaseAction {
	protected final String CUSTOM = "custom";
	private String target;
	protected final Log logger = LogFactory.getLog(getClass());
	public String getTarget() {
		return target;
	}
	public void setTarget(String target) {
		this.target = target;
	}
	
	protected String render(String _target){
		setTarget(_target);
		return CUSTOM;
	}
}


这样其余的Action都可以直接继承BaseAction,不用再做任何配置
通过return render(target)转发到指定的jsp页面,从而间接实现零配置

public class UserAction extends BaseAction{
	private User user;
	private UserService userService;
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String test(){
		user = userService.get(1l);
		return render("test");
	}
}


URL:http://localhost:8080/workbench/User/test
分享到:
评论
20 楼 sheqiguo 2008-04-03  
学习学习学习
19 楼 ericxu131 2008-03-19  
全都用固定规则固定好 感觉有点ror的感觉
18 楼 feigme 2008-02-12  
<action name="identity_*_*" method="{1}" class="identityAction">
            <result name="input">{2}.jsp</result>
            <result>login_ok.jsp</result>
</action>
补充一下,用这种配置也可以解决验证后返回不同页面的问题
但是action的name就变得繁琐点
不知道这样有无隐患
17 楼 feigme 2008-02-12  
kissbey 写道
涉及到校验的话没有input怎么返回,struts会报错的

我也是碰到这个问题
不知道楼主有什么解决
<result name="input">{1}.jsp</result>
16 楼 kusoft 2008-01-31  
我不太清楚,楼主为什么不打开struts.enable.DynamicMethodInvocation = true,难道打开这个参数,会有问题吗?
15 楼 kissbey 2008-01-30  
涉及到校验的话没有input怎么返回,struts会报错的
14 楼 worfchina 2008-01-04  
不错  继续关注
13 楼 shim 2007-12-16  
colin4k 写道

struts.xml这样配置
<action name="*/*" method="{2}" class="workbench.web.actions.{1}Action">
   <result name="custom">/view/{1}/${target}.jsp</result>
</action>


struts.properties的配置:
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
struts.devMode = true
struts.enable.DynamicMethodInvocation = false
struts.action.extension = 
struts.enable.SlashesInActionNames = true



URL:http://localhost:8080/workbench/User/test


跟着做了,结果不成功,Struts2的jar版本也是最新的。
不知道楼主能否把配制说详细些,如web.xml里的配制等,
最好能给个简单可运行的Demo了。
12 楼 yyjn12 2007-12-04  
struts2的热衷者们,我有个问题想请教一下.

在linux resin3 环境下,你们有没有遇到问题?
11 楼 absolute 2007-12-04  
做验证好像就有问题了,楼主碰到过吗,你是怎么做的
10 楼 colin4k 2007-11-20  
jxd1976 写道
colin4k 写道
另外以上代码是经测试通过的,今天加上了事务的控制,自己写了个Interceptor


这个零配置不错,把事务控制的代码也贴上来,学习一下。

web根目录下的index.jsp怎么处理?


事务控制主要有以下几个步骤,
第一、TransactionInterceptor的部分代码
protected String doIntercept(ActionInvocation invocation) throws Exception {
		String result = null;
		PlatformTransactionManager transactionManager = (PlatformTransactionManager) BeanLoader
				.getBean("transactionManager");
		DefaultTransactionDefinition def = new DefaultTransactionDefinition();
		
		def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
		def.setReadOnly(false);
		TransactionStatus transactionStatus = transactionManager
				.getTransaction(def);
		try {
			result = invocation.invoke();
			transactionManager.commit(transactionStatus);
		}
		catch (Exception e) {
			transactionManager.rollback(transactionStatus);
			logger.error("action error,rollback transaction.");
			throw e;
		}
		return result;
	}

第二、定义用于事务的拦截器

<interceptor name="transactionInterceptor" class="TransactionInterceptor">
	<param name="includeMethodsPrefix">act,deal</param>
</interceptor> 

includeMethodsPrefix参数用于定义以这些字符串开头的方法都采用事务控制。

第三、配置拦截器到Action上,这个就不用写了。
9 楼 jxd1976 2007-11-12  
colin4k 写道
另外以上代码是经测试通过的,今天加上了事务的控制,自己写了个Interceptor


这个零配置不错,把事务控制的代码也贴上来,学习一下。

web根目录下的index.jsp怎么处理?
8 楼 z13585197077 2007-11-08  
刚开始学Struts2,谢谢楼主,希望楼主以后多发点好帖
7 楼 colin4k 2007-11-07  
kusoft 写道
为什么不设置struts.enable.DynamicMethodInvocation = true,这样的话,不需要配置xml了

如果不配置xml,那拦截器怎么设置?全部用注解?那太繁琐了。
我觉得使用新技术不是为了用新技术而新技术,而是看是不是能提高效率。
6 楼 colin4k 2007-11-07  
zhyun29 写道
正在学习struts2,请问楼主struts.objectFactory.spring.autoWire这一项是什么意思?谢谢

这是定义struts2的action在注入业务逻辑类的时候使用那种方式匹配spring context中的对象,是基于名字匹配,如果设置成type,则是基于类型匹配
5 楼 kusoft 2007-10-30  
为什么不设置struts.enable.DynamicMethodInvocation = true,这样的话,不需要配置xml了
4 楼 zhyun29 2007-10-30  
正在学习struts2,请问楼主struts.objectFactory.spring.autoWire这一项是什么意思?谢谢
3 楼 colin4k 2007-10-13  
另外以上代码是经测试通过的,今天加上了事务的控制,自己写了个Interceptor
2 楼 colin4k 2007-10-13  
姜太公 写道
这个似乎有点问题吧,你的前提就是返回的全部是success的forward,这样太简单了点

你大概没有看清楚,返回的不是Success,返回的是"custom",并通过BaseAction里的属性target,指向
jsp
1 楼 姜太公 2007-10-13  
这个似乎有点问题吧,你的前提就是返回的全部是success的forward,这样太简单了点

相关推荐

    知识共享-struts1.2配置文件详解(雷惊风).

    - 这是Struts配置文件的根元素,其配置类为org.apache.struts.config.ModuleConfig。该元素下有8个子元素,每个都扮演着不同的角色,如数据源配置、全局异常处理、全局转发等。 #### 2. **Data-Sources元素** - `...

    struts1.2配置详细

    虽然不能直接将 Struts 的 Action 设置为欢迎文件,但可以通过欢迎文件中的 JSP 页面来间接调用 Struts Action。例如: ```xml &lt;welcome-file&gt;welcome.jsp ``` 在 `welcome.jsp` 页面中,可以使用 Struts 的...

    struts2配置

    7. **插件支持**:Struts2有许多社区提供的插件,如 strut2-dojo-plugin(用于增强AJAX功能)、strut2-convention-plugin(实现约定优于配置)等,这些插件可以极大地扩展Struts2的功能。 通过上述配置,你可以根据...

    Struts2中直接和间接访问ServletAPI以及动态方法调用之感叹号

    在Struts2框架中,直接和间接访问Servlet API以及动态方法调用是两个关键概念,它们对理解和优化应用性能至关重要。 首先,让我们深入理解直接访问Servlet API。在传统的MVC模式中,Servlet扮演着控制器的角色,...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    - **Struts2**的Action类并不直接依赖Servlet API,而是通过中间层(如拦截器)间接与Servlet API交互,这样的设计使得**Struts2**的Action更加独立,也更容易进行单元测试。 #### 请求处理流程 - **Struts1**执行...

    Struts2入门教程(全新完整版)

    3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 4 (5)其它配置文件 4 4.让MyEclipse提示xml信息 4 5.如何...

    struts1.x和struts2.x区别

    而Struts2.x通过拦截器栈(Interceptor Stack)实现了动态配置,可以根据需要为不同Action配置不同的拦截器,大大增强了框架的灵活性和扩展性。 综上所述,Struts2.x相对于Struts1.x在多个方面进行了改进和优化,...

    struts2从2.3.26升级2.3.34的文档

    - **检查依赖**:了解当前项目对Struts2的依赖情况,包括直接依赖和其他库可能间接依赖的Struts2版本。 - **了解变更**:阅读官方的发行说明,了解2.3.34相对于2.3.26的新增特性和改动,特别是与项目相关的重要...

    Struts2学习文档

    - **概念介绍**:在Struts2框架中,Action对象可以通过`ActionContext`来间接访问到Servlet API,这是因为Struts2内部实现了Servlet容器的相关功能。这种设计模式能够更好地实现业务逻辑层与Web容器之间的解耦。 - ...

    struts1.0与struts2.的区别

    **Struts2**中的Action则通过依赖注入的方式与Servlet API进行交互,这意味着Action无需直接处理HttpServletRequest和HttpServletResponse对象,而是通过Struts2框架提供的服务间接访问这些对象,大大降低了耦合度。...

    struts2+dwr整合例子,部署后可直接用

    这个整合的例子对于学习者来说是非常有价值的,因为它展示了如何在实际项目中结合Struts2和DWR,实现动态和交互性强的Web应用。通过这个例子,开发者可以了解如何在Struts2的框架下有效地利用DWR进行Ajax通信,以...

    struts1和struts2的区别

    - Struts2的Action类不直接依赖Servlet API,而是通过Struts2的内部机制间接访问请求和响应,这样降低了Action类与Web容器的耦合度,增加了代码的可移植性。 4. **测试**: - 在Struts1中,为了测试Action类,...

    struts2知识总结

    Struts1的Action需要继承抽象基类,而Struts2的Action可以实现Action接口或其他接口,甚至无需接口,任何带有execute方法的POJO都可作为Action。Struts1的Action采用单例模式,需要确保线程安全,而在Struts2中,每...

    Struts2源码分析

    Struts2的核心组件包括:`ActionContextCleanUp`、`FilterDispatcher`、`ActionMapper`、`ActionProxy`、`ActionInvocation`以及相关的配置机制。本文将深入探讨这些核心组件的工作原理,并通过对Struts2请求处理...

    Struts2的Action中获得request response session几种方法

    Struts2的Action可以通过`ActionContext`来间接获取`request`、`response`和`session`。`ActionContext`是Struts2的一个核心类,它提供了当前执行上下文的信息,包括了request、response和session等。通过`...

    struts2框架

    2. **配置Struts2**:在`src`目录下创建`struts.xml`文件,这是Struts2的核心配置文件,用于定义Action、拦截器和结果视图。同时,需要在`web.xml`中配置Struts2的过滤器,以便在服务器启动时拦截并处理请求。 3. *...

    struts1和struts2的对比

    - Struts2的Action可以是任何实现了特定接口的Java对象(POJO),不需要继承特定的基类。 - Action可以通过拦截器(Interceptors)来扩展功能,而不仅仅是通过继承。 - Struts2提供了强大的依赖注入机制,使得...

    struts2+spring +hibernate

    Struts2通过配置文件(struts.xml)来定义这些映射关系,使得请求能够正确路由。 其次,Spring框架提供了全面的依赖注入(DI)和面向切面编程(AOP)能力。在本例中,Spring用于管理Struts2中的Action实例,以及与...

    struts2教程

    - `struts.xml`是Struts2的核心配置文件,用于定义Action、结果类型、拦截器等。 - 引用Struts标签库:`&lt;%@taglib prefix="s" uri="/struts-tags"%&gt;`使得在JSP页面中可以使用Struts2提供的标签。 - Bean配置:...

Global site tag (gtag.js) - Google Analytics