Spring MVC+mybatis实现注册登录功能

本文实例为大家分享了Spring MVC mybatis实现注册登录功能的具体代码,供大家参考,具体内容如下

前期准备:

如下图所示,准备好所需要的包

新建工程,导入所需要的包,在web.xml中配置好所需要的,如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
 http://www.springmodules.org/schema/cache/springmodules-cache.xsd
 http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
 ">
<filter>
 <filter-name>encoding</filter-name>
 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
 <init-param>
 <param-name>encoding</param-name>
 <param-value>UTF-8</param-value>
 </init-param>
</filter>
 <filter-mapping>
 <filter-name>encoding</filter-name>
 <url-pattern>*.action</url-pattern>
 </filter-mapping>
 <!-- 前端控制器 -->
<servlet>
 <servlet-name>spring</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <!-- 在tomcat启动时初始化servlet的优先级,这个数字只能整数,正整数才会初始化servlet -->
 <load-on-startup>1</load-on-startup>
 <init-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/config/spring.xml</param-value>
 </init-param>
</servlet>
<servlet-mapping>
 <servlet-name>spring</servlet-name>
 <url-pattern>*.action</url-pattern>
</servlet-mapping>
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

配置好如下文件spring.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:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:util="http://www.springframework.org/schema/util"
 xmlns:cache="http://www.springframework.org/schema/cache" xmlns:tx="http://www.springframework.org/schema/tx"
 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.2.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.2.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
   http://www.springframework.org/schema/util
   http://www.springframework.org/schema/util/spring-util-3.2.xsd
   http://www.springframework.org/schema/cache
   http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
   http://www.springframework.org/schema/mvc
   http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

 <!-- 启用注解 -->
 <context:annotation-config></context:annotation-config>

 <!-- 加载注解 -->
 <context:component-scan base-package="com.register"></context:component-scan>

 <!-- 导入数据库配置文件 -->
 <util:properties id="myproperties" location="/WEB-INF/config/jdbc.properties">
 </util:properties>
 <!-- 创建数据库连接池 -->
 <bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 <!-- 定义数据库连接的参数 -->
 <property name="driverClass" value="#{myproperties.driver}"></property>
 <property name="jdbcUrl" value="#{myproperties.url}"></property>
 <property name="user" value="#{myproperties.username}"></property>
 <property name="password" value="#{myproperties.password}"></property>
 <!-- 数据库连接池的两个属性 -->
 <property name="initialPoolSize" value="3"></property>
 <property name="maxPoolSize" value="20"></property>
 </bean>
 <!-- 替代mybatis的配置文件用来执行mysql语句 -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 <property name="dataSource" ref="ds" />
 <!-- 定义映射文件路径 -->
 <property name="mapperLocations" value="classpath:com/register/dao/*.xml"></property>
 </bean>

 <!-- sqlSession中的bean -->
 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
 <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
 </bean>
 <!-- 开启mvc注解 -->
 <mvc:annotation-driven></mvc:annotation-driven>

</beans>

配置好数据库信息

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/cheshangbao?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useOldAliasMetadataBehavior=true
username=root
password=admin

另外,还有所需要的操作数据库的语句:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- sql 映射文件 -->

