您的位置:首页 > 编程语言 > Java开发

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

2017-05-21 16:09 806 查看

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&
4000
lt;/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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://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;
@NotNull
private String password;
@NotNull
private 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 {
@Override
public 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;
}
@Override
public Integer save(User user) {
return (Integer) getHibernateTemplate().save(user);
}
@Override
public void update(User user) {
getHibernateTemplate().update(user);
}
@Override
public boolean validatePassword(Integer id, String password) {
return false;
}
@Override
public 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 {
@Autowired
private UserDao userDao;
@Override
@Transactional(readOnly=true)
public User login(String username, String password) {
return userDao.login(username, password);
}
@Override
public Integer save(User user) {
return userDao.save(user);
}
}

5.9在Login的控制器层中,进行登录。

@Autowired
private 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