Spring mvc + MyBatis+拦截器 实现简单的登陆实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Maybeno1314/article/details/82683495

 <一>  : src/main/sources中的xml文件编写:

1.applicationContext-login-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: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/mvc
        	   http://www.springframework.org/schema/mvc/spring-mvc.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd">
  
   

	<context:component-scan base-package="com.zzxt.spring.mvc.jurisdiction.action"></context:component-scan>
	 <mvc:annotation-driven />
	
	 <mvc:view-controller path="/login" view-name="/views/stu/login.jsp"/>	
		
	<mvc:interceptors>
	 		<mvc:interceptor>
	 			<mvc:mapping path="/login/loginInfoPost"/>
	 			<bean class="com.zzxt.spring.mvc.jurisdiction.interceptor.Interceptor"></bean>
	 		</mvc:interceptor>
	</mvc:interceptors>
	 	
	 	
</beans>

2.applicationContext-login.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"

xsi:schemaLocation="http://www.springframework.org/schema/beans
               http://www.springframework.org/schema/beans/spring-beans.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context.xsd
               http://www.springframework.org/schema/util
               http://www.springframework.org/schema/util/spring-util.xsd 
               http://www.springframework.org/schema/aop
               http://www.springframework.org/schema/aop/spring-aop.xsd ">
  
  
<context:component-scan base-package="com.zzxt.spring.mvc.jurisdiction.dao"></context:component-scan>
<context:component-scan base-package="com.zzxt.spring.mvc.jurisdiction.entity"></context:component-scan>
<context:component-scan base-package="com.zzxt.spring.mvc.jurisdiction.interceptor"></context:component-scan>
</beans>

3.sqlMapConfig实现数据库连接与sql语言的编写

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  
  
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 配置user.xml -->
  <mappers>
    <mapper resource="/user.xml"/>
  </mappers>
</configuration>

4.user.xml 实现dao中的数据库调用的方法, 需要配置到sqlMapConfig.xml中

<?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命令写在xml文件中-->
<mapper namespace="com.zzxt.spring.mvc.jurisdiction.dao.staffInfoDao">
	<select id="verifyStaffId" parameterType="String" resultType="String">
	select password,locked from t_sys_user where username = #{value}
	</select>
	<select id="userList" resultType="com.zzxt.spring.mvc.jurisdiction.entity.StaffInfo">
		select * from t_sys_user
	</select>
	<select id="deleteStaffInfo" parameterType="int">
		delete from t_sys_user where user_id = #{value}
	</select>
	</mapper>

 <二>pom文件的配置, 所需要配置文件jar包的加载

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zzxt</groupId>
	<artifactId>spring.mvc</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring.mvc Maven Webapp</name>
	<url>http://maven.apache.org</url>
	
	
	 <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
	
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring.version>5.0.7.RELEASE</spring.version>
	</properties>
 
	<dependencies>
		
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			
		</dependency>

		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.1</version>
		</dependency>


		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			
		</dependency>

		<dependency>
    	<groupId>net.minidev</groupId>
   	 	<artifactId>accessors-smart</artifactId>
   	 	<version>1.1</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.3</version>
		</dependency>

	
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			
		</dependency>
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<!-- <scope>test</scope> -->
		</dependency>
		
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
	
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.10</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			
			<scope>test</scope>
		</dependency>
		
	</dependencies>

	<build>
		<finalName>spring.mvc</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
		

	<repositories>
		<repository>
			<id>public</id>
			<name>aliyun nexus</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
		</repository>
	</repositories>

	<pluginRepositories>
		<pluginRepository>
			<id>public</id>
			<name>aliyun nexus</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
</project>

<三> login.jsp页面代码(我将css代码与html代码写在一个页面,因为没有配置拦截器对css,js,的拦截设置)