<mapper namespace="com.register.dao">

 <!-- 用户注册的判断 -->
 <insert id="addUser" parameterType="map">
 insert into user_login (phone_mobile,login_password,register_time,user_code) values(#{phone_mobile},#{login_password},#{register_time},#{user_code})
 </insert>

 <!-- 用户名唯一性的判断 -->
 <select id="judgeUser" parameterType="String" resultType="com.register.vo.User">
 select phone_mobile from user_login where phone_mobile=#{phone_mobile}
 </select>

 <!-- 用户登录的判断返回一个user给service处理 -->
 <select id="userLogin" parameterType="map" resultType="com.register.vo.User">
 select phone_mobile,login_password from user_login where phone_mobile=#{phone_mobile} and login_password=#{login_password}
 </select>
</mapper>

前端准备工作

我做的一个简单的注册登录的页面,在页面中对表单进行了第一层的判断,然后在后端又写了第二层验证。

登陆页面如下

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>">

 <title>用户登录</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <link rel="stylesheet" href="assets/css/style.css">
 </head>
 <script type="text/javascript" src="<%=basePath%>/js/jquery-1.8.3.js"></script>
 <script src="<%=basePath%>/js/My97DatePicker/WdatePicker.js" ></script>
 <script type="text/javascript">
// 用户名合法性的判断
 $(function(){
 $("#phone_number").blur(function(){
 var phone = $("#phone_number").val();
 var len = $("#phone_number").val().length;
 if(len==0||phone==null){
 $("#userNameError").html("手机号不能为空!");
 $("#loginFrm").attr("onsubmit","return false");
 }
 });
 });

// 密码合法性的判断
 $(function(){
 $("#pwd").blur(function(){
 var len = $("#pwd").val().length;
 if(len==0){
 $("#pwdError").html("密码不能为空!");
 $("#loginFrm").attr("onsubmit","return false");
 }
 })
 })

 function check(){
 fr=document.form1;
 if(fr.phone_mobile.value==""){
  fr.phone_mobile.focus();
  return false;
 }
 if((fr.login_password.value!="")){
  fr.pwd1.focus();
  return false;
 }
  fr.submit();
 }
 </script>
 <body>
 <div class="page-container">
  <h1>登录</h1>
  <form name="form1" id="loginFrm" action="userLogin.action" method="post" onsubmit="">
  手机号:<input type="text" name="phone_mobile" id="phone_number"><span style="color: red;" id="userNameError"></span><br>
  密 码:<input type="password" name="login_password" id="pwd" ><span style="color: red;" id="pwdError"></span>
  <button type="submit" class="submit_button" onclick="return check()">登录</button>
  </form>
 <br><br><br>
 <h2><a href="pages/register.jsp">注册</a></h2>
 </div>
 </body>
</html>

以下是注册界面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>">

 <title>用户注册</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <link rel="stylesheet" href="assets/css/style.css">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 </head>
 <script type="text/javascript" src="<%=basePath%>/js/jquery-1.8.3.js"></script>
 <script src="<%=basePath%>/js/My97DatePicker/WdatePicker.js" ></script>
 <script type="text/javascript">
// 用户名合法性的判断
 $(function(){
 $("#phone_number").blur(function(){
 var phone = $("#phone_number").val();
 var len = $("#phone_number").val().length;
 $.getJSON("userJudge.action",{"phone_mobile":phone},function(data){
 if(data!=null){
 alert("手机号已注册,青重新输入!!");
 $("#userNameError").html("手机号已注册!");
 $("#regFrm").attr("onsubmit","return false");

 }else if(len==0||phone==null){
 $("#userNameError").html("手机号不能为空!");
 $("#regFrm").attr("onsubmit","return false");
 }
 else if (!checkContactNumber()) {
  $("#userNameError").html("不符合手机号格式!");
  $("#regFrm").attr("onsubmit","return false");
 }
 else{
 $("#userNameError").html("恭喜!手机号可用!")
 $("#regFrm").attr("onsubmit","return true");
 }
 });
 });
 });
// 密码合法性的判断
 $(function(){
 $("#pwd").blur(function(){
 var len = $("#pwd").val().length;
 if(len==0){
 $("#pwdError").html("密码不能为空!");
 $("#regFrm").attr("onsubmit","return false");
 }
 if(len>0&&len<6){
 $("#pwdError").html("密码位数最少为6位!");
 $("#regFrm").attr("onsubmit","return false");
 }
 if(len>=6){
 $("#pwdError").html("密码格式正确!");
 $("#regFrm").attr("onsubmit","return true");
 }
 })
 })
// 确认两次密码
 $(function(){
 $("#conpwd").blur(function(){
 var oldpwd = $("#pwd").val();
 var conpwd = $("#conpwd").val();
 var number = $("#conpwd").val().length;
 if(number == 0){
 $("#pwdError").html("密码不能为空!");
 $("#regFrm").attr("onsubmit","return false");
 }
 else if(oldpwd!=conpwd){
 $("#conpwdError").html("两次密码不一致!");
 $("#regFrm").attr("onsubmit","return false");
 }else{
 $("#conpwdError").html("密码符合!");
 $("#regFrm").attr("onsubmit","return true");
 }
 })
 })
 function check(){
 fr=document.reg;
 if(fr.phone_mobile.value==""){
  fr.phone_mobile.focus();
  return false;
 }
 if((fr.login_password.value=="")){
  fr.login_password.focus();
  return false;
 }
 if((fr.login_password2.value=="")){
  fr.login_password2.focus();
  return false;
 }
  fr.submit();
 }
 function checkContactNumber() {
 var mobile = $.trim($("#phone_number").val());
 var isMobile = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1})|(17[0-9]{1})|(14[0-9]{1}))+\d{8})$/;
  if (!isMobile.exec(mobile) && mobile.length != 11) {
  $("#phone_number").focus();
  return false;
  }
 return true;
 }
 </script>
 <body>
 <!-- <form id="regFrm" action="userReg.action" method="post" onsubmit="">
 用户名:<input type="text" name="userName" id="uname"><span style="color: red;" id="userNameError"></span><br/>
 密码:<input type="password" name="password" id="pwd"><span style="color: red;" id="pwdError"></span><br/>
 确认密码:<input type="password" id="conpwd"><span style="color: red;" id="conpwdError"></span><br/>
 生日<input type="text" name="birthday" onClick="WdatePicker()" class="Wdate"><br/>
 <input type="submit" value="注册">
 </form> -->
 <div class="page-container">
  <h1>用户注册</h1>
  <!-- <form id="regFrm" action="userReg.action" method="post" onsubmit="">
  用户名:<input type="text" name="userName" class="username" >
  密 码:<input type="password" name="password" class="password" >
  <button type="submit" class="submit_button">登录</button> -->
  <form name="reg" id="regFrm" action="userReg.action" method="post" onsubmit="">
  手机号:<input type="text" name="phone_mobile" id="phone_number"><span style="color: red;" id="userNameError"></span><br/>
 密码:<input type="password" name="login_password" id="pwd"><span style="color: red;" id="pwdError"></span><br/>
 确认密码:<input type="password" name="login_password2" id="conpwd"><span style="color: red;" id="conpwdError"></span><br/>
 <button type="submit" class="submit_button" onclick="return check()">注册</button>
  </form>
 </div>
 </body>
