SpringMVC入门及拦截器

  SSM最后一个框架springmvc,其实上手特别简单。但是我昨天看一个深入源码的视频,差点GG。其实以前学过很多东西,都忘了,不敢说学会,现在有了本书,看过一遍之后。多多少少记住一些,权当我会用了,不敢说精通。

  本周计划,今天把springmvc搞完,明天搭建一个SSM项目,by the way 其实我毕设就是SSM项目。周三复习Maven,周四复习Redis,周五开始做SSM+Redis整合。下周开搞SSH,最后学习SpringBoot。这个月的主要事情就是学习框架。

  springmvc的实际容器类是XmlWebApplicationContext。在web.xml文件中,如果我们使用idea的新建springmvc项目功能,会自动进行简单配置,非常聪明,我们一般需要进行字符过滤器CharacterEncoderingFilter的设置,启动参数context-param,来启动spring容器,spring容器是一个大的容器,包含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_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>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>encoder</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>encoder</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

  dispatcher-servlet.xml配置如下,也就是springmvc的配置,主要功能是

  • sao描控制器上的注解,把他们加入springmvc容器
  • <mvc:annotataion-driven/>启用默认的HandlerMapping,HandlerAdator,
  • <mvc:interceptors>配置拦截器
  • 配置视图解析器,这个功能更常用

<?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.houjun.controller"></context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

  applicationContext.xml配置,这个是spring容器,能做的是太多了,我这里只是启用注解

<?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"
       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">
        <context:component-scan base-package="com.houjun.pojo"></context:component-scan>
</beans>

  一个简单的控制器如下

package com.houjun.controller;

import com.houjun.pojo.Student;
import com.houjun.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.ConfigurableWebApplicationContext;
import org.springframework.web.context.WebApplicationContext;

import javax.servlet.http.HttpServletRequest;

/**
 * @Author: HouJun
 * @Date: 2019/11/8 15:21
 * @Description: com.houjun.controller
 * @version: 1.0
 */
@Controller
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private Student student;
    @Autowired
    private ApplicationContext applicationContext;
    @Autowired
   private ConfigurableWebApplicationContext configurableWebApplicationContext;
    @RequestMapping("/hello")
    public String hello() {
        System.out.println("自动注入"+student);
        System.out.println("className"+applicationContext.getClass().getName());
        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }
        System.out.println("--------------------------------------------------------------------------------------");
        System.out.println("className"+configurableWebApplicationContext.getClass().getName());
        String[] beanDefinitionNames1 = configurableWebApplicationContext.getBeanDefinitionNames();
        for (String s : beanDefinitionNames1) {
            System.out.println(s);
        }
        return "/success.jsp";
    }
}

  拦截器类,拦截器需要实现一个接口 HandlerInterceptorAdapter,可以有多个拦截器,拦截顺序以xml文件配置顺序为准,代码如下

package com.houjun.inerceptor;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

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

/**
 * @Author: HouJun
 * @Date: 2019/11/11 9:58
 * @Description: com.houjun.inerceptor
 * @version: 1.0
 */

public class UserInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("自定义拦截器1,进入控制器之前");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("自定义拦截器1,控制器之后,进入视图之前");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("自定义拦截器1,控制器之后,进入视图之后");
    }
}

  目录结构

  

有了这些东西,就能启动一个web项目了,需要注意的是,配置Project Stucture -->Libraries和Tomcat容器之时可能会有各种问题,不过慢慢来,一点一点就是知道配置这些的含义了。

原文地址:https://www.cnblogs.com/houj/p/11833878.html

时间: 2024-10-16 02:22:29

SpringMVC入门及拦截器的相关文章

&lt;SpringMvc&gt;入门七 拦截器

什么是拦截器 1.SpringMVC框架中的拦截器用于 对处理器 进行预处理和后处理的技术. 2.可以定义拦截器链,按照顺序执行. 3.拦截器和过滤器功能类似,区别在 拦截器 过滤器 过滤器是Servlet规范的一部分,任何框架都可以使用过滤技术. 而拦截器是SpringMVC框架独有的 过滤器配置了/*,可以拦截任何资源 拦截器只对controller中的方法进行拦截 4.拦截器也是AOP思想的一种实现方式 5.想要定义拦截器,需要实现HandlerInterceptor接口 怎么使用拦截器

【SpringMVC学习11】SpringMVC中的拦截器

Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. 1. springmvc拦截器的定义和配置 1.1 springmvc拦截器的定义 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: //测试拦截器1 public class HandlerInterceptor1 im

在SpringMVC中使用拦截器(interceptor)拦截CSRF攻击

关于什么是CSRF我这里就不多说了,以前转载的一篇文章(PS:https://www.zifangsky.cn/358.html)已经说得很清楚了.这里只是简单介绍如何在SpringMVC中使用拦截器拦截CSRF攻击.具体代码如下: (1)登录页面: <%@page import="java.security.SecureRandom"%> <%@ page language="java" contentType="text/html; 

SpringMVC学习(十二)——SpringMVC中的拦截器

SpringMVC学习(十二)--SpringMVC中的拦截器 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下SpringMVC中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. SpringMVC中拦截器的定义和配置 SpringMVC中拦截器的定义 在SpringMVC中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: public class Inter

SpringMVC(AbstractController,拦截器,注解)

1.Controller接口及其实现类 Controller是控制器/处理器接口,只有一个方法handleRequest,用于进行请求的功能处理(功能处理方法),处理完请求后返回ModelAndView对象(Model模型数据部分 和 View视图部分). 如果想直接在处理器/控制器里使用response向客户端写回数据,可以通过返回null来告诉DispatcherServlet我们已经写出响应了,不需要它进行视图解析 Spring默认提供了一些Controller接口的实现类以方便我们使用,

SpringMVC 自定义一个拦截器

自定义一个拦截器方法,实现HandlerInterceptor方法 public class FirstInterceptor implements HandlerInterceptor{ /** * 该方法在目标方法之前被调用. * 若返回值为 true, 则继续调用后续的拦截器和目标方法. * 若返回值为 false, 则不会再调用后续的拦截器和目标方法. * * 可以考虑做权限. 日志, 事务等. */ @Override public boolean preHandle(HttpServ

SpringMVC学习16-springmvc拦截器

1.定义拦截器 定义拦截器,实现HandlerInterceptor接口.接口中提供三个方法. public class HandlerInterceptor1 implements HandlerInterceptor { //进入 Handler方法之前执行 //用于身份认证.身份授权 //比如身份认证,如果认证不通过表示当前用户没有登陆,需要此方法拦截不再向下执行 @Override public boolean preHandle(HttpServletRequest request,

java SpringMVC Filter登录拦截器

SpringMVC框架是一个非常强大的java web框架,目前最主流的也是spring mvc的框架今天我们学习下springMVCd的登录拦截器Filter 首先呢,SpringMVC具有统一的入口DIspatcherServlet,所有请求都会通过DIspatcherServlet来进行处理 dispatcherServlet是前置控制器,配置在web.xml中,主要是用来拦截对应的请求,然后将请求根据对应的规则发送到Controller来进行处理 首先在web.xml中进行配置拦截请求

分享知识-快乐自己:SpringMVC 结合使用拦截器(判断是否用户是否已登陆)

基础拦截器操作: 拦截器是一种AOP操作实现,那么在AOP之中用户一定不需要去关注拦截器的存在,用户只需要按照自己已经习惯的处理方式进行代码的编写即可. 首先我们先创建一个自定义的拦截器: package integration.uitl; import integration.bean.MlqUser; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.hand