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=true
hbm2ddl.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="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/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="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/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="http://www.springframework.org/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="org.apache.commons.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):

@Repository
public 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)

@Service
public 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类似。

本文链接:http://blog.csdn.net/tiandixuanwuliang/article/details/72598938

一步步搭建Spring+Spring MVC+Hibernate系统框架+登录与注册功能相关推荐

  1. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...

  2. 简单个人博客系统java web_JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册...

    JavaWeb个人博客项目:手把手教你实现博客后台系统之登录与注册 发布时间:2020-07-17 17:10阅读:( )字号: 大 中 小 后台系统的所有界面图以及之前的准备工作欢迎看我之前的博文& ...

  3. 【C语言】简易登录注册系统(登录、注册、改密、文件操作)

    概述: 本登录注册系统通过使用C语言中的结构体.函数.文件操作以及指针等,设计与实现了一个小型用户登录注册系统的登录.注册.修改密码等基本功能. 本系统全部功能基本运行良好.用户界面友好.操作简单.使 ...

  4. 基于struts2和hibernate的登录和注册功能——完整实例

    1.该项目使用MySQL数据库,数据库名为test,表名info,如图所示: 2.配置web.xml(Struts2使用) <?xml version="1.0" encod ...

  5. IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能

    文章目录 使用IDEA搭建JavaWeb项目 一.IDEA新建JavaWeb项目 1.新建java项目 2.修改项目配置 3.项目部署到Tomcat 二.使用JDBC和Servlet-JSP技术实现注 ...

  6. IDEA 搭建 SpringBoot + Maven + Oracle + Hibernate 项目框架

    1.Spring Initializer 创建空项目 2.安装Oracle 3.查询Oracle版本 select * from product_component_version; 4.安装Orac ...

  7. Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架

    目录 1.什么是MVP? 2.什么是Retrofit? 3.RxJava 4.实践 之前公司的项目用到了MVP+Retrofit+RxJava的框架进行网络请求,所以今天特此写一篇文章以做总结.相信很 ...

  8. 如何搭建商超积分商城系统框架

    大型商超一般是指是多种零售店铺.服务设施集中在一个建筑物内或区域内,向顾客提供综合性服务的商业集合体.这种商业集合体内通常包含数十个甚至数百个服务场所,业态涵盖大型综合超市.专卖店.饮食店.杂品店及娱 ...

  9. 一步步搭建Retrofit+RxJava+MVP网络请求框架(一)

    首先,展示一下封装好之后的项目的层级结构.  1.先创建一个RetrofitApiService.java package com.xdw.retrofitrxmvpdemo.http;import ...

最新文章

  1. Java Optional类源码解析和用法
  2. JavaScript创建对象的6种方式
  3. java求数列的最大子段和_天下无双的公考必考题 数量关系: 最值问题②(构造数列)...
  4. springer grammar revise tool
  5. signed distance field 算法
  6. python归一化处理_详解python实现数据归一化处理的方式:(0,1)标准化
  7. JavaScript 经典代码大全2
  8. 默写测试晋级流程 1126
  9. 在地铁和公交车上给职业乞丐施舍合适吗?
  10. 如何将 byte[] 转换为 IntPtr?
  11. MySQL 联合索引测试2
  12. 找回Google Reader丢失的笔记(notes)
  13. ESFramework Demo -- P2P通信Demo(附源码)
  14. 现代语音信号处理之倒谱分析与同态滤波
  15. 苗族php动态网页设计作业
  16. 开源单点登录系统CAS
  17. 你的微信聊天记录!终于能云端备份了
  18. 2003年GCT考试真题
  19. 转:程序员应该怎样去学习和掌握计算机英语呢?
  20. foobar的cue生成插件

热门文章

  1. 程序员五六年能存100万,你说你焦虑个啥!!!
  2. excel换行按什么键_表格技巧—Excel如何取消自动换行
  3. 讨论projects、programs和portfolio之间的关系以及对企业成功的贡献,以及与operations以及OPM之间的关系
  4. 微信H5中禁止分享好友及分享到朋友圈的方法
  5. Discuz3.X可以放广告的地方积累
  6. PS基础之给嘴唇画口红
  7. #pragma once是什么意思
  8. MySQL中你可能忽略的COLLATION实例详解
  9. 苹果电脑显示内存不足怎么办
  10. pdf提取矢量图,插入visio 或者 word中,保持矢量图特性;编辑pdf图片