1、Spring 核心容器理论:Spring就是一个大容器, 只要是一个java类,Spring就可以管理该java类,并把它当成bean处理。对于Spring框架而言,一切java对象都是bean.
2、Spring通过XML配置文件管理容器中的Bean。Spring对XML文件名无任何要求
<beans>
<bean id="userdao" class="struts44.UserDao">
</bean>
<bean id="handleAction" class="struts44.HandleDataAction">
<property name="userdao" ref="userdao"></property>
</bean>
</beans>
每一个Bean就表示一个java类,<bean></bean>元素默认以反射方式调用该类无参数构造器。id为容器中唯一标识,class的值是具体类。
<property> 是<bean>的子元素,它驱动Spring在底层以反射执行一次setter方法。 name属性值决定执行哪一个setter方法
,而value或ref决定执行setter方法的传入参数。
(1)如果传入参数是基本类型,则使用value属性传参数
(2)如果以容器中其他Bean作为传入参数,则使用ref属性指定传入参数
下面的例子就是以容器中的userdao作为传入参数,使用ref;
3、struts中整合Spring
注册用户,数据保存到数据库,显示注册信息
1)在项目中添加驱动
2)注册界面 reg.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="handleAction" method="post">
<label>账号</label><input name="user.zhanghao"/><br/>
<label>昵称</label><input name="user.nicheng"/><br/>
<label>密码</label><input type="password" name="user.mima"/><br/>
<label>邮箱</label><input name="user.youxiang"/><br/>
<label>QQ号</label><input name="user.qq"/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
3)用户提交的数据到handAction处理
package struts44;
import javax.websocket.Session;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class HandleDataAction extends ActionSupport {
User user=null;
UserDao userdao=null;
public UserDao getUserdao() {
return userdao;
}
public void setUserdao(UserDao userdao) {
this.userdao = userdao;
}
public User getUser(){
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute(){
int id=userdao.insertUser(user);
if(id>0){
user=userdao.getUser(id);
ActionContext ctx=ActionContext.getContext();
/*
* ActionContext 可以访问和设置Application Session Requst的值
* */
ctx.getSession().put("user", user);
System.out.println("it's fine"+id);
return SUCCESS;
}
else{
//addActionMessage("error");
return "error";
}
}
}
在 handAction中,将Uesrdao设置成为一个成员变量。赋值为null,并添加set,get方法。Spring在底层会给它new一个Userdao实例,并将这个对象注入到这个成员变量。
4)在application.xml配置bean, 这里 有两个bean,分别对应两个java类。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="userdao" class="struts44.UserDao">
</bean>
<bean id="handleAction" class="struts44.HandleDataAction">
<property name="userdao" ref="userdao"></property>//在handActon下在成员变量userdao 的set方法里传另一个bean元素userdao
</bean>
</beans>