<%@ 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">

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="ctxPath" value="${pageContext.request.contextPath }"></c:set>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Login</title>
    <style type="text/css">
    	html{
    width: 100%;
    height: 100%;
    overflow: hidden;
    font-style: sans-serif;
}
body{
    width: 100%;
    height: 100%;
    font-family: 'Open Sans',sans-serif;
    margin: 0;
    background-color: #4A374A;
}
#login{
    position: absolute;
    top: 50%;
    left:50%;
    margin: -150px 0 0 -150px;
    width: 300px;
    height: 300px;
}
#login h1{
    color: #fff;
    text-shadow:0 0 10px;
    letter-spacing: 1px;
    text-align: center;
}
h1{
    font-size: 2em;
    margin: 0.67em 0;
}
input{
    width: 278px;
    height: 18px;
    margin-bottom: 10px;
    outline: none;
    padding: 10px;
    font-size: 13px;
    color: #fff;
    text-shadow:1px 1px 1px;
    border-top: 1px solid #312E3D;
    border-left: 1px solid #312E3D;
    border-right: 1px solid #312E3D;
    border-bottom: 1px solid #56536A;
    border-radius: 4px;
    background-color: #2D2D3F;
}
.but{
    width: 300px;
    min-height: 20px;
    display: block;
    background-color: #4a77d4;
    border: 1px solid #3762bc;
    color: #fff;
    padding: 9px 14px;
    font-size: 15px;
    line-height: normal;
    border-radius: 5px;
    margin: 0;
}
    </style>
   
</head>
<body>
    <div id="login">
        <h1>Login</h1>
        <form action="${ctxPath }/login/loginInfoPost" method="post" accept-charset="utf-8"onsubmit="document.charset='utf-8'">
            <input type="text" required="required" placeholder="用户名" name="u"></input>
            <input type="password" required="required" placeholder="密码" name="p"></input>
            <button class="but" type="submit">登录</button>
            <a href="${ctxPath }/views/stu/insert.jsp">****新员工注册****</a>
        </form>
    </div>
</body>
</html>

<四> java代码 :

1.Controller层

包:com.zzxt.spring.mvc.jurisdiction.action

类:LoginController.java

代码:

package com.zzxt.spring.mvc.jurisdiction.action;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.zzxt.spring.mvc.jurisdiction.dao.sqlSession;
import com.zzxt.spring.mvc.jurisdiction.dao.staffInfoDao;
import com.zzxt.spring.mvc.jurisdiction.entity.StaffInfo;

@Controller
@RequestMapping("/login")
public class LoginController {			
		//创建封装类sqlSession的对象
		sqlSession sqlOpen = new sqlSession();		
		@RequestMapping("/list")
		public String staffList(Map<String ,Object> map) {			
			System.out.println("员工列表");			
			//链接数据库
			SqlSession ss = sqlOpen.sqlConnect();			
			//获得方法类对象
			staffInfoDao si = ss.getMapper(staffInfoDao.class);		
			//staffInfoDao si = ss.selectList(staffInfoDao.class);	
			//将员工信息存储在链表中
			List<StaffInfo> listStaff = si.userList();	
			//System.out.println("==si.userList()=="+si.userList());
			//System.out.println("====list====" + listStaff);
			//利用约定大于协议,进行数据项jsp页面传递
			map.put("listStaff",listStaff);		
			//关闭数据库
			ss.close();
			//跳转到staff列表页面
			return "/views/stu/list.jsp";
		}
	
		@RequestMapping(value="/loginInfoPost",method=RequestMethod.POST)
		public String loginInfoPost() {
			System.out.println("============ 运行到提交页面");
			//方法跳转
			return "redirect:list";
		}
		
//		@RequestMapping("/putList")
//		public String putList() {
//			
//			return "/views/stu/list.jsp";
//		}
		
		@RequestMapping("/delete/{user_id}")
		public String delete(@PathVariable("user_id") int user_id) {
			//链接数据库
			SqlSession ss = sqlOpen.sqlConnect();			
			//获得方法类对象
			staffInfoDao si = ss.getMapper(staffInfoDao.class);	
			System.out.println("====si===" + si);
			si.deleteStaffInfo(user_id);
			
			ss.close();
			return "redirect:/list";
		}

}

 2. dao层

包:com.zzxt.spring.mvc.jurisdiction.dao

类:sqlSession.java

