一步步搭建Spring+Spring MVC+Hibernate系统框架+登录与注册功能 港控/mmm° 2022-06-15 02:36 147阅读 0赞 # **Spring+Spring MVC + Hibernate** # # **1新建WEB项目** # ## **1.1先设置myeclipse编码格式,JSP、workspace** ## ## **1.2新建web工程** ## ![Center][]![Image 1][] ## **1.3避免MyEclipse验证js文件,先在web项目上单击右键,再选择“Myecplise------->open in explorer”,在下图.project文件中删除如右图代码** ## **![Center 1][]** # **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(可选)这几个选项 ![Center 2][]![Image 1][] 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.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 说明:此时的工程结构如图: ![Center 3][]![Image 1][] # **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 [Center]: https://img-blog.csdn.net/20171109001457185?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGlhbmRpeHVhbnd1bGlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center [Image 1]: [Center 1]: /images/20220615/a47870ebf59c4e488335ce3fb09428d5.png [Center 2]: https://img-blog.csdn.net/20171109001756159?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGlhbmRpeHVhbnd1bGlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center [Center 3]: https://img-blog.csdn.net/20171109001838573?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGlhbmRpeHVhbnd1bGlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
还没有评论,来说两句吧...