spring框架与struts2框架的整合

spring与struts2的整合

1:单独配置struts
一:导入struts包

二:编写Action
public class JboaEmployeeAction extends ActionSupport {
public String login(){
System.out.println(“login…”);
return SUCCESS;
}
}

三:配置struts.xml

<?xml version="1.0" encoding="UTF-8" ?> index.jsp

四:配置web.xml —struts2的核心控制器

<?xml version="1.0" encoding="UTF-8" ?> index.jsp

五:测试struts配置是否成功
在IE测试输入:
http://localhost:8080/spring3_02/jboaEmployeeAction

2:准备spring与strus2的整合

一:导入包
struts2-spring-plugin-2.3.14.jar

二:配置web.xml—spring的监听器
如果导入了struts2-spring-plugin-2.3.14.jar后,没有配置如下代码,则会报错 com/opensymphony/xwork2/spring/SpringObjectFactory.java

contextConfigLocation classpath:applicationContext.xml org.springframework.web.context.ContextLoaderListener

三:在Action中,如何访问业务Bean
第一种:按名字匹配(推荐)
// jboaEmployeeService这个名字,应该对应业务层bean的id值
private JboaEmployeeService jboaEmployeeService;

public void setJboaEmployeeService(JboaEmployeeService jboaEmployeeService) {
System.out.println(“已经注入业务对象jboaEmployeeService…”);
this.jboaEmployeeService = jboaEmployeeService;
}

第二种:按类型匹配
关键:根据set方法中的参数类型匹配!

在struts.xml中配置常量: P74页最下面一段,和p75页最上面一段有说明

3:案例:根据登陆用户,判断职位
目的:突出说明OpenSessionInViewFilter

一:编写login.jsp
<%@ page language=“java” pageEncoding=“UTF-8”%>
<%@ taglib prefix=“s” uri="/struts-tags"%>

登录

登录

二:编写Action
public class JboaEmployeeAction extends ActionSupport {
private JboaEmployeeService jboaEmployeeService;

private JboaEmployee employee;

public String login(){
	System.out.println("login..............");
	
	JboaEmployee newEmployee =jboaEmployeeService.login(employee);
	
	//将登陆的信息都放入session
	Map<String, Object> session = ActionContext.getContext().getSession();
	session.put("newEmployee", newEmployee);
	
	System.out.println("职位是:"+newEmployee.getJboaPosition().getPosNameCn());
	
	String ret = SUCCESS;
	if (newEmployee == null) {
		System.out.println("返回登陆................");
		ret = INPUT;
	} 
	return ret;
}
public void setJboaEmployeeService(JboaEmployeeService jboaEmployeeService) {
	System.out.println("已经注入业务对象jboaEmployeeService.....");
	this.jboaEmployeeService = jboaEmployeeService;
}
public JboaEmployee getEmployee() {
	return employee;
}
public void setEmployee(JboaEmployee employee) {
	this.employee = employee;
}

}
三:编写index.jsp
编写测试代码:
职位是: n e w E m p l o y e e . j b o a P o s i t i o n . p o s N a m e C n < / b r > 欢 迎 : {newEmployee.jboaPosition.posNameCn }</br> 欢迎: newEmployee.jboaPosition.posNameCn</br>{newEmployee.empName }
------------------分割线-------------------------
运行index.jsp之后,获取职位信息【报错】!

解决方案一:
加上lazy="false"立即加载!

解决方案二:(推荐)
关键点:
1:在web.xml配置如下代码,必须放在struts核心控制器的前面
2:访问路径必须带结尾是*.action,否则无法触发.OpenSessionInViewFilter

OpenSessionInViewFilter org.springframework.orm.hibernate3.support.OpenSessionInViewFilter OpenSessionInViewFilter *.action

4:HibernateCallback实现自定义的分页
一:接口:
/**
* 利用回调函数,实现分页
* @param page
* @param size
* @return
*/
public List find(final int page,final int size);

二:实现:
public List find(final int page, final int size) {
List result = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(“from JboaEmployee”);
query.setFirstResult((page-1)*size);
query.setMaxResults(size);
return query.list();
}

	});
	return result;
}

5:struts2与spring整合的第二种方式
一:配置applicationContext.xml
<!-
action层
–>



二:修改struts.xml

index.jsp

注意【黄色】部分必须一致,但是的id值,不要和action name=“jboaEmployeeAction”>的值相同。

6:Spring中Bean的作用域
目的:需要了解概念,具体课堂不深入探讨这部分内容,感兴趣的同学需要到网络自学。

一:编写applicationContext-test.xml

<bean id="singleton" class="java.util.Date" scope="singleton"></bean>
 <!-- 原型日期   每次新建对象 -->
<bean id="prototype" class="java.util.Date" scope="prototype"></bean>

二:测试作用域的区别
/**

  • @包名 com.jbit.jboa.action

  • @文件名 TestDate.java

  • @作者 Cui.Ge

  • @创建日期 2013-6-5
    */
    public class TestDate {

    public static void main(String[] args) {
    ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext-test.xml”);

     DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
     
     Date s1 = (Date)ac.getBean("singleton");
     Date p1 = (Date)ac.getBean("prototype");
     
     System.out.println("s1 date 1 = "+df.format(s1));
     System.out.println("p1 date 1 = "+df.format(p1));
     
     System.out.println("等待5秒..........................");
     try{
     	Thread.sleep(5000);   //延迟5秒
     }catch(Exception e){
     	e.printStackTrace();
     }
    
     
     Date s2 = (Date)ac.getBean("singleton");
     Date p2 = (Date)ac.getBean("prototype");
     
     System.out.println("s2 date 2 = "+df.format(s2));
     System.out.println("p2 date 2 = "+df.format(p2));
     System.out.println("等待2秒..........................");
     try{
     	Thread.sleep(2000);   //延迟2秒
     }catch(Exception e){
     	e.printStackTrace();
     }
     
     
     Date s3 = (Date)ac.getBean("singleton");
     Date p3 = (Date)ac.getBean("prototype");
     
     System.out.println("s3 date 3 = "+df.format(s3));
     System.out.println("p3 date 3 = "+df.format(p3));
    

    }
    }

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

编程ID

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值