Struts spring整合问题

liccd 2014-01-13 03:01:08
我吧action 交给Spring 管理,为什么本次请求aciton 时 会被实例化2

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.ui.theme" value="css_xhtml"/>
<constant name="struts.devMode" value="true"/>

<constant name="struts.objectFactory" value="spring" />
<!-- <constant name="struts.objectFactory.spring.autoWire" value="name"/> -->

<package name="default" extends="struts-default" namespace="">
。。。。
</package>

<package name="root" extends="struts-default" namespace="/">

</package>

<package name="auth" extends="struts-default" namespace="/manage">
。。。
</package>

<package name="bizRCS" extends="struts-default" namespace="/rcs">
<action name="company" class="companyAction" >
<result name="success" type="dispatcher">/jsp/biz/rcs/companyInformation.jsp</result>
</action>
</package>

</struts>

spring bean.xml

...
<bean id="companyAction" class="com.liccd.eabp.web.action.CompanyAction" scope="prototype">
<property name="service" ref="defaultCompanyServiceImpl" />
<property name="carService" ref="defaultCarServiceImpl" />
</bean>
...
...全文
194 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxax 2014-01-14
  • 打赏
  • 举报
回复
struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面 如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。所以Struts2的Action是多例模式的。 问题出现了,可以让struts2的action变成单例模式么?我在使用spring来生成action的时候,发现生成的action居然全是单例的。这不是让我的程序默认就跑出bug来么?上个用户提交的信息,如果下个用户没填,居然跑到上个用户输入的信息去了。 Spring的Ioc容器管理的bean默认是单实例的 Spring的bean可以针对每一个设置它的scope,所以,上面的问题就不是问题了。如果用多例,就在spring的action bean配置的时候设置scope="prototype".好吧,问题到此结束
sxax 2014-01-14
  • 打赏
  • 举报
回复
http://localhost/rcs/company!?guid=1 你这样的链接怎么能找到对应的action呢? 首先你的!后面没带如一个方法,而且你的后边没带.action 一般不推荐在页面上加入方法 你可以这样companyAction_execute 你的struts.xml文件 <action name="companyAction_*" class="xx.xx.xx" method="{1}"> 使用*通配符获取方法
liccd 2014-01-14
  • 打赏
  • 举报
回复
引用 4 楼 the_small_base_ 的回复:
struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面 如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。所以Struts2的Action是多例模式的。 问题出现了,可以让struts2的action变成单例模式么?我在使用spring来生成action的时候,发现生成的action居然全是单例的。这不是让我的程序默认就跑出bug来么?上个用户提交的信息,如果下个用户没填,居然跑到上个用户输入的信息去了。 Spring的Ioc容器管理的bean默认是单实例的 Spring的bean可以针对每一个设置它的scope,所以,上面的问题就不是问题了。如果用多例,就在spring的action bean配置的时候设置scope="prototype".好吧,问题到此结束
可是我已经配scope="prototype" 的 而且我发现,我在浏览器中用在Spirng中配的action的bean id(如:http://localhost/rcs/companyAction!execute.action?guid=1)可以成功 而用Struts2配置的name(如:http://localhost/rcs/company!?guid=1)来作为请求路径却报找不到对应的action 或result 可,action明明已经执行,会不会是我的Struts2和spring 没整合成
liccd 2014-01-13
  • 打赏
  • 举报
回复
都没人看的,不是说问题到CSDN基本都能解决吗?
liccd 2014-01-13
  • 打赏
  • 举报
回复
引用 1 楼 jinjieai4587 的回复:
构造方法呢?


public class CompanyAction extends BaseAction<Company> {
	private static final long serialVersionUID = -3564264901895152537L;
	
	public CompanyAction() {
		super();
		System.out.println("111111111111111111111111111111111111111");
		System.out.println(this.hashCode());
	}
	private ICompanyService companyService = (ICompanyService)this.service;
	private ServiceInterface<Car> carService;
	private Page<Car> carPage =  new Page<Car>(25);

	
	@Override
	@Auth(authValue=AuthType.READ,resourceCode="company")
	public String execute() throws Exception {
		ICompanyService service = (ICompanyService) this.service ;
		QueryResult<Car> qr = service.listCarByCompany(guid,start,limit) ;
		carPage.setResult(qr.getResults());
		carPage.setTotalCount(qr.getTotal());
		//System.out.println(WebUtil.getUser().getName());
		return SUCCESS;
	}

	
	public void setCompanyService(ICompanyService companyService) {
		this.companyService = companyService;
	}

	public ServiceInterface<Company> getCompanyService() {
		return companyService;
	}

	public ServiceInterface<Car> getCarService() {
		return carService;
	}



	public void setCarService(ServiceInterface<Car> carService) {
		this.carService = carService;
	}
	public void setCarPage(Page<Car> carPage) {
		this.carPage = carPage;
	}


	
	

}
jinjieai4587 2014-01-13
  • 打赏
  • 举报
回复
构造方法呢?

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