</html>

页面中对手机号进行了验证,而且能够与后台进行交互,判断数据库中是否已有此手机号,页面所需的js文件和css配置会在以下给出,

进入正题

数据库中包含用户手机号,用户密码,以及注册信息,和生成的唯一识别码

以下是用户的实体类

package com.register.vo;

import java.util.Date;

public class User {
private int id;
private String phone_mobile;//用户手机号
private String login_password;//用户登录密码
private Date register_time;//用户注册日期
private String user_code;//用户唯一识别ID

public User(int id, String phone_mobile, String login_password, Date register_time,
 String user_code) {
 super();
 this.id = id;
 this.phone_mobile = phone_mobile;
 this.login_password = login_password;
 this.register_time = register_time;
 this.user_code = user_code;
}

public User(String phone_mobile, String login_password, Date register_time, String user_code) {
 super();
 this.phone_mobile = phone_mobile;
 this.login_password = login_password;
 this.register_time = register_time;
 this.user_code = user_code;
}
public User() {
}

public int getId() {
 return id;
}
//对用户数据进行封装
public void setId(int id) {
 this.id = id;
}

public String getPhone_mobile() {
 return phone_mobile;
}

public void setPhone_mobile(String phone_mobile) {
 this.phone_mobile = phone_mobile;
}

public String getLogin_password() {
 return login_password;
}

public void setLogin_password(String login_password) {
 this.login_password = login_password;
}

public Date getRegister_time() {
 return register_time;
}

public void setRegister_time(Date register_time) {
 this.register_time = register_time;
}

public String getUser_code() {
 return user_code;
}

public void setUser_code(String user_code) {
 this.user_code = user_code;
}

}

