SpringMVC学习

一、SpringMVC框架介绍

简单介绍

Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称( spring-webmvc ),但它通常被称为“Spring MVC”。

有什么作用?

最显著、最主要的其实就是SpringMVC简化了在原来ServletAPI开发下的请求和响应参数。

框架工作流程

文字描述:(各组件工作)

DispatcherServlet:处理全部请求并响应

handlerMapping:缓存handler方法和地址(就是记录方法和方法地址的)

handlerAdapter:负责请求/相应简化的

视图解析器:负责查找视图页面

快速体验

二、SpringMVC接收数据

总结:

接收参数
    1.路径设置
        @RequestMapping(value="地址",method="请求方式")   类|方法
        @GetMapping /@PostMapping  方法
    2.接收参数【重点】
        param(参数)
        举例:http://localhost:8080/ssm?key=value&key=value...
            直接接收 handler(类型 形参名)形参名 = 请求参数名
            eg: 前端请求: http://localhost:8080/param/value?name=xx&age=18
            后端定义: public String setupForm(String name,int age)
            
            注解指定 handler(@RequestParam(name="请求 参数名",required=true,defaultValue="默认值”))
            一名多值 handler(@RequestParam List key)
            实体接收 handler(实体 对象)对象的属性名 -请求参数名
        路径参数
        举例:http://localhost:8080/ssm/users/profile
            设置动态路径和标识 /{key}/info/{key}
            接收路径 handler(@PathVariable(动态路径key)类型 形参名)
        json参数
            数据接收 handler(@RequestBody 实体类 对象)
            准备工作:
                导入jackson依赖
                @EnableWebMvc[加入handlerMapping 加入handlerAdapter 给handlerAdapter配置json处理器]
    3.cookie接收
handler(@CookieValue("cookie的名字”))
    4.请求头接收
handler(@RequestHeader("cookie的名字"))
    5.原生api获取
handler(httpServletRequest,response,session)
ServletContext->ioc->全局变量 @Autowired
    6.共享域获取
原生api方式即可

三、SpringMVC响应数据

无非就是返回json、页面跳转

在前后端分离项目中,页面跳转更多是由前端路由和js实现,因此,更为重要和常用的是json进行数据传输

总结: 请求数据接收,我们都是通过handler的形参列表

前端数据响应,我们都是通过handler的return关键字快速处理!

springmvc简化了参数接收和响应!

四、SpringMVC的全局异常处理机制

一般处理异常有两种方式:

  1. 编程式异常处理:显式的在代码中使用try-catch块进行代码的捕捉和处理

  2. 声明式异常处理:将处理异常的逻辑和业务逻辑分离,通过配置等方式进行统一管理、处理(好处:可以统一项目处理异常的思路)

下面就说说声明式异常处理:

  1. 声明异常处理控制器类

    异常处理控制类,统一定义异常处理handler方法!

/**
 * projectName: com.atguigu.execptionhandler
 * 
 * description: 全局异常处理器,内部可以定义异常处理Handler!
 */
​
/**
 * @RestControllerAdvice = @ControllerAdvice + @ResponseBody
 * @ControllerAdvice 代表当前类的异常处理controller! 
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
​
  
}
  1. 声明异常处理hander方法

    异常处理handler方法和普通的handler方法参数接收和响应都一致!

    只不过异常处理handler方法要映射异常,发生对应的异常会调用!

    普通的handler方法要使用@RequestMapping注解映射路径,发生对应的路径调用!

/**
 * 异常处理handler 
 * @ExceptionHandler(HttpMessageNotReadableException.class) 
 * 该注解标记异常处理Handler,并且指定发生异常调用该方法!
 * 
 * 
 * @param e 获取异常对象!
 * @return 返回handler处理结果!
 */
@ExceptionHandler(HttpMessageNotReadableException.class)
public Object handlerJsonDateException(HttpMessageNotReadableException e){
    
    return null;
}
​
/**
 * 当发生空指针异常会触发此方法!
 * @param e
 * @return
 */
@ExceptionHandler(NullPointerException.class)
public Object handlerNullException(NullPointerException e){
​
    return null;
}
​
/**
 * 所有异常都会触发此方法!但是如果有具体的异常处理Handler! 
 * 具体异常处理Handler优先级更高!
 * 例如: 发生NullPointerException异常!
 *       会触发handlerNullException方法,不会触发handlerException方法!
 * @param e
 * @return
 */
@ExceptionHandler(Exception.class)
public Object handlerException(Exception e){
​
    return null;
}

总之,就是要么在类上定义一个异常处理器;要么就注解声明处理异常的方法,可以对异常的情况的捕捉和处理更加精细化

  1. 配置文件扫描控制器类配置

    确保异常处理控制类被扫描

 <!-- 扫描controller对应的包,将handler加入到ioc-->
 @ComponentScan(basePackages = {"com.atguigu.controller",
 "com.atguigu.exceptionhandler"})

*五、拦截器

在Spring MVC中使用拦截器(Interceptor)通常包括以下步骤:

  1. 定义拦截器: 创建一个实现了 HandlerInterceptor 接口的类,并实现其方法,如 preHandlepostHandleafterCompletion

    public class MyInterceptor implements HandlerInterceptor {
    ​
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 在请求处理之前执行的操作
            return true; // 返回true继续流程,返回false中断请求
        }
    ​
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            // 在请求处理之后,视图渲染之前执行的操作
        }
    ​
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            // 请求完成后执行清理操作
        }
    }

  2. 注册拦截器: 在Spring MVC的配置类中注册拦截器。如果您使用的是Java配置,可以在配置类中添加 WebMvcConfigurer 接口的实现;如果使用XML配置,则在 <mvc:interceptors> 元素中注册。

    Java配置示例:

    @Configuration
    @EnableWebMvc
    public class WebConfig implements WebMvcConfigurer {
    ​
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor())
                    .addPathPatterns("/**")  // 拦截所有请求
                    .excludePathPatterns("/ignore", "/css/**", "/js/**");  // 排除某些路径
        }
    }

    XML配置示例:

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/ignore"/>
            <mvc:exclude-mapping path="/css/**"/>
            <mvc:exclude-mapping path="/js/**"/>
            <bean class="com.example.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

  3. 配置拦截器顺序(可选): 如果需要,可以为拦截器设置顺序,这将决定它们执行的顺序。

    registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").order(1);
    或者使用注解
        @Order(数字)
  4. 使用拦截器的注解(可选): 在Spring MVC中,您还可以使用 @Interceptor 注解直接在Spring配置中声明拦截器。

    @Interceptor("/**")
    public class MyInterceptor extends HandlerInterceptorAdapter {
        // 实现必要的方法
    }
  5. 配置Spring MVC: 确保您的Spring MVC配置是正确的,并且已经启用了Spring MVC的自动配置(如果您使用的是Spring Boot,通常会自动配置)。

  6. 测试拦截器: 启动应用程序并测试拦截器是否按预期工作,检查日志和拦截器方法的执行情况。

  7. 调整拦截器逻辑(如果需要): 根据测试结果和应用程序需求,调整拦截器的逻辑。

通过这些步骤,您可以在Spring MVC应用程序中使用拦截器来添加或修改请求处理流程。拦截器可以用于日志记录、权限检查、事务管理等多种用途。

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值