package com.zzxt.spring.mvc.jurisdiction.dao;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class sqlSession {
	public SqlSession sqlConnect() {
		
		String res = "sqlMapConfig.xml";
		System.out.println("==res===" + res);
		InputStream inputStream = null;
		
		try {
			inputStream = Resources.getResourceAsStream(res);
		}catch(Exception e) {
			e.printStackTrace();
		}
		
		//用SqlSessionFactoryBuilder()中的build的方法创建一个创建SqlSession的SqlSessionFactory工厂
		
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
		//工厂方法创建session
		SqlSession ss = sqlSessionFactory.openSession();
		return ss;
	}
}

接口:staffInfoDao.java

package com.zzxt.spring.mvc.jurisdiction.dao;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.zzxt.spring.mvc.jurisdiction.entity.StaffInfo;

@Repository
public interface staffInfoDao {
	//接口中的方法在user.xml文件中实现
	public String verifyStaffId(String userName);
	public List<StaffInfo> userList();
	public StaffInfo upadateStaffInfo(int user_id);
	public void deleteStaffInfo(int user_id);
}

3.entity

包:com.zzxt.spring.mvc.jurisdiction.entity

类:StaffInfo.java         //用户信息的get,set方法

package com.zzxt.spring.mvc.jurisdiction.entity;

import org.springframework.stereotype.Component;

@Component
public class StaffInfo {
	
	//用户编号
	private String user_id;
	//用户名
	private String username;
	//密码
	private String password;
	//盐
	private String salt;
	//真实姓名
	private String realname;
	//头像,以地址的形式上传
	private String avatar;
	//手机号
	private String phone;
	private String email;
	private int sex;
	//状态,0正常,1,锁
	private int locked;
	//创建时间
	private int ctime;

	public String getUser_id() {
		return user_id;
	}
	public void setUser_id(String user_id) {
		this.user_id = user_id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getSalt() {
		return salt;
	}
	public void setSalt(String salt) {
		this.salt = salt;
	}
	public String getRealname() {
		return realname;
	}
	public void setRealname(String realname) {
		this.realname = realname;
	}
	public String getAvatar() {
		return avatar;
	}
	public void setAvatar(String avatar) {
		this.avatar = avatar;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public int getSex() {
		return sex;
	}
	public void setSex(int sex) {
		this.sex = sex;
	}
	public int getLocked() {
		return locked;
	}
	public void setLocked(int locked) {
		this.locked = locked;
	}
	public int getCtime() {
		return ctime;
	}
	public void setCtime(int ctime) {
		this.ctime = ctime;
	}
	
}

4.interceptor 拦截器

包:com.zzxt.spring.mvc.jurisdiction.interceptor

类:Interceptor.java

package com.zzxt.spring.mvc.jurisdiction.interceptor;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.session.SqlSession;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.zzxt.spring.mvc.jurisdiction.dao.sqlSession;
import com.zzxt.spring.mvc.jurisdiction.dao.staffInfoDao;

@Service
public class Interceptor implements HandlerInterceptor{
	
	sqlSession sqlOpen = new sqlSession();
	
	
	//拦截登陆
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
			
			System.out.println("====拦截器中=====");
			String staffName = request.getParameter("u");
			String passwd = request.getParameter("p");
			System.out.println("========passwd=======" + passwd);
			SqlSession ss = sqlOpen.sqlConnect();
			String realPasswd = null;
			staffInfoDao si = ss.getMapper(	staffInfoDao.class);
			try {
				realPasswd = si.verifyStaffId(staffName);				
			}catch(Exception e) {
				e.printStackTrace();
			}
			System.out.println("realPasswd-----" + realPasswd);
			ss.close();
			
			//System.out.println("========="+ passwd.equals(realPasswd));
			
			//注意此处的先后顺序,防止出现空指针异常
			if(passwd.equals(realPasswd)) {
				 //request.getRequestDispatcher("/login/list").forward(request, response);
				 return true;
			}else{
				request.getRequestDispatcher("/views/stu/login.jsp").forward(request, response);
				return false;	
			}
			
	}
	
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable ModelAndView modelAndView) throws Exception {
		//response.sendRedirect("/views/stu/list.jsp");
		System.out.println("postHandle");
	}
	
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
			@Nullable Exception ex) throws Exception {
		System.out.println("afterHandle");
	}
}

猜你喜欢

转载自blog.csdn.net/Maybeno1314/article/details/82683495