SpringMVC学习笔记22-1-29

SpringMvc

1-SpringMVC简介

1.1-是什么

一个轻量级的MVC框架

1.2-为什么

  • 轻量,简单
  • 高效,基于响应
  • 兼容Spring
  • 用的人多

2-建立一个SpringMVC的流程

2.1-新建maven项目并添加web 框架支持

2.2-添加依赖项

<dependencies>
    <!--测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!--日志-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <!--servlet-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!--jsp-->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>jsp-api</artifactId>
        <version>6.0.14</version>
    </dependency>
    <!--jstl-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!--springMVC-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.1.10.RELEASE</version>
    </dependency>
</dependencies>

2.3-配置web.xml , 注册DispatcherServlet


<?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">

    <!--1.注册DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--启动级别-1-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!--/ 匹配所有的请求;(不包括.jsp)-->
    <!--/* 匹配所有的请求;(包括.jsp)-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

2.4-编写SpringMVC 的 配置文件springmvc-servlet.xml

类型是spring配置文档,是在容器里注册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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--添加 处理映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!--添加 处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    <!--添加 视图解析器-->
    <!--视图解析器:DispatcherServlet给他的ModelAndView-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

2.5-编写controller,实现controller接口,并注册

实现

public class firstcontroller implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv =new ModelAndView();
        mv.setViewName("hello");//拼接之后是  WEB-INF/jsp/hello.jsp
        mv.addObject("msg","hahaha");
        return mv;
    }
}

注册

<!--Handler-->
<bean id="/hello" class="com.sunspot.controller.firstcontroller"/>

2.6编写jsp

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

2.7-测试

2.8-问题

  • 404:需要在项目结构中添加lib文件夹,并导入全部依赖

  • 404:是否注册了controller?

  • 工件部署失败:web.xml不能有先导空行

3-使用注解开发

使用springMVC必须配置的三大件:

处理器映射器、处理器适配器、视图解析器

通常,我们只需要手动配置视图解析器,而处理器映射器处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置

3.1-web.xml

无变化

3.2-springmvc-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
                           https://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc
                           https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.sunspot.controller"/>
    <!-- 让Spring MVC不处理静态资源 -->
    <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>

</beans>

3.3-controller

@Controller注解表示它是一个controller(这是spring里3个等价于component的注解之一)

@RequestMapping("/hello")意为/hello路径会对应这个controller(不加/似乎也可以)

return "hello"配合视图解析器定位到WEB-INF/jsp/hello.jsp

Model model在model中设置参数

@Controller
public class helloController {
    @RequestMapping("hello")
    public String hello(Model model){
        model.addAttribute("msg","annotation");
        return "hello";
    }
}

4-参数处理

你的函数是可以加上httpRequest和HttpResponse参数的

这太低级了,有没有更高级的?

有,你可以直接在参数中写name,password等等

对于路径参数,就是xxx/{a}/xxx,可以使用@RequestMapping("/hello/{a}/{b}")获取映射,@PathVariable声明你要接受的参数

对于查询字符串,就是xxx?id=xxx这种,可以使用@RequestParam声明要接受的参数

@Controller
public class RestFulController {
    //http://localhost:8080/RestFul/1/2
    @GetMapping(value="RestFul/{a}/{b}")
    public String fun1(@PathVariable int a, @PathVariable String b, Model model){
        model.addAttribute("msg","PathVariable"+a+b);
        return "hello";
    }
    //http://localhost:8080/RestFul?a=11&aa=111
    @GetMapping(value="RestFul")
    public String fun2(@RequestParam("a") int a, @RequestParam("aa") String b, Model model){
        model.addAttribute("msg","RequestParam"+a+b);
        return "hello";
    }
}

5-RestFul风格

就是把xxx/xxx?key1=value1&key2=value2

转化为xxx/xxx/value1/value2

方法是使用路径参数

6-处理转发与重定向

重定向:return “redirect:全路径”

7-filter处理乱码问题

过滤器:继承过滤器接口,在web.xml中配置

springMVC自带编码过滤器

不加几乎必定GG

在web.xml加入如下内容

<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>

8-JSON入门

8.1-什么是 JSON ?

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
  • JSON 具有自我描述性,更易理解

8.2-与 XML 相同之处

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

8.3-与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

8.4使用json开发

原理:返回json数据,交给前端

mvc部分:使用@RestController注解声明一个只返回字符串的类,或者使用@ResponseBody注解声明一个只返回字符串的方法

json解析库部分:使用jackson或者fastjson库。

最佳实践:往往使用工具类封装一个自动转换的工具


8.5-jackson的使用

依赖

<!--jackson-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.1</version>
</dependency>

controller

@Controller
public class jsonController {
    @RequestMapping("/j1")
    @ResponseBody
    public String json1() throws JsonProcessingException {
        User user1 = new User("name1","id1",1);
        User user2 = new User("name2","id2",3);
        List<User> users=new ArrayList<>();
        users.add(user1);
        users.add(user2);
        return new ObjectMapper().writeValueAsString(users);
    }
}

结果

[{"name":"name1","id":"id1","age":1},{"name":"name2","id":"id2","age":3}]

乱码问题

json可能存在乱码问题,即便设置了过滤器也一样,这时需要在springmvc-servlet.xmlmvc:annotation-driven更改为:

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8"/>
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                    <property name="failOnEmptyBeans" value="false"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

8.6-fastjson

依赖

<!--fastjson-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.54</version>
</dependency>

使用

@RequestMapping("/j2")
@ResponseBody
public String json2() throws JsonProcessingException {
    User user1 = new User("name1","id1",1);
    User user2 = new User("姓名2","id2",3);
    List<User> users=new ArrayList<>();
    users.add(user1);
    users.add(user2);
    return JSON.toJSONString(users);
}

9-整合ssm框架

整体思路:数据库整合使用mybatis,web部分使用springmvc,整体项目使用spring托管

需要做的事:

  • 导入依赖
  • 软件包分层
  • mybatis配置(扫描pojo的别名,注册dao的映射,数据库文件)
  • spring整合dao层——将mybatis的对象注册(datasource,SqlSessionFactory)
  • spring整合service层——将业务层的对象注册(一一注册或者扫描+注解)
  • spring整合mvc——编写web.xml(注册DispatcherServlet和encodingFilter)

9.1-依赖文件

pom.xml

<dependencies>
    <!--log4j日志-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <!--测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!--mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.25</version>
    </dependency>
    <!--c3p0数据库连接池-->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.5</version>
    </dependency>
    <!--servlet-->
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>servlet-api</artifactId>
        <version>6.0.14</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>jsp-api</artifactId>
        <version>6.0.14</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
    <dependency>
        <groupId>org.singledog</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.3</version>
    </dependency>
    <!--spring-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.15</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.15</version>
    </dependency>
</dependencies>

9.2-资源过滤

pom.xml

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

9.3-包基础架构

  • pojo-存放bean对象
  • dao-存放mapper接口以及映射xml
  • servlet-业务层,调用dao(类似静态代理)
  • controller-控制器层,调用servlet
  • utils-存放代码小工具
  • mybatis-config.xml-mybatis核心配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
       PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>
  • 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

9.4-mybatis编写

database.properties·

加jdbc.前缀, 不然报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://bj-cynosdbmysql-grp-2ny5n7eg.sql.tencentcdb.com:21436/MyBatisLearing?useSSL=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=
jdbc.password=

mybatis核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="com.sunspot.pojo"/>
    </typeAliases>
    <mappers>
        <mapper class="com.sunspot.dao.UserDao"/>
    </mappers>
</configuration>

pojo/bean编写

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    public int id;
    public String name;
    public String desc;
}

dao层编写

public interface UserDao {
    List<User> getUserList();
    User getUserById(@Param("id") int id);
    int insertUser(User user);
    int deleteUser(@Param("id") int id);
    int updateUser(User user);
}

mapper.xml

写完xml记得要注册

<?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.sunspot.dao.UserDao">
    <select id="getUserList" resultType="User">
        select * from wuziqi.User;
    </select>
    <select id="getUserById" resultType="User">
        select * from wuziqi.User where id = #{id};
    </select>
    <insert id="insertUser" parameterType="User">
        insert into wuziqi.User(name, `desc`)
        values (#{name},#{desc});
    </insert>
    <update id="updateUser" parameterType="User">
        update wuziqi.User
        set  name=#{name},desc=#{desc}
        where id=#{id};
    </update>
    <delete id="deleteUser">
        delete wuziqi.User where id=#{id};
    </delete>
</mapper>

service业务层编写

接口
public interface UserServlet {
    List<User> getUserList();
    User getUserById(int id);
    int insertUser(User user);
    int deleteUser(int id);
    int updateUser(User user);
}
实现
public class UserServletImpl implements UserServlet{

    private UserDao userDao;
    @Override
    public List<User> getUserList() {
        return userDao.getUserList();
    }

    @Override
    public User getUserById(int id) {
        return userDao.getUserById(id);
    }

    @Override
    public int insertUser(User user) {
        return userDao.insertUser(user);
    }

    @Override
    public int deleteUser(int id) {
        return userDao.deleteUser(id);
    }

    @Override
    public int updateUser(User user) {
        return userDao.updateUser(user);
    }
}

9.5-spring整合

spring-dao.xml整合mybatis/dao层

<?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
       https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 配置整合mybatis -->
    <!-- 1.关联数据库文件 -->
    <context:property-placeholder location="classpath:database.properties"/>

    <!-- 2.数据库连接池 -->
    <!--数据库连接池
        dbcp 半自动化操作 不能自动连接
        c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)
    -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 配置连接池属性 -->
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <!-- 关闭连接后不自动commit -->
        <property name="autoCommitOnClose" value="false"/>
        <!-- 获取连接超时时间 -->
        <property name="checkoutTimeout" value="10000"/>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>

    <!-- 3.配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置MyBatis全局配置文件:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 -->
    <!--解释 :https://www.cnblogs.com/jpfss/p/7799806.html-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!-- 给出需要扫描Dao接口包 -->
        <property name="basePackage" value="com.sunspot.dao"/>
    </bean>

</beans>

spring-service.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"
      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">

   <!-- 扫描service相关的bean -->
   <context:component-scan base-package="com.sunspot.servlet" />

   <!--进行了上边扫描操作,这里就可以用注解代替写xmluserServletImpl注入到IOC容器中-->
   <!--<bean id="userServletImpl" class="com.sunspot.servlet.UserServletImpl">
       <property name="userDao" ref="userDao"/>
   </bean>-->

   <!-- 配置事务管理器 -->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <!-- 注入数据库连接池 -->
       <property name="dataSource" ref="dataSource" />
   </bean>

</beans>

9.6-springMVC整合

web.xml

<!--DispatcherServlet-->
   <servlet>
       <servlet-name>DispatcherServlet</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>DispatcherServlet</servlet-name>
       <url-pattern>/</url-pattern>
   </servlet-mapping>

   <!--encodingFilter-->
   <filter>
       <filter-name>encodingFilter</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>encodingFilter</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>
   
   <!--Session过期时间-->
   <session-config>
       <session-timeout>15</session-timeout>
   </session-config>

applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <import resource="spring-dao.xml"/>
    <import resource="spring-service.xml"/>
    <import resource="spring-mvc.xml"/>
</beans>

10-拦截器

什么是拦截器

就是拦截请求,检查。比如不登录不能进入某些页面

web.xml一致

在spring配置里加入

<mvc:interceptors>
    <mvc:interceptor>
        <!--/** 全部-->
        <!--/xxx/**   xxx下全部,类似/xxx/yyy会被拦截-->
        <mvc:mapping path="/aaa"/>
        <bean class="com.sunspot.intercepter.firstIntercepter"/>
    </mvc:interceptor>
</mvc:interceptors>

拦截器需要实现HandlerInterceptor接口

有三个方法,对应三个阶段

public class firstIntercepter implements HandlerInterceptor {
    //请求前 true准入,false禁止
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return "msg".equals(request.getParameter("msg"));
    }
    // 执行后
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }
    // 清理工作
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

测试controller

@Controller
public class testCrontroller {
    @RequestMapping("/aaa")
    @ResponseBody
    public String test(){
        return "ok!!";
    }
    @RequestMapping("/bbb")
    public String gotoo(){
        return "aaa";
    }
}

拦截了aaa,假如msg不是msg会被拦截

访问bbb,会天跳转到aaa.jsp提交表单,之后跳转到aaa,只有当msg合规时才会提示ok

11-文件操作

暂略

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值