SSH的框架一度在JAVA企业应用中占有很高的比例,几年前也用SSH做过一些网站及应用服务接口相关的项目。最近在整理一些之前的工作,所以简单回顾一下。用下面的例子算是做个学习笔记吧。
每种框架都有其自身的优势和不足,这和框架本身的设计初衷以及后来的发展,包括社区支持等等各种因素相关。Anyway,现在越来越多的人认同Spring似乎提供了更好和更广的功能性选择。不过还是有一些因素,导致需要去学习或者使用Struts,比如:
1)你所在公司的一些老项目是使用Struts开发的,很不幸,你需要去维护他们
2)其他一些因素,你需要学习,比如架构选择的需要,或者和其他系统的对接等需要
3)或者你如果应聘一个架构师或者高级开发的岗位,常常有人会问你,讲讲struts 和 Spring的区别吧。。。
1)安装JDK,这是PATH
2)安装应用服务器,如Tomcat
3)安装构建工具,如 Maven
4)在IDE(如Eclipse或IDEA)的偏好设置中,设置应用服务器和构建工具的路径
5)设置示例程序所需的数据库,如
CREATE DATABASE `leedb`;
CREATE TABLE `product` (
`product_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`description` varchar(512) NOT NULL,
`price` float NOT NULL,
PRIMARY KEY (`product_id`)
)
1)创建一个 MAVEN web-app 类型项目
2)在 pom.xml 中添加如下内容
4.0.0
com.leelei
SSHDemo
war
1.0
SSHDemo
1.8
4.1.6.RELEASE
2.3.20
4.3.8.Final
5.1.34
org.springframework
spring-context
${org.springframework-version}
org.springframework
spring-context-support
${org.springframework-version}
org.springframework
spring-orm
${org.springframework-version}
jar
compile
org.apache.struts
struts2-core
${org.strutsframework-version}
org.apache.struts
struts2-spring-plugin
${org.strutsframework-version}
org.hibernate
hibernate-core
${org.hibernateframework-version}
org.apache.commons
commons-dbcp2
2.0
mysql
mysql-connector-java
${org.mysqlconnector-version}
junit
junit
3.8.1
test
src
maven-compiler-plugin
3.3
1.8
maven-war-plugin
2.4
webapp
false
package com.leelei.model;
public class Product {
private long id;
private String name;
private String description;
private float price;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
创建对应的Mapper文件, Product.hbm.xml
创建package com.leelei.dao
package com.leelei.dao;
import java.util.List;
import com.leelei.model.Product;
public interface ProductDAO {
List list();
}
dao的实现文件
package com.leelei.dao;
import java.util.List;
import javax.transaction.Transactional;
import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import com.leelei.model.Product;
public class ProductDAOImpl implements ProductDAO {
private SessionFactory sessionFactory;
public ProductDAOImpl(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
@Transactional
public List list() {
@SuppressWarnings("unchecked")
List listProduct = (List)
sessionFactory.getCurrentSession().createCriteria(Product.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
.list();
return listProduct;
}
}
package com.leelei.action;
import java.util.List;
import com.leelei.dao.ProductDAO;
import com.leelei.model.Product;
import com.opensymphony.xwork2.ActionSupport;
public class ListProductAction extends ActionSupport {
private ProductDAO productDAO;
private List listProduct;
public void setProductDAO(ProductDAO productDAO) {
this.productDAO = productDAO;
}
public String execute() {
listProduct = productDAO.list();
return SUCCESS;
}
public List getListProduct() {
return listProduct;
}
}
execute()调用ProductDAO(通过getListProduct())来获取产品信息列表以用于视图显示。Spring通过setter方法(setProductDAO())注入一个ProductDAO的实例。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
Product List
No
Product Name
Description
Price
SSHDemo
contextConfigLocation
/WEB-INF/spring/appContext.xml
org.springframework.web.context.ContextLoaderListener
DispatcherFilter
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
DispatcherFilter
/*
这里,我们将Struts配置成一个请求转发器,将Spring用作上下文监听器来管理Beans和依赖注入。
org.hibernate.dialect.MySQLDialect
true
在这里简单地通过 dialect来链接MySQL,并告诉它指定的MAPPER文件
/WEB-INF/views/ProductList.jsp
定义一个动作匹配来处理 URL /listProduct 请求。注意动作类现在被指向一个Spring管理的名为 -listProductActionBean 的 Bean。我们也配置了SUCCESS视图指向ProductList.jsp 页面。
http://www.codejava.net/frameworks/struts/struts-2-spring-4-hibernate-4-integration-tutorial-part-1-xml-configuration
根据以上文章翻译整理