Maven+SSM框架整合模板项目
Maven+SSM(Spring+SpringMVC+Mybatis)框架整合
各框架使用使用的版本如下:
Spring 3.2.8
Mybatis 3.2.8
Maven 3.3.9
MySQL 5.6.39
好久没写SSM框架整合的项目了,都快记不清楚了,复习下以往的SSM框架整合项目的经验,先写个简单的SSM框架整合的项目当作模板使用!
项目结构图:

web前端页面目录结构:

开始整合项目:
1、Maven导入jar包(配置Maven项目的 pom.xml 文件)
pom.xml
1 <project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <groupId>org.ifg.bn</groupId> 6 <artifactId>ssm_roll</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <packaging>war</packaging> 9 <description>spring+springmvc+mybatis</description> 10 <dependencies> 11 <!-- spring --> 12 <dependency> 13 <groupId>org.springframework</groupId> 14 <artifactId>spring-webmvc</artifactId> 15 <version>3.2.8.RELEASE</version> 16 </dependency> 17 <dependency> 18 <groupId>org.springframework</groupId> 19 <artifactId>spring-jdbc</artifactId> 20 <version>3.2.8.RELEASE</version> 21 </dependency> 22 23 <!-- mybatis --> 24 <dependency> 25 <groupId>org.mybatis</groupId> 26 <artifactId>mybatis</artifactId> 27 <version>3.2.8</version> 28 </dependency> 29 <dependency> 30 <groupId>org.mybatis</groupId> 31 <artifactId>mybatis-spring</artifactId> 32 <version>1.2.2</version> 33 </dependency> 34 35 <!-- mysql连接驱动 --> 36 <dependency> 37 <groupId>mysql</groupId> 38 <artifactId>mysql-connector-java</artifactId> 39 <version>5.1.37</version> 40 </dependency> 41 42 <!-- javaee --> 43 <dependency> 44 <groupId>javaee</groupId> 45 <artifactId>javaee-api</artifactId> 46 <version>5</version> 47 </dependency> 48 49 <!-- dbcp数据库连接池 --> 50 <dependency> 51 <groupId>commons-dbcp</groupId> 52 <artifactId>commons-dbcp</artifactId> 53 <version>1.4</version> 54 </dependency> 55 56 <!-- json数据传输 --> 57 <dependency> 58 <groupId>com.fasterxml.jackson.core</groupId> 59 <artifactId>jackson-annotations</artifactId> 60 <version>2.2.3</version> 61 </dependency> 62 <dependency> 63 <groupId>com.fasterxml.jackson.core</groupId> 64 <artifactId>jackson-core</artifactId> 65 <version>2.2.3</version> 66 </dependency> 67 <dependency> 68 <groupId>com.fasterxml.jackson.core</groupId> 69 <artifactId>jackson-databind</artifactId> 70 <version>2.2.3</version> 71 </dependency> 72 73 <!-- MD5字符串加密,加密解密的工具 --> 74 <dependency> 75 <groupId>commons-codec</groupId> 76 <artifactId>commons-codec</artifactId> 77 <version>1.10</version> 78 </dependency> 79 80 <!-- log4j日志 --> 81 <dependency> 82 <groupId>log4j</groupId> 83 <artifactId>log4j</artifactId> 84 <version>1.2.12</version> 85 </dependency> 86 87 <!-- 文件上传 --> 88 <dependency> 89 <groupId>commons-fileupload</groupId> 90 <artifactId>commons-fileupload</artifactId> 91 <version>1.2.1</version> 92 </dependency> 93 <dependency> 94 <groupId>commons-io</groupId> 95 <artifactId>commons-io</artifactId> 96 <version>2.1</version> 97 </dependency> 98 99 <!-- jstl标签 --> 100 <dependency> 101 <groupId>jstl</groupId> 102 <artifactId>jstl</artifactId> 103 <version>1.2</version> 104 </dependency> 105 <dependency> 106 <groupId>taglibs</groupId> 107 <artifactId>standard</artifactId> 108 <version>1.1.2</version> 109 </dependency> 110 111 <!-- 测试 --> 112 <dependency> 113 <groupId>junit</groupId> 114 <artifactId>junit</artifactId> 115 <version>3.8.2</version> 116 <scope>test</scope> 117 </dependency> 118 119 <!-- 处理事务和AOP所需的包 --> 120 <dependency> 121 <groupId>org.aspectj</groupId> 122 <artifactId>aspectjweaver</artifactId> 123 <version>1.8.2</version> 124 </dependency> 125 </dependencies> 126 </project>
2、配置log4j日志
log4j.proper.ties
1 # Global logging configuration\uff0c\u5efa\u8bae\u5f00\u53d1\u73af\u5883\u4e2d\u8981\u7528debug 2 log4j.rootLogger=DEBUG, stdout, logfile, logaFile 3 #控制台打印日志 4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 6 log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%p]-[%c] %m%n 7 #写出到日志文件,每天一个新的日志文件 8 log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender 9 log4j.appender.logfile.File=logs/app.log 10 log4j.appender.logfile.encoding=UTF-8 11 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 12 log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n 13 #写出到一个日志文件里 14 log4j.appender.logaFile=org.apache.log4j.FileAppender 15 log4j.appender.logaFile.Threshold=ERROR 16 log4j.appender.logaFile.File=logs/app-error.log 17 log4j.appender.logaFile.encoding=UTF-8 18 log4j.appender.logaFile.layout=org.apache.log4j.PatternLayout 19 log4j.appender.logaFile.layout.ConversionPattern=%d %p [%c] - %m%n 20 21 log4j.logger.srp.bapp.sys.filter.UserRoleFilter=DEBUG
3、配置数据连接配置文件
写url时,可以加上字符编码的设置,如第3行所示。
jdbc.properties
1 #Mysql Conncetion 2 #set uriEncoding 3 #jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8 4 jdbc.driver=com.mysql.jdbc.Driver 5 jdbc.url=jdbc:mysql://127.0.0.1:3306/test 6 jdbc.username=root 7 jdbc.password=mysql 8 9 jdbc.initSize=1 10 jdbc.maxSize=1
4、配置spring
配置Spring上下文设置和spring与mybatis整合的相关配置。
spring与springmvc的配置信息写成两个配置文件是为了方便在web.xml中整合spring与springmvc。
spring-context.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:jdbc="http://www.springframework.org/schema/jdbc" 6 xmlns:jee="http://www.springframework.org/schema/jee" 7 xmlns:tx="http://www.springframework.org/schema/tx" 8 xmlns:aop="http://www.springframework.org/schema/aop" 9 xmlns:mvc="http://www.springframework.org/schema/mvc" 10 xmlns:util="http://www.springframework.org/schema/util" 11 xsi:schemaLocation=" 12 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 13 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 14 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd 15 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 16 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 17 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 18 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 19 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> 20 <!-- 配置组件扫描 --> 21 <context:component-scan base-package="org.ifg.bn"> 22 <!--制定扫包规则,不扫描@Controller注解的Java类 --> 23 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 24 </context:component-scan> 25 26 <!-- 加载配置文件 --> 27 <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/> 28 29 <!-- 配置连接池 --> 30 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 31 <property name="driverClassName" value="${jdbc.driver}" /> 32 <property name="url" value="${jdbc.url}" /> 33 <property name="username" value="${jdbc.username}" /> 34 <property name="password" value="${jdbc.password}" /> 35 <property name="initialSize" value="${jdbc.initSize}"/> 36 <property name="maxActive" value="${jdbc.maxSize}"/> 37 </bean> 38 39 <!-- 配置SqlSessionFactory --> 40 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 41 <property name="dataSource" ref="dataSource"/> 42 <property name="configLocation" value="classpath:mybatis/mybatis.xml"/><!-- mybatis配置文件 --> 43 <property name="mapperLocations" value="classpath:org/ifg/bn/dao/*.xml"/><!-- 自动扫描映射文件 --> 44 </bean> 45 46 <!-- 配置MapperScannerConfigurer自动扫描映射器 --> 47 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 48 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!-- 此种情况下不能使用ref链接sqlSessionFactory --> 49 <property name="basePackage" value="org.ifg.bn.dao"/><!-- 注入要扫描的包,扫描Mapper映射器(接口) --> 50 </bean> 51 52 <!-- 配置xml形式的事务管理器 --> 53 <!-- 事务管理器 --> 54 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 55 <property name="dataSource" ref="dataSource"/> 56 </bean> 57 58 <!-- 事务通知 --> 59 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 60 <tx:attributes> 61 <tx:method name="save*" propagation="REQUIRED"/> 62 <tx:method name="insert*" propagation="REQUIRED"/> 63 <tx:method name="update*" propagation="REQUIRED"/> 64 <tx:method name="delete*" propagation="REQUIRED"/> 65 <tx:method name="select*" propagation="SUPPORTS" read-only="true"/> 66 <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> 67 <tx:method name="load*" propagation="SUPPORTS" read-only="true"/> 68 <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> 69 </tx:attributes> 70 </tx:advice> 71 72 <!-- AOP把事务控制在Service层 --> 73 <aop:config> 74 <aop:advisor advice-ref="txAdvice" pointcut="execution(* org.ifg.bn.service.impl.*.*(..))"/> 75 </aop:config> 76 77 </beans>
5、配置springmvc
spring-mvc.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:jdbc="http://www.springframework.org/schema/jdbc" 6 xmlns:jee="http://www.springframework.org/schema/jee" 7 xmlns:tx="http://www.springframework.org/schema/tx" 8 xmlns:aop="http://www.springframework.org/schema/aop" 9 xmlns:mvc="http://www.springframework.org/schema/mvc" 10 xmlns:util="http://www.springframework.org/schema/util" 11 xsi:schemaLocation=" 12 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 13 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd 14 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd 15 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 16 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 17 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 18 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 19 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd"> 20 <!-- 配置组件扫描 --> 21 <context:component-scan base-package="org.ifg.bn"> 22 <!--制定扫包规则,只扫描@Controller注解的Java类 --> 23 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> 24 </context:component-scan> 25 26 <!-- 启用注解驱动;扩充了注解驱动,可以将请求参数绑定到控制器参数 --> 27 <!-- 通过annotation-driven可以替代下面的处理器映射器和适配器 --> 28 <mvc:annotation-driven/> 29 30 <!-- 注解处理器映射器 31 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> 32 --> 33 <!-- 注解适配器 34 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean> 35 --> 36 37 <!-- 配置ViewResolver 视图解析器 --> 38 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 39 <property name="prefix" value="/WEB-INF/"/> 40 <property name="suffix" value=".jsp"/> 41 </bean> 42 43 <!-- 支持文件上传 --> 44 <bean id="multipartResolver" 45 class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 46 <!-- 上传文件大小上限,单位为字节(10G) --> 47 <property name="defaultEncoding" value="UTF-8"></property> 48 <property name="maxUploadSize" value="10737418240"></property> 49 </bean> 50 51 </beans>
6、配置mybatis配置文件
mybatis.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <settings> 7 <!-- 开启懒加载机制 --> 8 <setting name="lazyLoadingEnabled" value="true"/> 9 <!-- 设置按需加载 --> 10 <setting name="aggressiveLazyLoading" value="false"/> 11 <!-- 日志框架 --> 12 <setting name="logImpl" value="LOG4J"/> 13 </settings> 14 15 <!-- 定义别名 --> 16 <!-- 批量别名,指定扫描包的路径,自动将包下边的POJO(DTO)定义别名,别名为类名(第一个字母小写和大写都可以) --> 17 <typeAliases> 18 <package name="org.ifg.bn.dto"/> 19 </typeAliases> 20 </configuration>
7、配置web.xml(整合spring+springmvc)
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 5 version="2.5"> 6 <display-name>ssm_roll</display-name> 7 <welcome-file-list> 8 <welcome-file>index.html</welcome-file> 9 <welcome-file>index.jsp</welcome-file> 10 </welcome-file-list> 11 12 <!-- 编码过滤器,解决中文乱码 只针对POST提交方式有效 --> 13 <filter> 14 <filter-name>characterEncodingFilter</filter-name> 15 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 16 <init-param> 17 <param-name>encoding</param-name> 18 <param-value>UTF-8</param-value> 19 </init-param> 20 </filter> 21 <filter-mapping> 22 <filter-name>characterEncodingFilter</filter-name> 23 <url-pattern>/*</url-pattern> 24 </filter-mapping> 25 26 <!-- 配置spring核心监听器 --> 27 <context-param> 28 <param-name>contextConfigLocation</param-name> 29 <param-value>classpath:spring/spring-context.xml</param-value> 30 </context-param> 31 <listener> 32 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 33 </listener> 34 35 <!-- 配置springmvc的前端控制器 --> 36 <servlet> 37 <servlet-name>springmvc</servlet-name> 38 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 39 <init-param> 40 <param-name>contextConfigLocation</param-name> 41 <param-value>classpath:spring/spring-mvc.xml</param-value> 42 </init-param> 43 <load-on-startup>1</load-on-startup> 44 </servlet> 45 <servlet-mapping> 46 <servlet-name>springmvc</servlet-name> 47 <url-pattern>*.do</url-pattern> 48 </servlet-mapping> 49 50 <!-- 配置session超时时间,单位分钟 --> 51 <session-config> 52 <session-timeout>15</session-timeout> 53 </session-config> 54 55 </web-app>
8、编写实体类(DTO(Data Transfer Object)数据传输对象)
User.java
1 package org.ifg.bn.dto; 2 3 import java.util.Date; 4 5 public class User { 6 private String username; 7 private String realname; 8 private String password; 9 private Date birth; 10 private String addr; 11 12 public User() { 13 super(); 14 } 15 16 public User(String username, String realname, String password, Date birth, String addr) { 17 super(); 18 this.username = username; 19 this.realname = realname; 20 this.password = password; 21 this.birth = birth; 22 this.addr = addr; 23 } 24 25 public String getUsername() { 26 return username; 27 } 28 29 public void setUsername(String username) { 30 this.username = username; 31 } 32 33 public String getRealname() { 34 return realname; 35 } 36 37 public void setRealname(String realname) { 38 this.realname = realname; 39 } 40 41 public String getPassword() { 42 return password; 43 } 44 45 public void setPassword(String password) { 46 this.password = password; 47 } 48 49 public Date getBirth() { 50 return birth; 51 } 52 53 public void setBirth(Date birth) { 54 this.birth = birth; 55 } 56 57 public String getAddr() { 58 return addr; 59 } 60 61 public void setAddr(String addr) { 62 this.addr = addr; 63 } 64 65 @Override 66 public String toString() { 67 return "User [username=" + username + ", realname=" + realname + ", password=" + password + ", birth=" + birth 68 + ", addr=" + addr + "]"; 69 } 70 71 }
9、DAO层
UserDAO.java
package org.ifg.bn.dao; import org.ifg.bn.dto.User; public interface UserDAO { User findUser(User user); } /* * 如果spring的配置文件中配置了映射器的自动扫描。就不需要在dao层上面进行配置@Repository注解 * */
映射文件 UserDAO.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="org.ifg.bn.dao.UserDAO"> 6 7 <select id="findUser" parameterType="User" resultType="User"> 8 SELECT * FROM user u WHERE u.username=#{username} and u.password=#{password} 9 </select> 10 11 </mapper>
10、编写Service层
UserService.java
1 package org.ifg.bn.service; 2 3 import org.ifg.bn.dto.User; 4 5 public interface UserService { 6 7 /** 8 * 用户登录 9 * @param user 10 * @return 11 */ 12 User login(User user); 13 14 }
UserServiceImpl.java
1 package org.ifg.bn.service.impl; 2 3 import org.ifg.bn.dao.UserDAO; 4 import org.ifg.bn.dto.User; 5 import org.ifg.bn.service.UserService; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.stereotype.Service; 8 9 @Service 10 public class UserServiceImpl implements UserService { 11 12 @Autowired 13 private UserDAO userDAO; 14 15 16 public User login(User user) { 17 user.setPassword(user.getPassword()); 18 User resUser = userDAO.findUser(user); 19 return resUser; 20 } 21 22 }
11、编写Controller层
UserController.java
1 package org.ifg.bn.controller; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpSession; 5 6 import org.apache.commons.logging.Log; 7 import org.apache.commons.logging.LogFactory; 8 import org.ifg.bn.dto.User; 9 import org.ifg.bn.service.UserService; 10 import org.springframework.beans.factory.annotation.Autowired; 11 import org.springframework.stereotype.Controller; 12 import org.springframework.web.bind.annotation.RequestMapping; 13 import org.springframework.web.bind.annotation.RequestMethod; 14 import org.springframework.web.bind.annotation.ResponseBody; 15 16 @Controller 17 @RequestMapping("/sys") 18 public class UserController { 19 20 private static final Log logger = LogFactory.getLog(UserController.class); 21 22 @Autowired 23 private UserService userService; 24 25 /** 26 * 进入登录页面 27 * @return 28 */ 29 @RequestMapping("/tologin.do") 30 public String toLogin() { 31 logger.info("进入登录页面"); 32 return "login"; 33 } 34 35 /** 36 * 登录操作 37 * @param user 38 * @return 39 */ 40 @RequestMapping(value="/login.do", method=RequestMethod.POST) 41 @ResponseBody 42 public String login(User user,HttpServletRequest request,HttpSession session){ 43 logger.info("开始登录"); 44 String allPath = request.getRequestURL().toString(); 45 String appName = allPath.substring(0, allPath.indexOf(request.getServletPath())); 46 session.setAttribute("appName", appName); 47 User resUser = userService.login(user); 48 if (resUser != null){ 49 session.setAttribute("loginUser", user); 50 return "true"; 51 }else{ 52 logger.error("登录失败"); 53 return "false"; 54 } 55 } 56 57 /** 58 * 系统首页 59 * @return 60 */ 61 @RequestMapping("/toindex.do") 62 public String toIndex() { 63 logger.info("进入系统首页"); 64 return "index"; 65 } 66 67 /** 68 * 登录失败页面 69 * @return 70 */ 71 @RequestMapping("/toerror.do") 72 public String toError() { 73 logger.info("登录失败,跳转错误页面"); 74 return "error"; 75 } 76 77 }
12、前端页面
需要先导入jquery.js文件。
login.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html lang="zh-CN"> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <script src="../js/jquery-1.12.2.js"></script> 8 <title>登录</title> 9 </head> 10 <body> 11 <div> 12 <form class="cus-form"> 13 <table> 14 <tr> 15 <td><label>用户名:</label></td> 16 <td><input type="text" name="username" id="username"></td> 17 </tr> 18 <tr> 19 <td><label>密码:</label></td> 20 <td><input type="password" name="password" id="password"></td> 21 </tr> 22 <tr> 23 <td><input type="button" value="登录" onclick="login();"></td> 24 </tr> 25 </table> 26 </form> 27 </div> 28 <script type="text/javascript"> 29 $(document).ready(function(){ 30 //监听Enter按键 31 $('body').keydown(function(e){ 32 if(e.keyCode === 13){ 33 login(); 34 } 35 }); 36 }) 37 38 //使用JQuery的ajax方法进行异步提交登录 39 function login() { 40 $.ajax({ 41 url : 'login.do', 42 data : $('form').serialize(), 43 dataType : 'json', 44 type : 'post', 45 success : function(data) { 46 if (data == true) { //登陆成功 47 window.location.href = '${appName}/sys/toindex.do'; 48 } else { 49 window.location.href = '${appName}/sys/toerror.do'; 50 } 51 } 52 }); 53 } 54 </script> 55 </body> 56 </html>
error.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html lang="zh-CN"> 4 <head> 5 <title>登录失败页面</title> 6 <script language="javascript" type="text/javascript"> 7 var timer; 8 //启动跳转的定时器 9 function startTimes() { 10 timer = window.setInterval(showSecondes, 1000); 11 } 12 13 var i = 5; 14 function showSecondes() { 15 if (i > 0) { 16 i--; 17 document.getElementById("secondes").innerHTML = i; 18 } else { 19 window.clearInterval(timer); 20 location.href = "${appName}/sys/tologin.do"; 21 } 22 } 23 24 //取消跳转 25 function resetTimer() { 26 if (timer != null && timer != undefined) { 27 window.clearInterval(timer); 28 location.href = "${appName}/sys/tologin.do"; 29 } 30 } 31 </script> 32 </head> 33 <body class="error_page" onload="startTimes();"> 34 <h1 id="error"> 35 遇到错误, <span id="secondes">5</span> 秒后将自动跳转,立即跳转请点击 <a 36 href="javascript:resetTimer();">返回</a> 37 </h1> 38 </body> 39 </html>
index.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html lang="zh-CN"> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>Index</title> 7 </head> 8 <body> 9 <h4>SSM 框架整合</h4> 10 <h2>登录成功</h2> 11 <h2>欢迎<span style="color: blue;">${sessionScope.loginUser.username}</span>登录</h2> 12 <p>${appName }</p> 13 </body> 14 </html>
13、user表结构
user.sql
1 /* 2 Navicat MySQL Data Transfer 3 4 Source Server : mysql 5 Source Server Version : 50639 6 Source Host : 127.0.0.1:3306 7 Source Database : test 8 9 Target Server Type : MYSQL 10 Target Server Version : 50639 11 File Encoding : 65001 12 13 Date: 2018-02-11 21:18:44 14 */ 15 16 SET FOREIGN_KEY_CHECKS=0; 17 18 -- ---------------------------- 19 -- Table structure for user 20 -- ---------------------------- 21 DROP TABLE IF EXISTS `user`; 22 CREATE TABLE `user` ( 23 `username` varchar(32) NOT NULL COMMENT '用户名', 24 `realname` varchar(64) NOT NULL COMMENT '真实姓名', 25 `password` varchar(64) NOT NULL COMMENT '密码', 26 `birth` date DEFAULT NULL COMMENT '出生日期', 27 `addr` varchar(255) DEFAULT NULL COMMENT '住址', 28 PRIMARY KEY (`username`) 29 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
14、部署项目
14、运行截图
登录页面:

登录失败页面:

登录成功页面:

至此,一个简单的SSM模板项目编写完成!
浙公网安备 33010602011771号