导语
最近在学习ssh框架,期间遇到各种错误,各种坑,挖坑填坑,生活还是美滋滋。为了日后重温旧梦,也为了遇到问题的伙伴能多些方法填坑,整理思路,梳理ssh
开发环境
开发环境:window7
eclipse: Mars.2 Release (4.5.2)(插件:springsource-tool,hibernatetools-Update插件下载过期私我)。至于怎么装这两个插件(百度),为什么不用Myeclipse,不要问我/(ㄒoㄒ)/
Mysql 5.5.1
Tocat7.0
对ssh的初步理解
创建Dynamic Web项目
创建web项目EMSystem,注意:自动生成web.xml
如图:(next->就能看见)
添加项目所需jar包下载地址 过期私我 ,版本:Stuts2.3.24, Spring3.2.5, Hibernate3.0,怎么添加就交给小聪明你了O(∩_∩)O
Struts2整合Spring
在Web容器中添加Spring核心监听器及Struts过滤器:
web.xml
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml
struts
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts
/*
创建包结构,如图:
编写简单的添加商品的业务功能,编写action,service,dao,entity类
商品实体:Product.java
package com.ssh.entity;
/**
* 表示商品的实体类
* @author Administrator
*/
public class Product {
// 商品id
private Integer pid;
// 商品名
private String pname;
// 商品价格
private Double price;
// getter,setter方法自动生成
}
商品action:ProductAction.java
package com.ssh.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.ssh.entity.Product;
import com.ssh.service.ProductService;
/**
* 控制层
* 采用模型驱动方式
* @author Administrator
*/
public class ProductAction extends ActionSupport implements ModelDriven{
// 模型驱动使用的类
private Product product = new Product();
// struts和spring整合自动注入的业务层类
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
@Override
public Product getModel() {
// TODO Auto-generated method stub
return product;
}
// 容易出错save()没有参数
public String save(){
System.out.println("ProductAction.save()方法被执行");
productService.save(product);
return NONE;
}
}
service:ProductService.java
package com.ssh.service;
import org.springframework.transaction.annotation.Transactional;
import com.ssh.dao.ProductDao;
import com.ssh.entity.Product;
/**
* 管理业务层的类
* @author Administrator
*/
@Transactional
public class ProductService {
// 业务层注入dao
private ProductDao productDao;
// setter方法注入bean
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
public boolean save(Product product){
System.out.println("ProductService.save()方法被执行");
productDao.save(product);
return true;
}
}
Dao:ProductDao.java
package com.ssh.dao;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.ssh.entity.Product;
/**
* Dao层,持久层
* @author Administrator
*/
public class ProductDao extends HibernateDaoSupport{
public boolean save(Product product){
System.out.println("ProductDao.save()被执行");
return true;
}
//hibernate 框架 获取配置文件,configuration,sessionFactory,session,
}
配置action,service,dao
配置applicationContext.xml
scope="prototype">
struct.xml
在WebContent下添加用于添加商品的addProduct.jsp页面
pageEncoding="utf-8"%>
addProduct保存商品的页面
商品名称 | |
商品价格 | |
好了,struts整合到此为止,可以试试看有没有点成就感,出错要耐心′`
Spring整合Hibernate
* 先做基础,创建ssh数据库,添加jdbc.properties,log4j.properties 源码里面有
jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/ssh?useUnicode\=true&characterEncoding\=utf-8
#jdbc:mysql://localhost:3306/ssh
jdbc.username=root
jdbc.password=123456
利用插件或myeclipse自动生成映射文件Product.hbm.xml
/p>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
再次配置applicationContext.xml,完成真正的连接数据
org.hibernate.dialect.MySQLDialect
true
true
update
com/ssh/entity/Product.hbm.xml
测试下自动创建表是否成功,执行项目即可
添加持久层代码,将商品信息保存到数据库(红色注释下方代码)
ProductDao.java
public class ProductDao extends HibernateDaoSupport{
public boolean save(Product product){
System.out.println("ProductDao.save()被执行");
// 获取配置文件,configuration,sessionFactory,session,简化了操作
this.getHibernateTemplate().save(product);
return true;
}
}
添加数据库操作的事务处理
applicationContext.xml
整合就完成了,做最后的测试,喝杯水压压惊,测试开始(我这里数据库是可视化操作)oh,如果出错了,一步一步拍错呗
常见问题及解决方案
错误代码:
there is no Action mapped for namespace[/] and action name [product_save] associated with context path[/ssh]
检查,struts.xml和applicationContext.xml中关于action的配置,name 和class是否正确
检查action类,save()方法是否写对,(save()是没有参数的,我就错在这)。
出现一些奇怪的错误可以试试clean下。(有什么问题可留言)
欢迎伙伴们一起快乐学习交流