1.导入开发需要的jar包
2.将struts.xml、spring的xml文件放在src下,配置基本环境
*web.xml中配置spring的监听器和文件位置
web.xml中配置struts2
在web.xml中插入
openSessionInView
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
openSessionInView
/*
这段代码放在struts配置之后
3.spring与struts2的整合
*在struts.xml中添加
*创建action
其中BaseAction作为所有Action的父类,UserAction继承BaseAction,实现ModelDriven接口来接收界面传过来的值,且必须重写的方法:
BaseActio类中,在此类中实现request,session,application,response的获取,系统中所有的Action类都必须要继承BaseAction类
public class BaseAction extends ActionSupport{
public HttpServletRequest getRequest(){
return ServletActionContext.getRequest();
}
public HttpServletResponse getResponse(){
return ServletActionContext.getResponse();
}
public HttpSession getSession(){
return getRequest().getSession();
}
}
*在struts.xml中添加action标签
*在app-context.xml中添加注册action组件
注意:action标签中class的名称应该与bean标签的id名称一致,bean标签中class写action的具体路径,我在这里出错,不仔细,UserAction写成USerAction,导致运行时报错找不到类
*创建一个index.xml登陆界面
form表单中action中名称应该与struts.中name名称一致
*整合后获取spring帮忙创建的service类对象的方法,需先在注册action组件添加注入标签,上面的图中有
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
UserAction的完整代码
public class UserAction extends BaseAction implements ModelDriven{
private UserService userService;
private User user = new User();
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public String login(){
return null;
}
//界面传值进来的方法
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
}
至此整合完成
4.spring与hibernate的整合(此处用的方法是不需要hibernate.xml配置文件的方法)
在app-context.xml中配置连接数据库的相关信息:
* 连接数据库基本参数:
* Hibernate常用属性:
* 连接池:
* 映射:
代码如下:
classpath*:cn/edu/abtc/model/User.hbm.xml
true
utf-8
org.hibernate.dialect.MySQL5InnoDBDialect
true
update
在model包下创建User类用于存放数据库对应的数据
public class User {
private String id;
private String name;
private String username;
private String password;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
映射文件:
至此spring与hibernate结合完成
5.修改UserAction中login的方法完成登录操作
6.创建UserService接口
public interface UserService {
public boolean checkLogin(User user);
}
创建UserService的实现类UserServiceImpl
public class UserServiceImpl implements UserService{
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
@Transactional
public boolean checkLogin(User user) {
return userDao.checkLogin(user);
}
}
在app-context.xml中配置创建UserServiceImpl对象的bean
6.创建UserDao的接口
public interface UserDao {
boolean checkLogin(User user);
}
创建UserDao的实现类UserDaoImpl
public class UserDaoImpl implements UserDao{
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public boolean checkLogin(User user) {
String hql = "from User u where u.username = '" + user.getUsername()
+ "' and u.password = '" + user.getPassword() + "'";
List l = this.getSessionFactory().getCurrentSession().createQuery(hql).list();
if (l.size() > 0) {
return true;
}
return false;
}
}
checkLogin方法中,需注意hql语句,这里User是指的类,是区分大小写的,后面的小u测试了一下,有无都可以运行
在app-context.xml中配置创建UserDaoImpl对象的bean
app-context.xml中的全部代码;
classpath*:cn/edu/abtc/model/User.hbm.xml
true
utf-8
org.hibernate.dialect.MySQL5InnoDBDialect
true
update
登陆操作完成
7.查询所有人信息的功能:
UserAction中添加userList()方法
//用户列表显示
public String userList() {
List list = userService.userList();
getRequest().setAttribute("user", list);//传值到界面
return this.SUCCESS;
}
UserService与UserServiceImpl代码
@Override
public List userList() {
return userDao.userList();
}
UserDaoImpl中的代码,添加userList()方法:
public List userList() {
String hql = "from User ";
@SuppressWarnings("unchecked")
List list = this.getSessionFactory().getCurrentSession().createQuery(hql).list();
return list;
}
struts.xml中的代码;
/user/{1}.jsp
userList.jsp中显示查询信息的代码:
此时运行,会报如下错误:
这个错误的原因是因为事物层在返回list后就会自动关闭,二后面action又去调用list,显示已经不行,
在web.xml中添加如下代码可随时调用;
SpringOpenSessionInViewFilter
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
SpringOpenSessionInViewFilter
/*
运行成功
8.用户添加功能的实现
和前面实现大致都相同,就看看dao的方法和遇到的一些错误:
@Override
public void userAdd(User user) {
// getHibernateTemplate().save(user);
System.out.print(user+"dddd");
this.getSessionFactory().getCurrentSession().save(user);
}
a.插入的save方法中,当主键设置了自增且不是int类型时,会报错,因为自增只允许int类型
b.存入数据,页面跳转成功,查询数据库时,数据没有存入成功,
解决:在service的实现类中添加注释 @Transactional
存入成功
9.解决数据库乱码问题
我的问题是,存入数据库和显示数据库数据时不能显示中文
a.保证jsp或html时utf-8
b.保证数据库和表的编码格式都是utf-8
修改后即可解决问题;
我还有的问题是不能正常安装mysql5.7,每次在start service时就会报错
重装很多次都没有解决,原因是:最先前的mysql没有卸载干净
参考方法可https://blog.csdn.net/cxy_Summer/article/details/70142322
卸载完后重装则不会出现这个问题