下面这一步是比较重要的一步,Controller类, 如下所示

package com.register.controller;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.register.service.UserService;
import com.register.vo.User;

//让控制器成为一个bean
@Controller
//这个控制器是接受user_reg页面传过来的参数去操作数据库
public class UserController {
 @Autowired
 private SqlSession sqlSession;
 @Autowired
 private UserService us;
 @Autowired
 private HttpServletRequest req;
 @RequestMapping("/userReg.action")
 //jsp页面通过userReg.action找到这个方法
 public String userReg(User user){
 Map<String,Object> map = new HashMap<String, Object>();
 map.put("phone_mobile", user.getPhone_mobile());
 map.put("login_password", user.getLogin_password());

 //判断页面传回的数据要求
 Pattern pattern = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[01236789]))\\d{8}$");
 Matcher matcher = pattern.matcher(user.getPhone_mobile());
 if(user.getPhone_mobile()==null || user.getLogin_password()==null || !matcher.matches()){
 return "index.jsp";
 }

 //获取当前注册时间
 Date date = new Date();
 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 map.put("register_time", df.format(date));

 //生成唯一识别码
 String s = UUID.randomUUID().toString();
 String user_code = s.substring(0,8)+s.substring(9,13)+s.substring(14,18)+s.substring(19,23)+s.substring(24);
 map.put("user_code", user_code);

 //将数据添加到数据库中
 int a = sqlSession.insert("com.register.dao.addUser",map);

 req.setAttribute("phone_mobile", user.getPhone_mobile());
 req.setAttribute("login_password", user.getLogin_password());
 return "pages/register_success.jsp";
 }

 //处理用户名唯一性的判断
 @RequestMapping("/userJudge.action")
 @ResponseBody
 public User userJudge(String phone_mobile) {
 User u = sqlSession.selectOne("com.register.dao.judgeUser",phone_mobile);
 System.out.println(u.getPhone_mobile());
 return u;
 }

 //用户登录的判断
 @RequestMapping("/userLogin.action")
 public String userLogin(String phone_mobile,String login_password){
 //对页面传回的值进行二次判断
 Pattern pattern = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[01236789]))\\d{8}$");
 Matcher matcher = pattern.matcher(phone_mobile);
 if(phone_mobile==null || login_password==null || !matcher.matches()){
 return "pages/user-login-no.jsp";
 }

 User u = us.userLogin(phone_mobile, login_password);

 //查到用户了,执行登录成功的操作
 if(u!=null){
 req.getSession().setAttribute("u", u);
 return "pages/user-login-ok.jsp";
 }else{
 return "pages/user-login-no.jsp";
 }
 }
 //用户退出销毁session 跳转到登录页
 @RequestMapping("/userExit.action")
 public String userExit(HttpSession session){
 session.invalidate();
 return "index.jsp";
 }
}

UserService类:

package com.register.service;

import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.register.vo.User;

@Service
public class UserService {
 @Autowired
 private SqlSession sqlSession;
 public User userLogin(String phone_mobile,String login_password){
 Map<String,Object> map = new HashMap<String, Object>();
 map.put("phone_mobile",phone_mobile);
 map.put("login_password", login_password);
 User u = sqlSession.selectOne("com.register.dao.userLogin",map);
 return u;
 }
}

注入测试类:

package com.register.util;

import org.springframework.stereotype.Controller;

@Controller
public class TestUtil {
 public void a(){
 System.out.println("注入成功!");
 }

}

