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