SpringMVC高级技术

作者: 団长大人 | 来源:发表于2019-03-06 13:07 被阅读5次
  1. 其他的SpringMVC配置代替方案

    1. 自定义DispacherServlet

    2. 添加其他的Servlet和Filter

实现WebApplicationInitializer接口,就可以实现往里面注册一个新的Servlet

这里的MyServlet是要继承自Servlet这个类

926bf466ad18d982c7b0f76ff2eedde9.png

Filter同理

d6644727450c432c1f40ebc315739c2d.png

如果只是注册Filter,并且这个Filter只会映射在DispatcherServlet上的话,就可以在实现AbstractAnnotationConfigDispatcherServletInitializer的类里重载getServletFilters方法,在里面返回包含你的Filter的Filter数组。

  1. 处理multipart形式的数据
    multipart是将表单分成拆分成多个部分,每个部分对应一个输入域

    1. 配置multipart解析器

DispatcherServlet并没有解析multipart的功能,只有实现了MultipartResolver的类才能解析Multipart。我们现在有两种方法来解析mulitpart请求

  • CommonsMultipartResolver

  • StandardServletMultipartResolver

在Spring3.1以上使用第二种会是比较好的选择。(暂时搁置,文件处理用到了再看)

  1. 处理异常

无论在什么时候,Servlet请求的输出都是一个Servlet响应。也就是说如果出现了异常,异常也是Servlet响应

特定的Servlet异常将会自动映射为HTTP错误码

异常上可以天添加@ResponseStatus注解,可以将其映射为一个HTTP状态码

方法上可以添加@ExceptionHandler注解,来处理异常

  1. 处理器默认把其他的没有定义的异常抛出的错误码定义为500,我们可以通过在一个异常类上定义@ResponseStatus(value=”HttpStatus.其中一个状态”
    reason=”错误说明”)来使得把这个java异常映射到你指定的地方
f72e72eeef1d42858b57d35a14e6f9ab.png

在Controller里的方法改为

39c2009c6174782d75827e22ccdf9ea1.png

这样在寻找用户失败的时候就会报出404而不是500

  1. 处理异常的方法

第一种方法就是使用try
catch来捕获到这个异常,再着手处理这个异常。但是我们希望每个映射方法都可以只用专注于处理它自己的模块

所以,我们需要用到@ExceptionHandler(异常类的类对象)注解,在后面加上专门处理异常的方法,把有这种异常的情况映射到我们写好的页面上去


ef344bbd54b113b7da245ddb57fd9210.png
  1. 在控制器里面添加通知

如果不同的控制器会抛出相同的问题,那么我们就会在控制器里定义相同的处理器。但这样很不优雅。在Spring3.2之后我们只有使用控制器通知。凡是带有@ControllerAdvice注解的类,都会包含下面的方法

  • @ExceptionHander注解标注的方法

  • @InitBinder注解标注的方法

  • @ModelAttribute注解标注的方法

  • @ControllerAdvice已经是一个组件,使用它会被组件扫描自动获取

4e798905966f3483154616eafcf022fd.png

这样,无论哪个Controller抛出了这个异常,都会被他检测并处理

  1. 跨重定向请求传递数据

对于请求转发(forward)来说,请求只是被转发了,请求中的参数任然存在。但是对于重定向(redirect)来说,之前的请求早就消亡了,浏览器会重新发送一次请求。所以在新的请求中,没有任何的模型数据,只能从新计算。所以这一套方法是用来使用请求转发的时候,任然可以携带数据

  1. 通过URL模板进行重定向

  2. 使用flash属性

暂时忽略

相关文章

网友评论

    本文标题:SpringMVC高级技术

    本文链接:https://www.haomeiwen.com/subject/iietpqtx.html