最近学习spring框架,学习中总是磕磕绊绊的,出现这样或者那样的问题,于是就像写一篇笔记,将spring,springmvc,hibernate框架整合的过程,以及简单的实现记录下来,一来加深印象,二来一遍以后忘记好找资料(...)当然,初学者也可以借鉴一下。废话不多说,直接上干货!
平台:eclipse
1.首先看看我整个项目的结构
2.项目开始:开始配置配置文件,主要有web.xml, applicationContext.xml, springmvc这三个文件
web.xml文件如下(主要是配置spring IOC容器,springmvc的dispacherServlet, 编码的格式化:防止出现乱码,SessionFilter过滤器:防止session异常。这里主要注意的是路径问题,由于楼主的配置文件是放在src下的config包中的,所以配置的时候用classpath:包名/配置文件名.xml的形式;如果放在WebContext下,直接写文件名就行, WEB-INF下就是/WEB-INF/文件名.xml,以此类推。。)
springmvc_1
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
contextConfigLocation
classpath:config/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:config/springmvc.xml
1
dispatcherServlet
*.do
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
SessionFilter
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
SessionFilter
/*
springmvc.xml文件如下(主要是添加一个注解扫描,然后就是视图解析器。其中prefix表示的是跳转后的页面放置的前缀路径,楼主这里纠结了一会儿。。suffix表示的是后缀名,这个好理解。)
applicationContext.xml配置如下(1.注解扫描 2.加载db.properties文件:配合数据库连接池配置实用,这里的路径与web.xml中路径同理 3.配置数据源:与dp.properties中的各个属性对应 4.配置sessionFactory:配置hibernate中的一些方言,属性等,这里将这些写在spring配置文件中,去除了hibernate.cfg.xml文件,当然也可以将添加这个文件,只需在sessionFactory中添加映射路径即可 5.配置事务管理器 )
org.hibernate.dialect.MySQL5InnoDBDialect
true
true
update
false
com/shin/entities/User.hbm.xml
db.properties文件:
jdbc.user=root
jdbc.password=123456
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///test
楼主只是做了一个简单的用户添加应用,所以代码比较简单,主要是实现这个基本框架,还有很多东西需要去学习;
先来实体类 User.java 然后我用hibernate插件自动生成hbm.xml文件(当然也可以手动配置,挺简单的)
package com.shin.entities;
public class User {
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.shin.dao;
import com.shin.entities.User;
public interface UserDao {
public void addUser(User user);
}
package com.shin.dao.impl;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.shin.dao.UserDao;
import com.shin.entities.User;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Autowired
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void addUser(User user) {
sessionFactory.getCurrentSession().save(user);
}
}
再就是service层,分别是UserService.java接口和UserServiceImpl,java实现类
package com.shin.service;
import com.shin.entities.User;
public interface UserService {
public void addUser(User user);
}
package com.shin.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.shin.dao.UserDao;
import com.shin.entities.User;
import com.shin.service.UserService;
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void addUser(User user) {
// TODO Auto-generated method stub
userDao.addUser(user);
}
}
最后是controller: UserController.java(controller是核心,页面的处理跳转都要经过他,requestMapping中的值和.jsp中的action对应,由于web.xml中springmvc拦截的是.do结尾的动作,这里在处理方法上复制以此结尾)
package com.shin.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.shin.entities.User;
import com.shin.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value="sucess.do")
public String add(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+" "+password);
User user = new User();
user.setName(username);
user.setPassword(password);
userService.addUser(user);
return "sucess";
}
}
然后是简单的jsp页面,测试用的。
add.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
Insert title here
添加用户
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
Insert title here
添加成功!
测试:
自此,整个项目完成了,当中遇到了很多问题,有大有小,小问题特别多!!!比如配置路径时,classpath写成classpth,找了好久,一直以为诗路径问题,谁知道是简单的拼写错误。。。总之,学编程这玩意儿,得细心,更得有恒心,楼主已经踏上不归路,坚持走下去,加油!大家也一起加油!