idea的话,貌似需要ultimate版本
我使用的是 2019.1
目录
创建项目
GroupId貌似可以随便
ArtifactId就写项目名
勾选两个Override
如果要换源的话
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- 中央仓库2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
</mirrors>
</settings>
进来会弹出这个,选Enable Auto-Import
加载完大概是这样的
修改pom.xml
properties添加成这样
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<!-- spring版本号 -->
<spring.version>4.2.6.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.6</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<!-- jackson包版本 -->
<jackson.version>2.5.0</jackson.version>
</properties>
dependencies添加成这样
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--spring单元测试依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- springMVC核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- AOP begin -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
<!-- AOP end -->
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--mybatis spring 插件 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- Mysql数据库驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
等加载完
创建结构
去掉Compact Middle Packages的勾
在src/main下创建main和resources目录
webapp下建static目录
static下建css,fonts,images,js
WEB-INF下建立views
右键java->Mark Directory as->Source Root
同理,将resources变为Resources Root
在java下创建名为com的package
在com下创建名为example的package
在example下创建controller,dao,entity,service
添加spring mvc框架
ctrl+alt+shift+s
打开Project Structure
点Modules,选中Spring,点-
apply,然后ok
右键项目,选Add Framework Support...
选Spring,Spring MVC
勾选Create empty spring-config.xml
会多两个文件
修改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
<!-- <servlet-mapping>-->
<!-- <servlet-name>default</servlet-name>-->
<!-- <url-pattern>*.css</url-pattern>-->
<!-- <url-pattern>/static/css/*</url-pattern>-->
<!-- </servlet-mapping>-->
<!-- <servlet-mapping>-->
<!-- <servlet-name>default</servlet-name>-->
<!-- <url-pattern>*.jpg</url-pattern>-->
<!-- <url-pattern>*.png</url-pattern>-->
<!-- <url-pattern>*.jpeg</url-pattern>-->
<!-- <url-pattern>/static/images/*</url-pattern>-->
<!-- </servlet-mapping>-->
<!-- <servlet-mapping>-->
<!-- <servlet-name>default</servlet-name>-->
<!-- <url-pattern>*.js</url-pattern>-->
<!-- <url-pattern>/static/js/*</url-pattern>-->
<!-- </servlet-mapping>-->
<!-- <servlet-mapping>-->
<!-- <servlet-name>default</servlet-name>-->
<!-- <url-pattern>*.otf</url-pattern>-->
<!-- <url-pattern>*.eot</url-pattern>-->
<!-- <url-pattern>*.tff</url-pattern>-->
<!-- <url-pattern>*.woff</url-pattern>-->
<!-- <url-pattern>*.woff2</url-pattern>-->
<!-- <url-pattern>/static/fonts/*</url-pattern>-->
<!-- </servlet-mapping>-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--配置编码过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<!--拦截所有请求-->
</filter-mapping>
</web-app>
修改dispatcher-servlet.xml
<context:component-scan base-package="com.example.dao,com.example.service,com.example.controller" />的com.example都要换成自己的包
<property name="prefix" value="/WEB-INF/views/"/>的views换成自己的目录
<?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/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<description>Spring Configuration</description>
<!-- 静态资源(js、image等)的访问 -->
<mvc:default-servlet-handler/>
<!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
<mvc:annotation-driven />
<!-- 开启组件自动扫描;使用Annotation自动注册Bean,解决事物失效问题:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解。
base-package 如果多个,用“,”分隔
下面这里要改 -->
<context:component-scan base-package="com.example.dao,com.example.service,com.example.controller" />
<!-- 静态资源访问 -->
<mvc:resources location="/static/images/" mapping="/static/images/**"/>
<mvc:resources location="/static/css/" mapping="/static/css/**"/>
<mvc:resources location="/static/js/" mapping="/static/js/**"/>
<mvc:resources location="/static/fonts/" mapping="/static/fonts/**"/>
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
<!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!--设置JSP文件的目录位置
下面这里要改-->
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
<mvc:annotation-driven />这一句说明启用自动扫描Spring注解
<context:component-scan base-package="com.example.dao,com.example.service,com.example.controller" />这句说明扫描的位置。defaultViewResolver这个bean主要是用来方便controller返回寻找jsp视图,定义了jsp目录位置是/WEB-INF/views/下面。
添加controller
在com.example.controller下创建IndexController.java
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
@RequestMapping("/")
public class IndexController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String login_Get(){
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login_Get_2(){
return "login";
}
@RequestMapping(value = "/welcome",method = RequestMethod.GET)
public String welcome(){
return "welcome";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("username") String username, @ModelAttribute("password") String password){
if("Nightmare4214".equals(username) && "p@ssw0rd".equals(password)){
return "welcome";
}
return "login";
}
}
添加页面
先删除index.jsp
在WEB-INF/views下创建login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="zh-CN">
<body>
<form method="post" action="login">
登录名:<label>
<input name='username' type="text" value="Nightmare4214"/>
</label><br/>
密码:<label>
<input name ='password' type="password" value="p@ssw0rd"/>
</label><br/>
<button type="submit" style="width: 70px; height: 20px;">确定</button>
</form>
</body>
</html>
在WEB-INF/view下创建welcome.jsp
<html>
<body>
<h2>Hello Nightmare4214</h2>
<img src="static/images/1.png">
</body>
</html>
配置tomcat
点右上角的Add Configuration->点+ ->Tomcat Server ->local
点configure,如果以前没配置过
Tomcat Home和Tomcat base directory换成你tomcat解压的地方
点Deployment->点+ ->springMVC:war exploded->ok
把 Application Context换成项目名
最后点Apply->ok
向images添加一张图片1.png
启动
输入Nightmare4214 和p@ssw0rd 来进入index
添加拦截器
在com.example下创建interceptor包
在interceptor下创建LoginInterceptor.java
package com.example.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
String uri = request.getRequestURI();
//System.out.println(uri); //得到的urlleisi/mini/,/mini/login
//UTL:除了login.jsp是可以公开访问的,其他的URL都进行拦截控制
if (uri.endsWith("/")||uri.endsWith("/login")) {
return true;
}
//获取session
HttpSession session = request.getSession();
String user = (String) session.getAttribute("USER_SESSION");
//判断session中是否有用户数据,如果有,则返回true,继续向下执行
if (user != null) {
return true;
}
//不符合条件的给出提示信息,并转发到登录页面
request.setAttribute("msg", "您还没有登录,请先登录!");
request.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(request, response);
return false;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
修改dispatcher-servlet.xml
<bean class="com.example.interceptor.LoginInterceptor"/>的com.example.interceptor.LoginInterceptor要改成自己的java文件
<context:component-scan base-package="com.example.dao,com.example.service,com.example.controller" />的com.example都要换成自己的包
<property name="prefix" value="/WEB-INF/views/"/>的views换成自己的目录
<?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/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<description>Spring Configuration</description>
<!-- 静态资源(js、image等)的访问 -->
<mvc:default-servlet-handler/>
<!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
<mvc:annotation-driven />
<!-- 开启组件自动扫描;使用Annotation自动注册Bean,解决事物失效问题:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解。
base-package 如果多个,用“,”分隔
下面这里要改 -->
<context:component-scan base-package="com.example.dao,com.example.service,com.example.controller" />
<!-- 静态资源访问 -->
<mvc:resources location="/static/images/" mapping="/static/images/**"/>
<mvc:resources location="/static/css/" mapping="/static/css/**"/>
<mvc:resources location="/static/js/" mapping="/static/js/**"/>
<mvc:resources location="/static/fonts/" mapping="/static/fonts/**"/>
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
<!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!--设置JSP文件的目录位置
下面这里要改-->
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--配置拦截器-->
<mvc:interceptors>
<!-- <bean class="cn.lzc.interceptor.CustomInterceptor"></bean>--><!--拦截所有请求-->
<!-- <mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/" /><<!–配置了mapping 这个 将不再起作用–>
<bean class="cn.lzc.interceptor.CustomInterceptor"></bean>
</mvc:interceptor>-->
<!--<mvc:interceptor>-->
<!--<mvc:mapping path="/hello" /><!–配置拦截hello结尾的–>-->
<!--<bean class="cn.lzc.interceptor.CustomInterceptor"/>-->
<!--</mvc:interceptor>-->
<!--登录拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!-- 下面这里要改 -->
<bean class="com.example.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
修改IndexController.java
添加了session
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
@RequestMapping("/")
public class IndexController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String login_Get(){
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login_Get_2(){
return "login";
}
@RequestMapping(value = "/welcome",method = RequestMethod.GET)
public String welcome(){
return "welcome";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("username") String username, @ModelAttribute("password") String password,
HttpServletRequest request, HttpServletResponse response){
if("Nightmare4214".equals(username) && "p@ssw0rd".equals(password)){
request.getSession().setAttribute("USER_SESSION",username);
return "welcome";
}
return "login";
}
}
运行,效果和之前一样
添加Mybits
建表语句
create database springtest;
use springtest;
create table users(
id int PRIMARY KEY AUTO_INCREMENT,
username varchar(20),
password varchar(50)
) auto_increment = 1;
insert into users(username,password) values('Nightmare4214','p@ssw0rd');
entity
在 com.example.entity下创建 Users.java
package com.example.entity;
import org.springframework.stereotype.Repository;
public class Users {
private Integer id;
private String username;
private String password;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = 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;}
}
数据库配置文件
在resources下创建jdbc.properties
jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/springtest
jdbc_username=root
jdbc_password=888888
修改 dispatcher-servlet.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/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<description>Spring Configuration</description>
<!-- 静态资源(js、image等)的访问 -->
<mvc:default-servlet-handler/>
<!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
<mvc:annotation-driven />
<!-- 开启组件自动扫描;使用Annotation自动注册Bean,解决事物失效问题:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解。
base-package 如果多个,用“,”分隔
下面这里要改 -->
<context:component-scan base-package="com.example.dao,com.example.service,com.example.controller" />
<!-- 静态资源访问 -->
<mvc:resources location="/static/images/" mapping="/static/images/**"/>
<mvc:resources location="/static/css/" mapping="/static/css/**"/>
<mvc:resources location="/static/js/" mapping="/static/js/**"/>
<mvc:resources location="/static/fonts/" mapping="/static/fonts/**"/>
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
<!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!--设置JSP文件的目录位置
下面这里要改-->
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 配置数据源 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<!--要是有多个配置文件,只需在这里继续添加即可 -->
</list>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc_driverClassName}</value>
</property>
<property name="url">
<value>${jdbc_url}</value>
</property>
<property name="username">
<value>${jdbc_username}</value>
</property>
<property name="password">
<value>${jdbc_password}</value>
</property>
</bean>
<!-- 配置Mybatis的文件 ,mapperLocations配置**Mapper.xml文件位置,configLocation配置mybatis-config文件位置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!--配置拦截器-->
<mvc:interceptors>
<!-- <bean class="cn.lzc.interceptor.CustomInterceptor"></bean>--><!--拦截所有请求-->
<!-- <mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/" /><<!–配置了mapping 这个 将不再起作用–>
<bean class="cn.lzc.interceptor.CustomInterceptor"></bean>
</mvc:interceptor>-->
<!--<mvc:interceptor>-->
<!--<mvc:mapping path="/hello" /><!–配置拦截hello结尾的–>-->
<!--<bean class="cn.lzc.interceptor.CustomInterceptor"/>-->
<!--</mvc:interceptor>-->
<!--登录拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<!-- 下面这里要改 -->
<bean class="com.example.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
mapper
在resources下创建mapper目录
mapper下创建UsersMapper.xml
其中<mapper namespace="com.example.mapper.UsersMapper">中的com.example 一定要换成自己的包
<resultMap id="BaseUsers" type="com.example .entity.Users">中的com.example 一定要换成自己的包
<?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">
<!-- 下面这里要改 -->
<mapper namespace="com.example.mapper.UsersMapper">
<!--设置domain类和数据库中表的字段一一对应,注意数据库字段和domain类中的字段名称不致,此处一定要!
下面这里要改-->
<resultMap id="BaseUsers" type="com.example.entity.Users">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
</resultMap>
<!-- 查询所有记录 -->
<select id="selectAllUsers" resultMap="BaseUsers">
SELECT * FROM users
</select>
<!-- 查询单个记录 -->
<select id="selectUsersByUsername" parameterType="java.lang.String" resultMap="BaseUsers">
SELECT * FROM users WHERE username=#{username}
</select>
</mapper>
dao
在com.example.dao下创建 UsersDao.java
package com.example.dao;
import com.example.entity.Users;
public interface UsersDao {
Users getUsersByUsername(String username);
}
在com.example.dao下创建名为impl的package
在com.example.dao.impl下创建UsersDaoImpl.java
其中com.example.mapper.UsersMapper.selectUsersByUsername
中的com.example一定要换成自己包名
package com.example.dao.impl;
import com.example.dao.UsersDao;
import com.example.entity.Users;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
@Repository
public class UsersDaoImpl extends SqlSessionDaoSupport implements UsersDao {
@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
@Override
public Users getUsersByUsername(String username){
//下面这里要修改
return this.getSqlSession().selectOne("com.example.mapper.UsersMapper.selectUsersByUsername", username);
}
}
service
在com.example.service下创建UsersService.java
package com.example.service;
import com.example.entity.Users;
public interface UsersService {
Users getUsersByUsername(String username);
}
在com.example.service下创建名为impl的package
在com.example.service.impl下创建UsersServiceImpl.java
package com.example.service.impl;
import com.example.dao.UsersDao;
import com.example.entity.Users;
import com.example.service.UsersService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UsersServiceImpl implements UsersService {
@Resource
private UsersDao usersDao;
@Override
public Users getUsersByUsername(String username){
return usersDao.getUsersByUsername(username);
}
}
controller
修改com.example.controller下的IndexController.java
package com.example.controller;
import com.example.entity.Users;
import com.example.service.UsersService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
@RequestMapping("/")
public class IndexController {
@Resource
private UsersService usersService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String login_Get(){
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login_Get_2(){
return "login";
}
@RequestMapping(value = "/welcome",method = RequestMethod.GET)
public String welcome(){
return "welcome";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("username") String username, @ModelAttribute("password") String password,
HttpServletRequest request, HttpServletResponse response){
String msg;
if("".equals(username)||"".equals(password)){
msg="账号或者密码不能为空";
}
else{
Users user = usersService.getUsersByUsername(username);
if(user != null && user.getPassword().equals(password)){
//将用户对象添加到Session中
request.getSession().setAttribute("USER_SESSION",username);
return "welcome";
}
msg="账号或者密码错误";
}
try {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//弹窗
out.printf("<script>alert('%s');history.back();</script>",msg);
//这句很关键
out.flush();
out.close();
}catch (IOException e) {
e.printStackTrace();
}
return "login";
}
}
启动
账号密码为空的时候
账号密码错误的时候
数据库与页面
修改welcome函数
package com.example.controller;
import com.example.entity.Users;
import com.example.service.UsersService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@Controller
@RequestMapping("/")
public class IndexController {
@Resource
private UsersService usersService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String login_Get(){
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login_Get_2(){
return "login";
}
@RequestMapping(value = "/welcome",method = RequestMethod.POST)
public ModelAndView welcome(HttpServletRequest request, HttpServletResponse response){
System.out.println("in");
//调用Service层进行数据查找
List<GoodsSeries> result=goodsSeriesService.getAllSeries();
ModelAndView modelAndView = new ModelAndView();
//将数据放到request中
modelAndView.addObject("goods_series", result);
//指定视图
modelAndView.setViewName("welcome");
return modelAndView;
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("username") String username, @ModelAttribute("password") String password,
HttpServletRequest request, HttpServletResponse response){
String msg;
if("".equals(username)||"".equals(password)){
msg="账号或者密码不能为空";
}
else{
Users user = usersService.getUsersByUsername(username);
if(user != null && user.getPassword().equals(password)){
//将用户对象添加到Session中
request.getSession().setAttribute("USER_SESSION",username);
return "welcome";
}
msg="账号或者密码错误";
}
try {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//弹窗
out.printf("<script>alert('%s');history.back();</script>",msg);
//这句很关键
out.flush();
out.close();
}catch (IOException e) {
e.printStackTrace();
}
return "login";
}
}
现在数据在goods_series中了
welcome.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>后台登录</title>
</head>
<body>
<h2>你好 ${USER_SESSION}</h2>
<img src="static/images/1.png">
<select id="goods_series" name="goods_series">
<option value="全部">全部</option>
<c:forEach var="series" items="${goods_series}">
<option value="${series.goods_series_id}">${series.goods_series_name}</option>
</c:forEach>
</select>
</body>
</html>
启动
参考资料
https://www.cnblogs.com/Jeffscnblog/p/8446380.html