1、建立以下的包
2、在web.xml中配置控制器与字符UTF-8乱码
<?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_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<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>/*</url-pattern>
</filter-mapping>
</web-app>
3、在Logininterceptor中写拦截器preHandle
package com.ycz.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Logininterceptors implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("执行前");
HttpSession session=request.getSession();
//放行前:判断在什么时候放行
//登录页面也会放行
if(request.getRequestURI().contains("login")){
return true;
}
//说明我在提交登录
if (request.getRequestURI().contains("tologin")){
return true;
}
//第一次登录也是没有session的:
if(session.getAttribute("userInfo")!=null){
return true;
}
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
return false;
}
}
4、在applicationContext中配置context:scan 与 mvc注解驱动与静态资源过滤与视图解析器
与mvc:的拦截器
<?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.ycz.controller"/>
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/user/**"/>
<bean class="com.ycz.config.Logininterceptors"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
5、在index.jsp中写入两个a标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<p><a href="${pageContext.request.contextPath}/user/tologin">登录页面</a> </p>
<p><a href="${pageContext.request.contextPath}/user/toMain">首页</a> </p>
</body>
</html>
6、在login.jsp中写入两个文本框
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/login" method="post">
用户名: <input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="submit" value="登录">
</form>
</body>
</html>
7、在main.jsp中写入
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <p>首页</p> ${userInfo} <a href="${pageContext.request.contextPath}/user/removeUser">注销</a> </body> </html>
8、在LoginController中先写入index要跳转的命令
package com.ycz.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpSession; @Controller @RequestMapping("/user") public class LoginController { //登录的时候 @RequestMapping("/login") public String login(String username, String password, HttpSession session){ System.out.println(username+password); //使session一直有这个信息 session.setAttribute("userInfo",username); return "main"; } //index的跳转 @RequestMapping("tologin") public String tologin(){ return "login"; } @RequestMapping("/toMain") public String toMain(){ return "main"; } //注销用户 @RequestMapping("removeUser") public String removeUser(HttpSession session){ session.removeAttribute("userInfo"); return "login"; } }
9、运行
点击首页时,会给拦截器拦截,然后跳转到login页面
登录之后
再返回到开始的index页面,再点击“首页”时,直接会进入main中,不在经过login。
当再次点击注销时,会跳转到login页面,此时session也会remove掉