在这里,我主要讲解怎么利用Struts2 convention插件的加入后怎么处理和spring的整合。
首先创建实体类,Customer
@Entity
public class Customer implements Serializable {
private static final long serialVersionUID = 6961371108792430359L;
private Integer id;
private String name;
private String address;
private Date createDate;
public Customer() {
}
public Customer(String name, String address, Date createDate) {
this.name = name;
this.address = address;
this.createDate = createDate;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="name",length=45,nullable=false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="create_date")
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
在配置sping sessionFactory bean的时候,sessionFactory的实现类应该为AnnotationSessionFactoryBean,然后再配置一下要spiring扫描的实体类的所在包
<property name="packagesToScan">
<list>
<value>org.clong.domain</value>
</list>
</property>
第二步,完成对dao的设计:
package org.clong.dao;
import java.util.List;
import org.clong.domain.Customer;
public interface CustomerDao {
public void save(Customer customer);
public List<Customer> findAllCustomers();
}
dao实现类如下:
package org.clong.dao.impl;
import java.util.List;
import org.clong.dao.CustomerDao;
import org.clong.dao.SuperDaoSupport;
import org.clong.domain.Customer;
import org.springframework.stereotype.Repository;
@Repository("customerDao")
public class CustomerDaoImpl extends SuperDaoSupport implements CustomerDao {
@SuppressWarnings("unchecked")
@Override
public List<Customer> findAllCustomers() {
return getHibernateTemplate().find("from Customer");
}
@Override
public void save(Customer customer) {
getHibernateTemplate().save(customer);
}
}
在这里我是利用了spring提供的HibernateDaoSupport这个来实现sessionFactory的注入,由于不想在每个dao中都设置sessionFactory的注入,所以写了一个父类用来被子类继承,在父类中注入sessionFactory。由于HibernateDaoSupport的setSessionFactory(SessionFactory sessionFactory)z方法是final类型的,所以子类不能覆盖,而且又不是使用配置文件,所以写了一个辅助类,
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class SuperDaoSupport extends HibernateDaoSupport {
private SessionFactory sessionFactory;
@Resource(name="sessionFactory")
public void setSuperSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
}
第三步,设计服务层
import java.util.List;
import org.clong.domain.Customer;
public interface CustomerBo {
void addCustomer(Customer customer);
List<Customer> listCustomer();
}
实现类为:
import java.util.List;
import javax.annotation.Resource;
import org.clong.bo.CustomerBo;
import org.clong.dao.CustomerDao;
import org.clong.domain.Customer;
import org.springframework.stereotype.Service;
@Service("customerBo")
public class CustomerBoImpl implements CustomerBo {
private CustomerDao customerDao;
@Resource
public void setCustomerDao(CustomerDao customerDao) {
this.customerDao = customerDao;
}
@Override
public void addCustomer(Customer customer) {
customerDao.save(customer);
}
@Override
public List<Customer> listCustomer() {
return customerDao.findAllCustomers();
}
}
第四步,设计action
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.clong.bo.CustomerBo;
import org.clong.domain.Customer;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
public class CustomerAction extends ActionSupport implements ModelDriven<Customer>,Preparable {
private static final long serialVersionUID = -4411234960652825984L;
private Customer customer;
private List<Customer> customerList=new ArrayList<Customer>();
private CustomerBo customerBo;
public Customer getCustomer() {
return customer;
}
public List<Customer> getCustomerList() {
return customerList;
}
@Resource
public void setCustomerBo(CustomerBo customerBo) {
this.customerBo = customerBo;
}
@Override
public Customer getModel() {
if(customer==null){
customer=new Customer();
}
return customer;
}
@Action(value="addCustomer",
results={
@Result(name="success",type="redirectAction",params={"actionName","listCustomer","namespace","/customer"}),
@Result(name="input",location="customer.jsp")
})
public String addCustomer() throws Exception{
//save it
customer.setCreateDate(new Date());
customerBo.addCustomer(customer);
//reload the customer list
// customerList = null;
customerList = customerBo.listCustomer();
return "success";
}
@Action(value="listCustomer",results={@Result(name="success",location="customer.jsp")})
public String listCustomer() throws Exception{
return "success";
}
@Override
public void prepare() throws Exception {
customerList = customerBo.listCustomer();
}
}
在这里,利用struts2提供的验证框架,简单的进行一下服务端验证
我们对CustomerAction这个类中的addCustomer这个action进行验证(验证文件名需要满足一定的规则,具体请参见Struts2官方文档中的内容),我们这里的验证文件名为CustomerAction-addCustomer-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="name">
<field-validator type="requiredstring">
<message>name cann't be empty</message>
</field-validator>
</field>
</validators>
注意这里action并不需要像没用convention插件那样加上类级别的@Controller注解
最后来个页面展示一下customer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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>
<h2>Add Customer</h2>
<s:form action="addCustomer" namespace="/customer">
<s:textfield name="name" label="Name" value="" />
<s:textarea name="address" label="Address" value="" cols="50" rows="5" />
<s:submit />
</s:form>
<h2>All Customers</h2>
<s:if test="customerList.size() > 0">
<table border="1px" cellpadding="8px">
<tr>
<th>Customer Id</th>
<th>Name</th>
<th>Address</th>
<th>Created Date</th>
</tr>
<s:iterator value="customerList" status="userStatus">
<tr>
<td><s:property value="id" /></td>
<td><s:property value="name" /></td>
<td><s:property value="address" /></td>
<td><s:date name="createDate" format="yyyy-MM-dd" /></td>
</tr>
</s:iterator>
</table>
</s:if>
<br/>
<br/>
</body>
</html>
最后提供一下完整的源代码供下载(Struts2 2.2.1,Spring2.5.6,Hibernate3.6.0的jar包没有提供)
- 大小: 43.1 KB
分享到:
相关推荐
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2作为MVC架构的一部分,负责处理用户请求和展现视图;Spring作为一个全面的框架,提供依赖注入(DI)和面向切面编程(AOP)...
Struts2.3.28、Spring4.1.6和Hibernate4.3.8是三个经典的Java EE框架,它们的整合是企业级应用开发中常见的技术栈,通常被称为S2SH。在这个版本的整合中,注解的使用极大地简化了配置过程,使得开发更加高效。以下是...
Struts2、Hibernate和...总的来说,Struts2、Hibernate和Spring的注解整合提供了更简洁、高效的开发方式,减少了XML配置,提高了代码可读性。通过理解并熟练掌握这些注解,开发者能更轻松地构建复杂的企业级应用。
4. **整合Struts2与Spring**:通过Struts2的Spring插件(struts2-spring-plugin),使Action类能够从Spring容器中自动注入。这样,Action可以直接使用由Spring管理的Service层对象。 5. **整合Hibernate与Spring**:...
Struts2、Hibernate和Spring是Java企业级应用开发中的三大框架,它们的组合通常被称为SSH(Struts2、Spring、Hibernate)。这个“SSH开发jar包”集合了这三大框架的核心库,为Java开发者提供了一个方便的开发环境。...
Struts2还集成了Spring和Hibernate等其他框架,使得整个应用程序更加健壮。 #### 二、Struts2中的注解(Annotation) Struts2框架通过其扩展插件——Struts Convention Plugin,支持使用注解的方式来配置控制器。...
SSH2整合指的是在Java开发中将Spring、Struts2和Hibernate三个开源框架集成在一起,以构建高效、灵活的企业级Web应用程序。在这个过程中,Spring提供依赖注入和事务管理,Struts2负责视图和控制层,而Hibernate则...
Struts2是基于Java的一个开源MVC框架,它继承了Struts1的设计理念,并且采用了拦截器架构,这使得它可以更好地与Spring、Hibernate等其他框架集成。Struts2支持多种配置方式,如XML配置、注解配置等,其中注解配置因...
import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class HelloWorldAction { @Action(value = "/hello", results = { @Result(name...
- 典型的插件有:Struts2-Spring-plugin(Spring整合)、Struts2-Convention-plugin(约定优于配置)。 6. **异常处理** - Struts2提供了一套完善的异常处理机制,允许开发者自定义错误页面和全局异常处理策略。 ...
SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架。本教程将深入探讨如何使用注解来构建SSH框架,以实现更简洁、高效的应用程序开发。 **Struts2** 是MVC设计模式的一个实现...
- Struts2可以轻松集成Spring、Hibernate等流行框架,实现更强大的功能。 9. **Action的生命周期** - 从请求到Action实例的创建,再到Result的返回,手册会详细解释每个步骤。 10. **异常处理** - 如何配置全局...
2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 ...
2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在本案例中,我们主要讨论如何在SSH框架下使用JSON进行数据...
在IT行业中,SSH(Struts2、Spring、Hibernate)是一个经典的Java Web开发框架组合,用于构建高效、可维护的企业级应用程序。在这个实例中,我们关注的是如何利用SSH框架中的注解来实现用户新增功能,同时结合查询...
- **Action层:** Springside3中Action层的设计主要依赖于Struts2的Convention插件,该插件能够自动识别和配置Action,使得Action的配置变得更加简洁。 - **示例代码:** ```java @Namespace("/security") public...