SpringMVC_Spring_Hibernate模版

来源:互联网 发布:淘宝视频课程下载 编辑:程序博客网 时间:2024/05/18 01:24

开发工具:eclipse MSR.2;

数据库:mysql5;

注:1)web.xml:配置错误页面

2)hibernate.cfg.xml:数据库连接配置,配置model类完整包名

3)applicationContext.xml:配置基础包,配置数据库连接文件

4)Contants.java:添加自己的发件人邮箱和密码

5)BaseController.java:注意发送的邮件的内容的网址连接

6)MyConfig.java:注意配置 basePackages = "com.ssh.controller"

7)MyWebApplicationInitializer.java:注意配置classpath:applicationContext.xml

jar包:

项目模版完整截图:


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"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>SpringMVC_Spring_Hibernate</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><!-- 统一错误页面去处 --><error-page><error-code>404</error-code><location>/error.jsp</location></error-page><error-page><error-code>500</error-code><location>/error.jsp</location></error-page></web-app>

applicationContext.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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"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.xsd     http://www.springframework.org/schema/aop      http://www.springframework.org/schema/aop/spring-aop.xsd     http://www.springframework.org/schema/context       http://www.springframework.org/schema/context/spring-context.xsd     http://www.springframework.org/schema/mvc     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd     http://www.springframework.org/schema/tx/spring-tx.xsd">           <!-- 开启自动扫描AOP注释 -->    <aop:aspectj-autoproxy/>        <!-- 开启自动对包扫描 --><context:component-scan base-package="com.ssh"/><!--  配置sessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="configLocations"><value>classpath:hibernate.cfg.xml</value></property></bean> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">   <property name="sessionFactory">       <ref bean="sessionFactory"/>   </property></bean><mvc:annotation-driven />  <mvc:default-servlet-handler/></beans>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?><!--  ~ Hibernate, Relational Persistence for Idiomatic Java  ~  ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.  ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.  --><!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory>    <!-- Database connection settings -->    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>    <property name="connection.username">root</property>    <property name="connection.password">123456</property>    <!-- JDBC connection pool (use the built-in)     <property name="connection.pool_size">3</property>-->    <property name="hibernate.c3p0.max_size">20</property><property name="hibernate.c3p0.min_size">5</property><property name="hibernate.c3p0.timeout">120</property><property name="hibernate.c3p0.max_statements">100</property><property name="hibernate.c3p0.idle_test_period">120</property><property name="hibernate.c3p0.acquire_increment">2</property><property name="hibernate.c3p0.validate">false</property><property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>    <!-- SQL dialect -->    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    <!-- Disable the second-level cache  -->    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>    <!-- Echo all executed SQL to stdout -->    <property name="show_sql">true</property>    <!-- Drop and re-create the database schema on startup -->    <property name="hbm2ddl.auto">update</property>        <property name="hibernate.connection.autocommit">true</property>        <property name="dynamic-update">true</property>        <mapping class="com.ssh.model.Users" />  </session-factory></hibernate-configuration>
log4j.properties(可删除)
### setting#log4j.rootLogger = debug,stdout,D,Elog4j.rootLogger = OFF,stdout,D,E### print out information to Consolelog4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n###  DEBUG to = E://logs/error.log ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = C://logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### ERROR to = E://logs/error.log ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File =C://logs/error.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8" isErrorPage="true"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="images/favicon.ico" type="image/x-icon" rel="shortcut icon" /><title>ERROR</title><style type="text/css">img {display:block;margin:auto;vertical-align:middle;}a {display:block;margin:auto;text-align:center;vertical-align:middle;margin-top:-90px;}</style></head><body><div style="margin-top:100px; width: 100%; height: 100%;"><img src="images/error.png"/><a href="index.jsp">返回登陆页面吧,ZZ!</a></div></body></html>
forgetPwd.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="images/favicon.ico" type="image/x-icon" rel="shortcut icon" /><title>忘记密码</title><script src="js/jquery-1.11.3.min.js"></script><script src="js/bootstrap.min.js"></script><script src="js/jquery-ui.min.js"></script><script src="js/jquery.validate.min.js"></script><script src="js/messages_zh.js"></script><script type="text/javascript" src="js/login.js"></script><link rel="stylesheet" href="css/jquery-ui.min.css"> <link href="css/bootstrap.min.css" rel="stylesheet"><link href="css/styles.css" rel="stylesheet"><style>.error{font-family: '微软雅黑';font-size: 13px;font-weight: normal;color: red;}</style></head><body><div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-4 col-md-offset-4"><div class="login-panel panel panel-default"><div class="panel-heading">邮箱验证</div><div class="panel-body"><form action="forgetUpwd" method="post" role="form" id="loginForm"><div class="form-group">注册邮箱:<input class="form-control" type="email" name="uemail" placeholder="请输入注册邮箱:"></div><div class="modal-footer"><a href="index.jsp"><button class="btn btn-primary" type="button">取消</button></a><button class="btn btn-primary" type="submit">发送</button></div></form></div></div></div></body></html>
head.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8" errorPage="error.jsp"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="stylesheet" type="text/css" href="jedate/skin/jedate.css" /><link rel="stylesheet" type="text/css" href="css/edit/default.css" /><link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" /><link rel="stylesheet" type="text/css" href="css/styles.css" /><link href="images/favicon.ico" type="image/x-icon" rel="shortcut icon" /><script src="js/jquery-1.11.3.min.js"></script><script src="jedate/jedate.js"></script><script src="js/kindeditor-min.js"></script><script src="js/zh_CN.js"></script><script src="js/bootstrap.min.js"></script><script src="js/index_date.js"></script><script src="js/jquery-ui.min.js"></script><script src="js/jquery.validate.min.js"></script><script src="js/messages_zh.js"></script><style type="text/css">.footer {position: absolute;height: 30px;width: 100%; bottom: 0; text-align: center;line-height: 30px;border-top: 1px solid #c0c0c0;}.error{font-family: '微软雅黑';font-size: 13px;font-weight: normal;color: red;}</style><title>head</title></head><body onload="getNowFormatDate()"><div class="navbar navbar-inverse navbar-fixed-top" role="navigation"><img src="images/head.jpg" style="height: 80px;"/><h2 style="position: absolute; top: 10px; left: 100px;"><!-- SpringMVC_Spring_Hibernate模版 --></h2><ul class="user-menu"><li class="dropdown pull-right"><a href="" class="dropdown-toggle" data-toggle="dropdown" style="color: black;"><span class="glyphicon glyphicon-user"></span> 欢迎您, ${user.uname} <span class="caret"></span></a><ul class="dropdown-menu" role="menu"><!-- 模态框形式实现 --><li><a href="#" data-toggle="modal" data-target="#" data-placement="bottom"><span class="glyphicon glyphicon-user"></span> 下拉菜单1</a></li><li><a href="#" data-toggle="modal" data-target="#" data-placement="bottom"><span class="glyphicon glyphicon-pencil"></span> 下拉菜单2</a></li><li><a href="index.jsp"><span class="glyphicon glyphicon-log-out"></span> 退出</a></li></ul></li></ul><div id="time" style="position: fixed; top: 55px; right: 15px;"></div></div><!-- 左侧菜单栏 --><div id="sidebar-collapse" class="col-sm-3 col-lg-2 sidebar"><ul class="nav menu"><li class="active" id="home"><a href="home?uid=${user.uid}"><span class="glyphicon glyphicon-home"></span>首页</a></li><li class="parent"><a href="#"><span class="glyphicon glyphicon-hdd"></span>菜单1<span data-toggle="collapse" href="#sub-item-checkMeeting" class="glyphicon glyphicon-list pull-right"></span></a><ul class="children collapse" id="sub-item-checkMeeting"><li><a href="toAddBookMeeting?uid=${user.uid}"><span class="glyphicon glyphicon-share-alt"></span> 菜单11</a></li><li><a href="#"><span class="glyphicon glyphicon-share-alt"></span> 菜单12<span class="badge">菜单12</span></a></li><li><a href="#"><span class="glyphicon glyphicon-share-alt"></span> 菜单13</a></li></ul></li><li class="parent"><a href="#"><span class="glyphicon glyphicon-info-sign"></span>菜单2<span class="badge">${apprSize}</span><span data-toggle="collapse" href="#sub-item-checkApproval" class="glyphicon glyphicon-list pull-right"></span></a><ul class="children collapse" id="sub-item-checkApproval"><li><a class="" href="checkApprovalHistory?uid=${user.uid}"><span class="glyphicon glyphicon-share-alt"></span> 审批记录</a></li></ul></li><li class="parent "><a href="#"><span class="glyphicon glyphicon-tasks"></span>菜单3<span data-toggle="collapse" href="#sub-item-more" class="glyphicon glyphicon-list pull-right"></span></a><ul class="children collapse" id="sub-item-more"><li><a href="#"><span class="glyphicon glyphicon-share-alt"></span> 发送邮件</a></li></ul></li></ul></div><!--/.sidebar--><div class="footer"><p>Copyright © 2017-2018 SpringMVC_Spring_Hibernate模版(CCIT) All Rights Reserved. </p></div></body></html>
home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>home</title></head><body><%@ include file="head.jsp" %><div class="col-sm-9 col-sm-offset-3 col-lg-10 col-lg-offset-2 main" ><div class="form-group"><h1>home</h1></div><!--/.main--></div></body></html>
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" errorPage="error.jsp"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link href="images/favicon.ico" type="image/x-icon" rel="shortcut icon" /><title>login</title><script src="js/jquery-1.11.3.min.js"></script><script src="js/bootstrap.min.js"></script><script src="js/jquery-ui.min.js"></script><script src="js/jquery.validate.min.js"></script><script src="js/messages_zh.js"></script><script type="text/javascript" src="js/login.js"></script><link rel="stylesheet" href="css/jquery-ui.min.css"> <link href="css/bootstrap.min.css" rel="stylesheet"><link href="css/styles.css" rel="stylesheet"><style>.error{font-family: '微软雅黑';font-size: 13px;font-weight: normal;color: red;}</style></head><body><div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-2 col-md-4 col-md-offset-4"><div class="login-panel panel panel-default"><div class="panel-heading">欢迎登陆系统</div><div class="panel-body"><form action="login" method="post" role="form" id="loginForm"><div class="form-group">邮箱:<input type="email" class="form-control" id="loginUemail" name="uemail" placeholder="邮箱:"></div><div class="form-group">密码:<input type="password" class="form-control" id="loginUpwd" name="upwd" placeholder="密码:"></div><div class="checkbox"><label><input name="remember" value="remember" type="checkbox">记住密码</label></div><div class="form-group"><button type="submit" id="login" class="btn btn-primary">登陆</button><!-- 按钮触发用户注册模态框 --><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#register" data-placement="bottom">注册</button><a href="forgetPwd.jsp" style="float: right;">忘记密码?</a></div></form></div></div></div><!-- 用户注册模态框(Modal) --><div class="modal fade" id="register" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h4 class="modal-title" id="myModalLabel">用户注册</h4></div><div class="modal-body"><form action="register" method="post" class="form-horizontal cmxform" role="form" id="registerForm" > <div class="form-group"><label for="uemail" class="col-sm-2 control-label">Email:</label><div class="col-sm-10"> <input type="email" class="form-control" id="uemail" name="uemail" placeholder="请输入有效邮箱"> </div></div> <div class="form-group"><label for="uname" class="col-sm-2 control-label">用户名</label><div class="col-sm-10"> <input type="text" class="form-control" name="uname" placeholder="请输入用户名"> </div></div> <div class="form-group"><label for="upwd" class="col-sm-2 control-label">密码</label><div class="col-sm-10"> <input type="password" class="form-control" id="upwd" name="upwd" placeholder="请输入密码"> </div></div> <div class="form-group"><label for="confirmPwd" class="col-sm-2 control-label">确认密码</label><div class="col-sm-10"> <input type="password" class="form-control" name="confirmPwd" placeholder="请再次输入密码"> </div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">取消</button><button type="submit" class="btn btn-default">注册</button></div></form></div></div><!-- /.modal-content --></div><!-- /.modal --></div></body></html>
Log.java(可删除)

package com.ssh.anno;import java.lang.annotation.*;@Target({ ElementType.PARAMETER, ElementType.METHOD })@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Log {/** 要执行的操作类型比如:add操作 **/public String operationType() default "";/** 要执行的具体操作比如:添加用户 **/public String add() default "";}
MyConfig.java

package com.ssh.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Profile;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.view.InternalResourceViewResolver;import org.springframework.web.servlet.view.JstlView;/** * 配置类 视图解析器 * */@Configuration@Profile(value = { "default" })@EnableWebMvc@ComponentScan(basePackages = "com.ssh.controller")public class MyConfig extends WebMvcConfigurerAdapter {@Beanpublic ViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setViewClass(JstlView.class);//viewResolver.setPrefix("/");//viewResolver.setSuffix(".jsp");viewResolver.setOrder(1);return viewResolver;}}
MyWebApplicationInitializer.java

package com.ssh.config;import javax.servlet.FilterRegistration;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRegistration;import org.springframework.web.WebApplicationInitializer;import org.springframework.web.context.ContextLoaderListener;import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;import org.springframework.web.filter.CharacterEncodingFilter;import org.springframework.web.servlet.DispatcherServlet;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/** * 初始化类 该类添加监听用于启动spring容器,注册配置类以及添加映射器 *  */public class MyWebApplicationInitializer extends WebMvcConfigurerAdapter implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext context) throws ServletException {// 添加Listener 完成Spring容器建立context.setInitParameter("contextConfigLocation", "classpath:applicationContext.xml");context.addListener(new ContextLoaderListener());AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();webContext.register(MyConfig.class);CharacterEncodingFilter filter = new CharacterEncodingFilter("UTF-8");FilterRegistration.Dynamic register2 = context.addFilter("encodingFilter", filter);register2.addMappingForUrlPatterns(null, false, "/*");ServletRegistration.Dynamic dispatcher = context.addServlet("dispatcher", new DispatcherServlet(webContext));dispatcher.addMapping("/");}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 注册静态文件目录,防止静态文件被Spring MVC拦截registry.addResourceHandler("/js/**").addResourceLocations("/js/");registry.addResourceHandler("/css/**").addResourceLocations("/css/");}}
ChineseCodeFilter.java

package com.ssh.util;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;@WebFilter(filterName = "ChineseCodeFilter", urlPatterns = "/*")public class ChineseCodeFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {request.setCharacterEncoding("UTF-8"); //response.setContentType("text/html;charsset=utf-8");chain.doFilter(request, response);}@Overridepublic void destroy() {}}
Contants.java

package com.ssh.util;/** * 常量 *  * @author xingyang * */public class Contants {/** * SMTP Host 简单邮件传送协议服务器 */public static final String HOST = "smtp.163.com";/** * 邮局协议,用于电子邮件的接收 */public static final String PROTOCOL = "smtp";/** * 邮箱服务端口号 */public static final int PORT = 25;/** * 发件人的email */public static final String FROM = "";/** * 发件人显示名称 */public static final String MAIL_USER = "用户注册帐号激活";/** * 发件人密码 */public static final String PWD = "";}
SessionFactoryHelper.java
package com.ssh.util;import org.hibernate.SessionFactory;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;/** *  * 尝试获取SessionFactory *  * @author xingyang * */public class SessionFactoryHelper {private static SessionFactory sessionFactory;public static SessionFactory getSessionFactory() {// 建立一个标准的服务 和注册, 用户可以定制final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();try {sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();} catch (Exception e) {StandardServiceRegistryBuilder.destroy(registry);}return sessionFactory;}// 关闭连接public static void closeSessionFactory() {if (sessionFactory != null) {sessionFactory.close();}}}
SessionManager.java

package com.ssh.util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;/** * 线程安全箱 *  * @author xingyang */public class SessionManager {public static SessionFactory sessionFactory;@Autowiredpublic void setSessionFactory(SessionFactory sessionFactory) {SessionManager.sessionFactory = sessionFactory;}private static ThreadLocal<Session> sessionHolder = new ThreadLocal<Session>() {protected Session initialValue() {Session session = sessionFactory.openSession();sessionHolder.set(session);return session;}};public Session getSession() {return sessionHolder.get();}/** * close connection and put it back to connection pool */public void closeSession() {Session session = sessionHolder.get();if (session != null) {session.flush();session.close();sessionHolder.remove();}}}

FromEmail.java

package com.ssh.mail;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/** * 认证器 *  * @author xingyang * */public class FromEmail extends Authenticator {private String fromEmail;private String password;public FromEmail(String fromEmail, String password) {this.fromEmail = fromEmail;this.password = password;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(fromEmail, password);}}
MD5Util.java

package com.ssh.mail;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * 激活码验证和处理 *  * @author xingyang *  */public class MD5Util {/** * 将源字符串使用MD5加密为字节数组 *  * @param source * @return */public static byte[] encode2bytes(String source) {byte[] result = null;try {MessageDigest md = MessageDigest.getInstance("MD5");md.reset();md.update(source.getBytes("UTF-8"));result = md.digest();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}/** * 将源字符串使用MD5加密为32位16进制数 *  * @param source * @return */public static String encode2hex(String source) {byte[] data = encode2bytes(source);StringBuffer hexString = new StringBuffer();for (int i = 0; i < data.length; i++) {String hex = Integer.toHexString(0xff & data[i]);if (hex.length() == 1) {hexString.append('0');}hexString.append(hex);}return hexString.toString();}/** * 验证字符串是否匹配 *  * @param unknown *            待验证的字符串 * @param okHex *            使用MD5加密过的16进制字符串 * @return 匹配返回true,不匹配返回false */public static boolean validate(String unknown, String okHex) {return okHex.equals(encode2hex(unknown));}}
SendEmail.java
package com.ssh.mail;import java.util.Date;import java.util.Properties;import javax.mail.Address;import javax.mail.Authenticator;import javax.mail.Message.RecipientType;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import com.ssh.util.Contants;/** * 发送邮件 *  * @author xingyang * */public class SendEmail {public static void send(String toEmail, String content) {Session session = SendEmail.getSession(); // 用本类方法中获取sessiontry {Address from = new InternetAddress(Contants.FROM);InternetAddress[] to = { new InternetAddress(toEmail) };MimeMessage msg = new MimeMessage(session);msg.setFrom(from);msg.setSubject("账号激活邮件");msg.setSentDate(new Date());msg.setContent(content, "text/html;charset=utf-8");msg.setRecipients(RecipientType.TO, to);Transport.send(msg);} catch (MessagingException e) {e.printStackTrace();}}/** *  获取Session *  * @return */private static Session getSession() {Properties props = new Properties();props.put("mail.smtp.host", Contants.HOST);// 设置服务器地址props.put("mail.store.protocol", Contants.PROTOCOL);// 设置协议props.put("mail.smtp.port", Contants.PORT);// 设置端口props.setProperty("mail.smtp.auth", "true");props.setProperty("mail.user", Contants.MAIL_USER);Authenticator authenticator = new FromEmail(Contants.FROM, Contants.PWD);Session session = Session.getDefaultInstance(props, authenticator);session.setDebug(true);return session;}}
ServiceException.java
package com.ssh.mail;/** * 邮箱服务异常处理 *  * @author xingyang * */public class ServiceException extends Exception {private static final long serialVersionUID = -1708015121235851228L;public ServiceException(String message) {super(message);}}


Users.java

package com.ssh.model;import java.io.Serializable;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;/** * 用户类 *  * @author xingyang *  */@Entity@Table(name = "USERS")public class Users implements Serializable {private static final long serialVersionUID = 1L;private Integer uid;private String uemail; // 邮箱private String uname; // 用户名private String upwd; // 密码private Integer isLogin; // 是否登录public static long getSerialversionuid() {return serialVersionUID;}public Users() {super();}// loginpublic Users(String uemail, String upwd) {super();this.uemail = uemail;this.upwd = upwd;}// registerpublic Users(Integer uid, String uemail, String uname, String upwd, Integer isLogin) {super();this.uid = uid;this.uemail = uemail;this.uname = uname;this.upwd = upwd;this.isLogin = isLogin;}@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "UID")public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid = uid;}@Column(name = "UEMAIL")public String getUemail() {return uemail;}public void setUemail(String uemail) {this.uemail = uemail;}@Column(name = "UNAME")public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}@Column(name = "UPWD")public String getUpwd() {return upwd;}public void setUpwd(String upwd) {this.upwd = upwd;}@Column(name = "is_login")public Integer getIsLogin() {return isLogin;}public void setIsLogin(Integer isLogin) {this.isLogin = isLogin;}@Overridepublic String toString() {return "Users [uid=" + uid + ", uemail=" + uemail + ", uname=" + uname + ", upwd=" + upwd + ", isLogin="+ isLogin + "]";}}
UserDao.java
package com.ssh.dao;import com.ssh.model.Users;/** * 用户信息Dao层 *  * @author xingyang *  */public interface UserDao {/** * 用户登陆 *  * @param user * @return boolean */public boolean login(Users user);/** * 用户注册 *  * @param user * @return boolean */public boolean register(Users user);/** * 删除用户 *  * @param uid * @return boolean */public boolean delUser(Integer uid);/** * 修改用户信息 *  * @param newUser * @return boolean */public boolean updateUsers(Users newUser);/** * 根据用户id查询 *  * @param uid * @return Users */public Users checkUsersById(Integer uid);/** * 根据用户email查询 *  * @param uemail * @return Users */public Users checkUsersByEmail(String uemail);}
UserDaoImpl.java

package com.ssh.dao.impl;import java.util.List;import org.hibernate.Query;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;import com.ssh.dao.UserDao;import com.ssh.model.Users;import com.ssh.util.SessionManager;@Repository(value = "udao")@Transactionalpublic class UserDaoImpl extends SessionManager implements UserDao {@Overridepublic boolean login(Users user) {Users users = checkUsersByEmail(user.getUemail());String upwd = users.getUpwd();String inPwd = user.getUpwd();if (upwd.equals(inPwd)) {return true;}return false;}@Overridepublic boolean register(Users user) {if (user.getUemail() != null && (!user.getUemail().equals(""))) {getSession().save(user);}closeSession();return true;}@Overridepublic boolean delUser(Integer uid) {Users user = getSession().get(Users.class, uid);getSession().delete(user);closeSession();return getSession().get(Users.class, uid) == null;}@Overridepublic boolean updateUsers(Users newUser) {Integer uid = newUser.getUid();String uname = newUser.getUname();String upwd = newUser.getUpwd();Users user = this.checkUsersById(uid);if (uname != null) {user.setUname(uname);}if (upwd != null) {user.setUpwd(upwd);}getSession().update(user);closeSession();return true;}@Overridepublic Users checkUsersById(Integer uid) {String hql = "from Users as u where u.uid=:uid";Query query = getSession().createQuery(hql);query.setParameter("uid", uid);List<Users> list = query.list();return (list.size() != 0) ? list.get(0) : null;}@Overridepublic Users checkUsersByEmail(String uemail) {String hql = "from Users as u where u.uemail=:uemail";Query query = getSession().createQuery(hql);query.setParameter("uemail", uemail);List<Users> list = query.list();return (list.size() != 0) ? list.get(0) : null;}}

UserService.java

package com.ssh.service;import com.ssh.model.Users;/** * 用户Service层 *  * @author xingyang *  */public interface UserService {/** * 注册 *  * @param user * @return boolean */public boolean register(Users user);/** * 登录 *  * @param user * @return boolean */public boolean login(Users user);/** * 删除用户 *  * @param user * @return boolean */public boolean delUser(Users user);/** * 更改个人资料 *  * @param newUsers * @return boolean */public boolean updateUsers(Users newUsers);/** * 根据用户id查询 *  * @param uid * @return Users */public Users checkUsersById(Integer uid);/** * 根据用户email查询 *  * @param uemail * @return Users */public Users checkUsersByEmail(String uemail);}

UserServiceImpl.java
package com.ssh.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.ssh.dao.UserDao;import com.ssh.model.Users;import com.ssh.service.UserService;/** * Service层-事务实现类,可对该类实现AOP事务管理 *  */@Service("uService")public class UserServiceImpl implements UserService {@Autowiredprivate UserDao udao;@Overridepublic boolean register(Users user) {Users users = new Users(null, user.getUemail(), user.getUname(), user.getUpwd(), 0);return udao.register(users);}@Overridepublic boolean login(Users user) {return udao.login(user);}@Overridepublic boolean delUser(Users user) {return udao.delUser(user.getUid());}@Overridepublic boolean updateUsers(Users newUser) {return udao.updateUsers(newUser);}@Overridepublic Users checkUsersById(Integer uid) {return udao.checkUsersById(uid);}@Overridepublic Users checkUsersByEmail(String uemail) {return udao.checkUsersByEmail(uemail);}}
BaseController.java
package com.ssh.controller;import javax.annotation.Resource;import org.springframework.ui.Model;import com.google.gson.Gson;import com.ssh.mail.SendEmail;import com.ssh.model.Users;import com.ssh.service.UserService;/** * 这是一个整合SpringMVC,Hibernate,Spring基于注解的框架 该类为所有controller提供共同的功能,如json数据的转换 *  * @author xingyang */public class BaseController {@Resourceprotected UserService uService;private Gson gson = new Gson();/** * 将对象转换成json数据 *  * @param object * @return json */public String toJson(Object object) {return gson.toJson(object);}/** * 将对象转换成json数据(2) *  * @param object * @return json */public String toJsonp(Object object) {return "jsonp(" + gson.toJson(object) + ")";}// 获取用户信息protected void getUsers(Model model, Integer uid) {Users user = uService.checkUsersById(uid);model.addAttribute("user", user);}// 获取首页信息protected void getHome(Model model, Users user) {Users u = uService.checkUsersByEmail(user.getUemail());getUsers(model, u.getUid());}/** * 忘记密码处理 */protected void processForgetPwd(String email, String validateCode) {// 邮件的内容StringBuffer sb = new StringBuffer("<h2>");sb.append(email);sb.append(", 您好!</h2><br>");sb.append("<h3>邮箱账号:");sb.append(email);sb.append(",临时密码:");sb.append(validateCode);sb.append("</h3><br>请尽快登陆系统进行密码修改!<br><h3>系统网址:</h3><br>");sb.append("<a href='http://localhost:8080/SpringMVC_Spring_Hibernate/index.jsp'>");sb.append("http://localhost:8080/SpringMVC_Spring_Hibernate/index.jsp</a>");SendEmail.send(email, sb.toString());System.out.println("发送邮件");}}
UserController.java
package com.ssh.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.ssh.mail.MD5Util;import com.ssh.model.Users;/** * 处理用户信息的控制器类 *  * @author xingyang * */@Controllerpublic class UserController extends BaseController {/** * 登录 *  * @param user * @return String *  */@RequestMapping(value = "/login", produces = "text/html;charset=UTF-8")public String login(Model model, @ModelAttribute Users user) {Users users = uService.checkUsersByEmail(user.getUemail());getHome(model, users);return "/home.jsp";}/** * 注册 *  * @param user * @return String *  */@RequestMapping(value = "/register", produces = "text/html;charset=UTF-8")public String register(Model model, @ModelAttribute Users user) {uService.register(user);getHome(model, user);return "/home.jsp";}/** * 登录验证 *  * @param user * @return json *  */@ResponseBody@RequestMapping(value = "/loginUser", produces = "text/html;charset=UTF-8")public Object loginUser(@RequestParam("uemail") String uemail, @RequestParam("upwd") String upwd) {Users user = new Users(uemail, upwd);return toJson(uService.login(user));}/** * 注册验证 *  * @param uemail * @return json *  */@ResponseBody@RequestMapping(value = "/registerEmail", produces = "text/html;charset=UTF-8")public Object registerEmail(@RequestParam("uemail") String uemail) {Users user = uService.checkUsersByEmail(uemail);return toJson(user == null);}/** * 回到首页 *  * @param uid * @return String *  */@RequestMapping(value = "/home", produces = "text/html;charset=UTF-8")public String home(Model model, @RequestParam("uid") Integer uid) {Users user = uService.checkUsersById(uid);getHome(model, user);return "/home.jsp";}/** * 删除用户 *  * @param user * @return json *  */@ResponseBody@RequestMapping(value = "/delUser", produces = "text/html;charset=UTF-8")public Object delUser(@ModelAttribute Users user) {return toJson(uService.delUser(user));}/** * 修改用户个人资料 *  * @param user * @return String */@RequestMapping(value = "/updateUsers", produces = "text/html;charset=UTF-8")public Object updateUsers(Model model, @ModelAttribute Users user) {uService.updateUsers(user);getHome(model, user);return "/home.jsp";}/** * 忘记密码 *  * @param user * @return String */@RequestMapping(value = "/forgetUpwd", produces = "text/html;charset=UTF-8")public String forgetUpwd(@ModelAttribute Users user) {Integer uid = user.getUid();String uemail = user.getUemail();String uname = user.getUname();String validateCode = MD5Util.encode2hex(uemail);// 临时密码processForgetPwd(uemail, validateCode);Users users = new Users(uid, uemail, uname, validateCode, 0);uService.updateUsers(users);return "/home.jsp";}}

login.js(登录注册验证,自定义)

$(document).ready(function() {// 登陆提交后验证表单$("#loginForm").validate({rules : {uemail : {required : true,email : true},upwd : {required : true,remote : {type : "POST",url : "loginUser",data : {uemail : function() {return $("#loginUemail").val();},upwd : function() {return $("#loginUpwd").val();}}}}},messages : {uemail : {required : "请输入一个正确的邮箱",remote : "此邮箱已经被注册"},upwd : {required : "请输入密码",remote : "密码不正确"}}});// 注册提交后验证表单$("#registerForm").validate({rules : {uemail : {required : true,email : true,remote : { // 验证邮箱是否存在type : "POST",url : "registerEmail", // controllerdata : {uemail : function() {return $("#uemail").val();}}}},uname : {required : true,minlength : 2},upwd : {required : true,minlength : 6,maxlength : 20},confirmPwd : {required : true,rangelength : [ 6, 20 ],equalTo : "#upwd"},},messages : {uemail : {required : "请输入一个正确的邮箱",remote : "此邮箱已经被注册"},uname : "请输入用户名",upwd : {required : "请输入密码",minlength : "密码不得小于6位(6-20位)",maxlength : "密码不得大于20位(6-20位)"},confirmPwd : {required : "请输入密码",rangelength : "密码为6-20位",equalTo : "两次密码输入不一致"}}});$("#login").click(function(){var flag = document.getElementsByName("remember")[0].checked;  // 取到是否记住密码setCookie("flag", flag, 1); // 标记选择var uemail = $("#loginUemail").val();var upwd = $("#loginUpwd").val();if(flag && uemail!=null && uemail!="") {setCookie("uemail", uemail, 7);  // 保存七天setCookie("upwd", upwd, 7);} else {setCookie("uemail", "", 365);setCookie("upwd", "", 365);}});checkCookie();  // 设置cookie});// 检测 cookie 值的函数function checkCookie(){var uemail = getCookie("uemail"); // 取到uname的cookievar upwd = getCookie("upwd");var flag = getCookie("flag"); // 取到记住密码标记document.getElementById("loginUemail").value = uemail; // 给email输入框赋值document.getElementById("loginUpwd").value = upwd;document.getElementsByName("remember")[0].checked = flag;}// 获取 cookie 值的函数function getCookie(cname){var name = cname + "=";var ca = document.cookie.split(';');for(var i=0; i<ca.length; i++) {  var c = ca[i].trim();  if (c.indexOf(name)==0) return c.substring(name.length,c.length);}return "";}// 设置 cookie 值的函数function setCookie(cname,cvalue,exdays){var d = new Date();d.setTime(d.getTime()+(exdays*24*60*60*1000));var expires = "expires="+d.toGMTString();document.cookie = cname + "=" + cvalue + "; " + expires;}


原创粉丝点击