OK,到这里已经基本差不多了,但是这里边所给的代码并不完整,为了方便大家相互交流学习,这是源码以及数据库文件,
链接:注册登录功能,想要参考源码的可以自己下载。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 利用Spring IOC技术实现用户登录验证机制

    利用 Spring IOC 技术实现用户登录的验证机制,对用户进行登录验证. 首先利用 Spring 的自动装配模式将 User 对象注入到控制器中,然后将用户输入的用户名和密码与系统中限定的合法用户的用户名和密码进行匹配. 当用户名与密码匹配成功时,跳转到登录成功页面:当用户名与密码不匹配时,跳转到登录失败的页面. 1.创建 User 对象,定义用户名和密码属性,代码如下: package com.importnew; public class User { private String us

  • Spring MVC登录注册以及转换json数据

    项目结构; 代码如下: BookController package com.mstf.controller; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codehaus.jackson.map.ObjectMapper; import com.mstf.

  • springmvc下实现登录验证码功能示例

    总体思路,简单讲,就是后台生成图片同时将图片信息保存在session,前端显示图片,输入验证码信息后提交表单到后台,取出存放在session里的验证码信息,与表单提交的验证码信息核对. 点击验证码图片时,通过jquery重新请求后台生成验证码图片方法,更换图片. 首先在后端controller里,有这样一个方法: 路径为http://localhost:8888/RiXiang_blog/login/captcha.form,访问这个路径便可以通过response写入图片. @RequestMa

  • SpringMVC 实现用户登录实例代码

    SpringMVC的一个登陆小案例 准备工作 创建一个Dynamic Web Project(本人是Eclipse) 添加相关的jar包,构建路径 创建springMVC-servlet.xml,及完善web.xml 创建代码逻辑 目录结构如下 对于新手而言,有一个项目的完整的目录结构是多么幸福的一件事啊. 目录结构 个人建议:注意其中的springMVC-servlet.xml的位置.以及源代码包的名称. 代码实战 首先是大管家,web.xml: <?xml version="1.0&q

  • Spring+MongoDB实现登录注册功能

    本文实例为大家分享了Spring,Spring MVC,MongoDB实现登录注册 的具体代码,供大家参考,具体内容如下 工程目录: Spring配置文件: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springfra

  • springmvc+spring+mybatis实现用户登录功能(上)

    由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一.代码结构 整个项目的代码结构如图所示: controller为控制层,主要用于对业务模块的流程控制. dao为数据接入层,主要用于与数据库进行连接,访问数据库进行操作,这里定义了各种操作数据库的接口. mapper中存放mybatis的数据库映射配置.可以通过查看mybatis相关教程了解 mod

  • 详解使用Spring3 实现用户登录以及权限认证

    使用Spring3 实现用户登录以及权限认证 这里我就简单介绍一下,我在实现的时候处理的一些主要的实现. 1.用户登录 <form action="loginAction.do" method="post"> <div class="header"> <h2 class="logo png"></h2> </div> <ul> <li><

  • spring mvc实现登录账号单浏览器登录

    在很多web产品中都需要实现在同一时刻,只能允许一个账号同时只能在一个浏览器当中登录.通俗点讲就是当A账号在浏览器1当中登录了,此时在浏览器2中登录A账号.那么在浏览器1中的A账号将会被挤出去,当用户操作浏览器1的页面,页面会跳到登录页面,需要重新登录.那么我们怎么实现这样的功能呢?下面将给大家进行详细的介绍: 原理 用户A使用账号a在浏览器当中登录,然后用户B在另外一台电脑上的浏览器登录账号a,当用户B登录验证成功时,将会触发登录监听类,在监听类当中判断出账号a已经被用户A登录,就把用户A的账

  • webix+springmvc session超时跳转登录页面

    引言 最近做项目,发现ajax请求不能在服务器中直接重定向到登录页面.查了些资料发现jquery的ajax请求有人给出了方法.但是webix的ajax请求和jquery的有些区别.这里模仿jquery的处理方式实现webix的ajax请求session超时跳转. 具体的做法: 1.查看webix.js源码发现webix.ajax只有请求前的监听函数 "onBeforeAjax", 要做到获取返回状态跳转登录页面必须要有个返回的监听函数,但是源码没有.所以我修改了下源码,加了个返回的监听

  • 详解springmvc控制登录用户session失效后跳转登录页面

    springmvc控制登录用户session失效后跳转登录页面,废话不多少了,具体如下: 第一步,配置 web.xml <session-config> <session-timeout>15</session-timeout> </session-config> 第二步,配置spring-mvc.xml <!-- Session失效拦截 --> <mvc:interceptors> <!-- 定义拦截器 --> <

随机推荐