需求:把客户信息存储到数据库中
一、创建web项目,搭建基盘
二、创建实体类
public classCustomer {privateLong cust_id;privateString cust_name;privateString cust_source;privateString cust_industry;privateString cust_level;privateString cust_phone;private String cust_mobile;
三、搭建struts2环境
①、引入struts2的开发jar包
②、配置struts2的核心过滤器
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
struts2
/*
③、编写Action
public class CustomerAction extends ActionSupport implements ModelDriven{//使用模型驱动获取页面上的值
Customer customer=newCustomer();
@OverridepublicCustomer getModel() {returncustomer;
}publicString saveUI() {return "saveUI";
}
}
④、在src下新建strust.xml,添加以下内容
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
regex:.*
/jsp/customer/add.jsp
⑤、测试struts2环境
- 新增客户
⑥、编写客户信息保存页面
编写Action的save方法,需要实例化Service的接口实现类,这样的话Action与Service属于紧耦合,所以需要使用Spring解耦
四、搭建Spring环境
①、引入jar包
②、通过配置将Service交给Spring,在src下新建applicationContext.xml
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
③、Action中调用Service
publicString save() {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService customerService=(CustomerService) applicationContext.getBean("customerService");
System.out.println("CustomerAction中的save方法执行了");
customerService.save(customer);returnNONE;
}
④、Service接口和实现类
//接口==============
public interfaceCustomerService {public voidsave(Customer customer);
}//实现类=============
public class CustomerServiceImpl implementscom.xxx.crm.service.CustomerService {
@Overridepublic voidsave(Customer customer) {
System.out.println("CustomerService的save方法执行了");
}
}
以上可以测试。
⑤、Service的接口实现类需要调用DAO层的方法,为了解耦DAO交给Spring管理
⑥、DAO接口和实现类
//接口==============
public interfaceCustomerDao {public voidsave(Customer customer);
}//实现类=============
public class CustomerDaoImpl implementsCustomerDao {public voidsave(Customer customer) {
System.out.println("CustomerDao中的save方法执行了");
}
}
⑦、Service中使用DAO
在Action使用Service时已经加载过applicationContext.xml了,就已经创建了Service和DAO了,所以就不需要再加载applicationContext.xml了。并且Service和DAO都是被Spring管理的,所以可以使用依赖注入的方式获取DAO的对象
Ⅰ、编写Service实现类的方法
public class CustomerServiceImpl implementscom.xxx.crm.service.CustomerService {privateCustomerDao customerDao;public voidsetCustomerDao(CustomerDao customerDao) {this.customerDao =customerDao;
}
@Overridepublic voidsave(Customer customer) {
System.out.println("CustomerService的save方法执行了");
customerDao.save(customer);
}
}
Ⅱ、Spring的属性注入(可以发现Spring的属性注入的前提:1、一个类要被另一个类使用,2、这两个类都必须是Spring管理的)
五、问题
上述案例每次请求都会创建Spring的工厂,浪费服务器资源
解决:
在服务器启动的时候创建Spring的工厂
将工厂存储到ServletContext中
每次请求从ServletContext中获取
使用Spring核心监听器(ContextLoaderListener)
①、引入jar包
spring-web.jar
②、配置监听器
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
③、在Action中获取工厂
publicString save() {
ServletContext servletContext=ServletActionContext.getServletContext();
WebApplicationContext applicationContext=WebApplicationContextUtils.getWebApplicationContext(servletContext);//ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService customerService=(CustomerService) applicationContext.getBean("customerService");
System.out.println("CustomerAction中的save方法执行了");
customerService.save(customer);returnNONE;
}