Spring+Spring MVC + Hibernate
1新建WEB项目
1.1先设置myeclipse编码格式,JSP、workspace
1.2新建web工程
1.3避免MyEclipse验证js文件,先在web项目上单击右键,再选择“Myecplise------->open in explorer”,在下图.project文件中删除如右图代码
2安装Hibernate和Spring
2.1新建DB(在控制台这一栏右键new 数据库DB),请加上如下图代码,防止乱码:
jdbc:mysql://localhost:3306/javassh?useUnicode=true&characterEncoding=UTF-8
2.2添加hibernate
2.2.1注意取消生成factory选项
2.2.2增加hibernate的属性
format_sql=truehbm2ddl.auto=update
2.3添加spring
2.3.1注意勾选JDBC、Core、Web、Testing(可选)这几个选项
2.3.2把工程里面的applicationContext.xml改名为spring.xml
2.3.2在src目录下拷入log4j:log4j.properties,配置为debug
3配置Spring MVC以及Spring
3.1配置web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee" xmlns:web="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><display-name>17SSH_SpringHibernate</display-name><!-- 配置spring容器 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring.xml</param-value></context-param><!-- 配置监听器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 请求都交给DispatcherServlet处理 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 增加中文乱码过滤器 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 清除jsp空格 --><jsp-config><jsp-property-group><url-pattern>*.jsp</url-pattern><trim-directive-whitespaces>true</trim-directive-whitespaces></jsp-property-group></jsp-config></web-app>
3.2配置Spring MVC
3.2.1在src目录下新建spring-mvc.xml文件,可以复制spring.xml完成
3.2.2spring-mvc.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.0.xsd/schema/context /schema/context/spring-context-3.0.xsd/schema/mvc /schema/mvc/spring-mvc-3.0.xsd"> <!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --><context:component-scan base-package="com.welljoint" /><!-- 激活基于注解的配置 @RequestMapping, @ExceptionHandler,数据绑定 ,@NumberFormat , @DateTimeFormat ,@Controller ,@Valid ,@RequestBody ,@ResponseBody等 --> <mvc:annotation-driven /> <!-- 视图层配置 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--配置JSTL表达式--> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/"/> <!-- 后缀 --><property name="suffix" value=".jsp"/> </bean> <!-- 配置静态资源 --><mvc:resources location="/res/" mapping="/res/**"/> </beans>
3.2.3 说明:此时的工程结构如图:
4下面开始写控制层
4.1在src下新建controller类,类名字为LoginController,添加get和post方法。
@RequestMapping(method=RequestMethod.GET)public String get(){return "login";}@RequestMapping(method=RequestMethod.POST)public String post(){return "login_success";}
4.2写jsp页面,名字login.jsp
4.2.1拷入bootstrap和jquery到res目录下
4.2.2在jsp页面中导入bootstrap和jquery,并编写jsp页面
4.2.3增加验证码
4.3在src下新建controller的bean(注意路径),bean名字为Login:添加如下属性,并提供相对应的get和set方法。
private String username;private String password;private String vcode;
4.4增加SpringMVC验证功能
4.3.1 Hibernate-valiation相应的jar包
4.3.2在login这个bean上添加如下注解(部分):
@NotNull@Length(min=3, max=16)private String username;@NotNullprivate String password;@NotNullprivate String vcode;
4.3.3在控制器(LoginController)上添加如下代码:
@RequestMapping(method=RequestMethod.POST)public String post(@Valid@ModelAttribute("login")Login login,BindingResult errors){if(errors.hasErrors()){return "login";}return "login_success";}
4.3.4在login.jsp页面上添加显示错误消息的代码:
<!--引入form标签--><%@ taglib prefix="form" uri="/tags/form" %>
<!--显示错误消息的代码--><form:errors path="login.username" element="span" cssClass="help-block"/>
4.3.5通过session为中介,让验证码起作用:
//注意,先要通过post的参数传一个session进来String sessionVcode = (String) session.getAttribute(ValidateCode.VCODE_SESSION_KEY);if(sessionVcode == null || !sessionVcode.toLowerCase().equals(login.getVcode().toLowerCase())){errors.addError(new FieldError("login", "vcode", "验证码错误"));}
5 Spring合hibernate
5.1添加context、tx命名空间,见3.2.2节。
5.2把hibernate.cfg.xml配置,对应地写到spring.xml文件中
<context:component-scan base-package="wllfengshu.forum"/><bean id="dataSource" class="mons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/forum"/><property name="username" value="root"/></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="hibernateProperties"><props><prop key="dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="format_sql">true</prop><prop key="hbm2ddl.auto">update</prop></props></property><property name="mappingLocations" value="classpath:/wllfengshu/forum/po"/></bean><bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean><tx:annotation-driven transaction-manager="transactionManager"/></beans>
5.3写持久化类User的bean(包名:wllfengshu.forum.po)
private Integer id;private String username;private String password;private String name;private String nickname;/*给出对应地get和set方法*/
5.4写User的映射文件User.hbm.xml(包名:wllfengshu.forum.po)
<hibernate-mapping package="wllfengshu.forum.po"><class name="User" table="user"><id name="id"><generator class="native"/></id><property name="username" length="32" not-null="true" unique="true"/><property name="password" length="64" not-null="true"/><property name="name" length="32" not-null="true"/><property name="nickname" length="32" not-null="true"/></class></hibernate-mapping>
5.5写UserDao(包名:wllfengshu.forum.dao)
public interface UserDao {public User login(String username, String password);public Integer save(User user);public void update(User user);public boolean validatePassword(Integer id, String password);public void updatePassword(Integer id, String password);}
5.6 Spring操作hibernateAPi。5.6.1在spring-mvc中加上default-autowire="byName"属性
5.6.2写UserDao的实现类UserDaoImpl
(包名:wllfengshu.forum.dao.impl):
@Repositorypublic class UserDaoImpl extends HibernateDaoSupport implements UserDao {@Overridepublic User login(String username, String password) {List<User> users = getHibernateTemplate().find("from User where username=? and password=?", username, password);return users.size() > 0 ? users.get(0) : null;}@Overridepublic Integer save(User user) {return (Integer) getHibernateTemplate().save(user);}@Overridepublic void update(User user) {getHibernateTemplate().update(user);}@Overridepublic boolean validatePassword(Integer id, String password) {return false;}@Overridepublic void updatePassword(Integer id, String password) {}}
5.7写service层,UserService(包名:wllfengshu.forum.service)
public interface UserService {public User login(String username, String password);public Integer save(User user);}
5.8写UserService的实现(包名:wllfengshu.forum.service.impl)
@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Override@Transactional(readOnly=true)public User login(String username, String password) {return userDao.login(username, password);}@Overridepublic Integer save(User user) {return userDao.save(user);}}
5.9在Login的控制器层中,进行登录。
@Autowiredprivate UserService userService;User user = userService.login(login.getUsername(), login.getPassword());if(user == null){errors.addError(new ObjectError("login", "用户名或者密码错误"));return "login";}else{//这里的SessionUser是为了把用户登录信息放到session中SessionUser sessionUser = SessionUser.fromUser(user);session.setAttribute(SessionUser.class.getSimpleName(), sessionUser);}return "login_success";
5.10写Register的bean和register的控制器,和login类似。
本文链接:/tiandixuanwuliang/article/details/72598938