实现springmvc中的拦截器Interceptor

1.开发所需的工具是idea
2.首先我们导入所需要的jar包

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0-b01</version>
</dependency>

3.因为这个不是maven所创建的项目,所以要在将所需的jar包加入到lib文件加中,lib文件自己创建,加入所需要的jar包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
4.准备工作都做完以后,开始配置web.xml文件和springmvc文件
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_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:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

5.springmvc.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:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!--    扫描注解的包-->
    <context:component-scan base-package="com.zhou.controller"/>
<!--    静态资源的过滤-->
    <mvc:default-servlet-handler/>
<!--    驱动器的加载-->
    <mvc:annotation-driven/>
<!--    视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
<!--    springmvc的拦截器interceptor-->
    <mvc:interceptors>
<!--           <mvc:interceptor>-->
<!--               <mvc:mapping path="/**"/>-->
<!--               -->
<!--           </mvc:interceptor>-->
        <bean class="com.zhou.controller.Interceptor"/>
    </mvc:interceptors>
</beans>

6.编写我们的实体类User

public class User {
    private String name;
    private String pwd;
}
set方法和get方法这里就省略了,按住Alt+Insert选择Getter和Setter即可

7.在WEB-INF中建立一个文件夹jsp,在jsp文件夹中新建两个jsp页面login.jsp和main.jsp(名字可以自己定义)
在login.jsp登陆页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
<form action="${pageContext.request.contextPath}/login" method="post">
    用户名: <input name="name" type="text"><br>
    密码:<input name="pwd" type="text"><br>
    <input type="submit" value="submit">
</form>
</body>
</html>

在main.jsp登陆成功页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${sessionScope.username.name}
${sessionScope.username.pwd}
</body>
</html>

8.前端页面完成以后就开始着手写我们的控制层(controller),新建一个UserController.java
我们请求了两个value=“login”,但是要注意的是是两种不同的提交方式,一种是post方式,一种是get方式,method = RequestMethod.POST、method = RequestMethod.GET这两种是比较老的一种写法,现在一般直接将 @RequestMapping换成@GetMapping、@PostMapping即可

package com.zhou.controller;

import com.zhou.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpSession;
@Controller
public class UserController {
    @RequestMapping(value = "/login",method = RequestMethod.POST)
    public String login(User user, HttpSession session, Model model){
        String userName = user.getName();
        String password = user.getPwd();
        if(userName.equals("zhou")&&password.equals("1")){
            session.setAttribute("username",user);
            return "redirect:/main";
        }
        model.addAttribute("msg","用户名或者密码错误!");
        return "login";
    }
    @RequestMapping(value ="main")
    public String main(){
        return "main";
    }
    @RequestMapping("/loginout")
    public String loginout(){
        return "index.jsp";
    }
    @RequestMapping(value = "/login",method = RequestMethod.GET)
    public String login(){
        return "login";
    }
}

9.控制层完成以后就编写我们的核心了,Interceptor(拦截器),新创建一个类,并且实现HandlerInterceptor,里面的方法,可以按住Alt+Insert,选择Override and Methods实现里面的三个方法

package com.zhou.controller;

import com.zhou.pojo.User;
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 Interceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取登陆页面的URL
        String requestURI = request.getRequestURI();
        /*这里有两种写法:
         1.  if(requestURI.contains("login")){
            return true;
        2. if(requestURI.indexOf("login")>=0){
            return true;
        }
        */
//        if(requestURI.indexOf("login")>=0){
//            return true;
//        }
        //如果过的url包含了"login",则是返回true,让他继续向下执行
        if(requestURI.contains("login")){
            return true;
        }
        //通过request对象里面的方法getSession获取session
        HttpSession session = request.getSession();
        //通过session获取UserController里面封装在session中的值”username“
        User user1 = (User) session.getAttribute("username");
        //如果获取的user1不为空,则返回true,继续向下执行
        if(user1!=null){
            return true;
        }
        request.setAttribute("msg","还没有登陆哦!");
        //通过转发(forward)可以携带数据给前端
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request,response);
        return false;
    }

    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {

    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {

    }
}
返回true则是让它向下执行
返回flase则是终止程序的执行

10.整个项目的目录
在这里插入图片描述

11.到这里就已经结束我们的代码之旅了
下面我们启动tomcat并且输入http://localhost:8080/springMVC_03_Interceptor_war_exploded/login
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
12.大家可以去尝试一下,祝大家一帆风顺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_46855885

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值