使用mvc模式读取服务器上的文件,SpringMVC笔记

c4468b3f4df77e96b0a416fa2a870fba.png

SpringMVC笔记

SpringMVC概述

Spring MVC属于SpringFrameWork的后续产品

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块

使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,

可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架

Spring web mvc和Struts2都属于表现层的框架

流程图

6e867670674d88c69acc603c2ba8ff48.png

入门程序

创建 maven web工程

e346579cf0a8deb59a8648f8a7c6f2ca.png

导入jar包

53219fa252fa5aeaa71b63c9fe818bba.png

junit

junit

4.11

test

com.mchange

c3p0

0.9.5.2

org.aopalliance

com.springsource.org.aopalliance

1.0.0

commons-dbcp

commons-dbcp

1.4

commons-fileupload

commons-fileupload

1.3.3

commons-io

commons-io

2.4

commons-logging

commons-logging

1.2

commons-pool

commons-pool

1.6

log4j

log4j

1.2.17

org.aspectj

com.springsource.org.aspectj.weaver

1.6.4.RELEASE

org.springframework

spring-aop

5.2.5.RELEASE

org.springframework

spring-aspects

5.2.2.RELEASE

org.springframework

spring-beans

5.2.5.RELEASE

org.springframework

spring-context

5.2.5.RELEASE

org.springframework

spring-core

5.2.5.RELEASE

org.springframework

spring-expression

5.2.5.RELEASE

org.springframework

spring-jdbc

5.2.5.RELEASE

org.springframework

spring-test

5.2.3.RELEASE

test

org.springframework

spring-test

5.2.3.RELEASE

test

org.springframework

spring-web

5.2.5.RELEASE

org.springframework

spring-webmvc

5.2.5.RELEASE

在resources目录添加配置文件 SpringMVC.xml

0281cd6dd815558a54c9e8d1c17c955f.png

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"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

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

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

配置前端控制器

在web.xml当中配置前端控制器

3fc37a551a29e943727a58b70478f7cd.png

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

mySpringMVC

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

1

mySpringMVC

*.action

创建控制器

e7726bf930f9143d07cb24e08fb1c6e1.png

/**

* @author joker_dj

* @create 2020-04-21日 22:15

*/

@Controller

public class FirstController {

@RequestMapping("/first.action")

public ModelAndView show(){

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("name","joker_dj");

modelAndView.setViewName("/first.jsp");

return modelAndView;

}

}

在springmvc.xml添加注解扫描

a3b4038c5d1dc94794b014a5d2f7f16a.png

创建jsp文件

897de94edcbcc33e03ab194c6a31ef20.png

Title

跳转 点击

controller的数据:${name}

配置Tomcat

a7e2251f56100eaf3313ff6ba49e7862.png

运行启动

5aa42d555b43186cd5399c86a1ad4f08.png

点击超链接

96cd9bcc678c86eb0f3eb7b323be94a0.png

详细执行流程

架构流程

用户发送请求至前端控制器DispatcherServlet

DispatcherServlet收到请求调用HandlerMapping处理器映射器。

处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

执行处理器(Controller,也叫后端控制器)。

Controller执行完成返回ModelAndView

HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

DispatcherServlet将ModelAndView传给ViewReslover视图解析器

ViewReslover解析后返回具体View

DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

DispatcherServlet响应用户

流程图

8ded4708c303739d41822495d3239b39.png

组件说明

DispatcherServlet

前端控制器

用户请求到达前端控制器,它就相当于mvc模式中的C dispatcherServlet是整个流程控制的中心由它调用其它组件处理用户的请求 dispatcherServlet的存在降低了组件之间的耦合性

HandlerMapping

处理器映射器

HandlerMapping负责根据用户请求url找到Handler处理器

springmvc提供了不同的映射器实现不同的映射方式 HandlerMapping会把找到映射返回给前端控制器

Handler

后端控制器

在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

HandlAdapter

通过HandlerAdapter对处理器进行执行 处理器适配器

ViewResolver

视图解析器

View Resolver负责将处理结果生成View视图

View

springmvc框架提供了很多的View视图类型的支持,

包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

默认加载组件

1. 处理器映射器

@RequestMapping:定义请求url到处理器功能方法的映射

注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射。

根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法

匹配成功返回HandlerMethod对象给前端控制器。

HandlerMethod对象中封装url对应的方法Method。

2. 处理器适配器

对标记@ResquestMapping的方法进行适配

解析对应的方法

3. 视图解析器

视图解析器使用SpringMVC框架默认的InternalResourceViewResolver

这个视图解析器支持JSP视图解析

配置视图解析器

当一个页面存放目录结构比较多时,就可以配置目录

在springmvc.xmll中添加

750ae5bd2d6321eacae93bc9b1ee5c9c.png

请求转发与重定向

转发:

290c29aa8d638078a149f0da4d5602c9.png

重定向:

eccf92b55fb5a8bea01ef06a253ffcdd.png

接收参数

使用传统request对象接收参数

3ddb7025eedcec6dcd903b3d00bcdd84.png

8b07862487aee3f30732e4063889564d.png

60215f92bac90f97d77fadaf47a68cfc.png

Springmvc框架会自动把Request对象传递给方法。

不使用request接收简单类型参数

当请求的参数名称和处理器形参名称一致时会将请求参数与形参进行绑定。

3c288e9931144b2aa62e745703b2e0a3.png

@RequestParam

形参的类型与绑定的类型不一致时,可以使用@RequestParam进行匹配

value:请求参数名字

required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错

defaultValue:默认值,表示如果请求中没有同名参数时的默认值

bcdeca41279362476645fd76ef99a8ae.png

以一个javaBean对象接收

要求对象当中的属性要和表单当中的名称一致

6e6be17ef37ed9cd8d3af34732010931.png

2e7c88f5ed8f26bd195b6fca37b2aa51.png

List集合接收数据

a34b5a50f70d11458dea29827d98b381.png

292b7dec1341405ec4b4cca79ee3bfb1.png

597564e7cd44f55dfe5b8e891b07c131.png

自定义参数绑定

根据业务需求自定义数据显示格式

需求:

修改商品日期

由于日期数据有很多种格式,springmvc没办法把字符串转换成日期类型。所以需要自定义参数绑定。

分析:

前端控制器接收到请求后,找到注解形式的处理器适配器

对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。

内部已经定义了很多的转换器,比如可以直接使用int类型来接收字符串

日期类型与字符串比较特殊,字符串的日期格式,有很多种.可以自己来定义是哪种格式的转换

可以在springmvc处理器适配器上自定义转换器Converter进行参数绑定。

把发布时间对象的字符串转换成日期接收

e159d7ae3d19c7cc53a70659aaa310eb.png

955a3252a4119d048dc971711515b99a.png

创建转换器

5b674bf5bbff4fdecca8f1a60d1b8989.png

在springMVC核心配置文件当中自定义转换器

c74431e56ca3a2ff83db6f4722984530.png

post请求中文参数乱码

当发送post请求时,带有中文的参数会发生乱码

85ca72dd376c436e5e049fa51dea0da8.png

encoding

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

encoding

/*

@RequestMapping相关属性

Value属性

用来设置请求路径

值是一个字符串数组

可以设置多个路径共同访问对应方法

54a18e01a5c0cb30f73204f577038b92.png

b5d047de9923719be925c27d9842f3cb.png

method属性

用来设置映射的请求方式

值是RequestMethod类型的数组

如果没有写,则没有限制,post与get都可以请求到对应的方法

如果指定了请求类型,则必须得是相应的请求才能访问到对应的方法

666586b9774332dd524e12992a71e439.png

fc602f3b5f1ac37a20e6fd10d5cdc0e6.png

params属性

必须设置对应的请求参数和请求值才能访问到对应的内容

f02c020824e5a7089071531f2e280b07.png

6b711e54924c59f8986e47c3f601bf4c.png

headers属性

发送的请求头必须要与设置的请求相同时,才能够访问到对应的方法

4a8689d4c522964b0805b27b721a8c32.png

ant风格地址

Ant风格:请求路径的一种匹配方法

通配符:

1. ?:一个?匹配一个字符

0a1798e31f78b1e15bb27c4fb057cdea.png

8baf889118432cbab66036f16ffa24c6.png

fb06cff30367ba08e7fceb0a771889f8.png

c4bd2c992b885578df936326ab1edf18.png

2. *:匹配任意字符

42aa3a1e64c19622ac5d3a4363fb6c73.png

8a10ffb2a9e4c0581afcddf5eb021547.png

3. **:匹配多重路径

428455ccf51e247882fdc2bc929d739a.png

69207770ee17d330c4f2c04b0e46494b.png

@PathVariable

rest风格

资源定位及资源操作的风格

不是协议,可以遵循,也可以不遵循

REST风格请求

REST 即 Representational State Transfer (资源)表现层状态转化

用URL定位资源,用HTTP描述操作

是目前最流行的一种互联网软件架构

它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用

使用POST, DELETE, PUT, GET 分别对应 CRUD

Spring3.0 开始支持 REST 风格的请求

传统的操作资源

http://localhost:8080/get.action?id=10 查询 get

http://localhost:8080/add.action 新增 post

http://localhost:8080/update.action 修改 post

http://localhost:8080/delete.action?id=10 删除 post

restful操作资源

http://localhost:8080/goods/1查询GET

http://localhost:8080/goods新增POST

http://localhost:8080/goods更新PUT

http://localhost:8080/goods/1删除DELETE

使用@PathVariable接收RestFul风格参数

2365ab8de5f473bafe62f70db357cba1.png

cafb7a29a62837ff1a6c54a3e7e0fea9.png

发送put与delete请求

默认情况下Form表单是不支持PUT请求和DELETE请求的

spring3.0添加了一个过滤器HiddenHttpMethodFilter

可以将post请求转换为PUT或DELETE请求

配置过滤器 web.xml

7a062aa8041f8806a9d209835a587ef8.png

发送请求

4d9f900a897b2f80444f5fbd35813059.png

服务器接收处理

737be6666c6533b3a486aea93f0557d9.png

注意事项

从tomcat8开始,如果直接返回jsp页面,会报405错误 JSPs only permit GET POST or HEAD

使用重定向的形式跳转到对应jsp

或者是直接把对应jsp的 isErrorPage="true"

过滤器HiddenHttpMethodFilter源码分析 (了解)

bf871d3f4c7774785a29351d1fe6f4a0.png

16d508c84f5f5ac4aad46035597199f5.png

98617da54044a3f4d1d8a94b16af69ef.png

@RequestHeader

作用:在方法中接收请求头当中的信息

0c915693116c6f3b2e2824f1bd0448b3.png

@CookieValue

作用:用来接收浏览发送过来的cookes值

091c14cc7337d13d5bb549dc2e75dede.png

传值方式

1. ModelMap

ModelMap对象主要用于传递控制方法处理数据到结果页面

也就是说我们把结果页面上需要的数据放到ModelMap对象中即可

request对象的setAttribute方法的作用: 用来在一个请求过程中传递处理的数据。

使用方法与model一样

2. Model

Model 和 ModelMap 的实例都是spirng mvc框架来自动创建并作为控制器方法参数传入,用户无需自己创建

可以简单地将model的实现类理解成一个Map

Request级别的模型数据

Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类

方法介绍:

1. Model addAttribute(String attributeName, Object attributeValue);

添加键值属性对

bb2b5b01df3f803167400c4d71c83f5b.png

44057271023e40e27c1e311598d961da.png

26396d1b0b227c47f71b4df6fafe32a3.png

2. Map asMap();

将当前的model转换成Map

a2e6c74e4e9bd0c27c10937e42a5647f.png

3. Model addAllAttributes(Map attributes);

将attributes中的内容复制到当前的model中

如果当前model存在相同内容,会被覆盖

8614403793d5b2ee84d534b29c70ed4e.png

b9c1ad56a1408979cf33edcc75799fb2.png

be1002d0adec45bd26cb21e21cf809c4.png

4. Model addAllAttributes(Collection> attributeValues);

以集合中数据的类型做为key,

将所提供的Collection中的所有属性复制到这个Map中,

如果有同类型会存在覆盖现象

da588a7644491f9a8cf7f8d02483bd14.png

b7548cc9029acc301ca6434446e6f057.png

5. Model mergeAttributes(Map attributes);

将attributes中的内容复制到当前的model中

如果当前model存在相同内容,不会被覆盖

95ce7841f049072b71c4b883a2640ce8.png

ecf4ca5d8686500831a6daa4917a9e67.png

6. boolean containsAttribute(String attributeName);

48377c2ec6d3e62b4c6c4817b6e71bfc.png

3. ModelAndView

需要自己创建

既包含模型也包含视图

4. @SessionAttributes注解

将模型中的某个属性暂存到 HttpSession 中,以便多个请求之间可以共享这个属性

value:通过指定key将model数据放到session域当中

原来存入session:

c9ca490e5db56363d42bbab447d3e87a.png

通过注解

24e8af5f45aac92b28267089cd16476b.png

获取session

1da1b11fc25d07e6b3396225f556127c.png

type:把指定类型的模型数据放到session域当中

f1c217f4c77917cb014f5439be0938e6.png

5. @SessionAttribute注解

使用@SessionAttribute来访问预先存在的全局会话属性

573fc994fc978568aa09fdab1f3ba542.png

0b4f7330538ab777722666afc66e69dd.png

6. @ModelAttribute

作用:

修改处理方法的参数时,自动把该参数放到model当中

08514ce14a423b30a07598905665aa16.png

c4eac0cd939888adf8f932d45c4253d1.png

ed559839d3be0df1124a147e8fa40e05.png

7fece6ac90576c610acc277bb2667476.png

在方法定义上使用 @ModelAttribute 注解,Spring MVC 在调用目标处理方法前,

会先逐个调用在方法级上标注了@ModelAttribute 的方法。

mvc:view-controller

当我们发送一个请求时,如果没有找到对应的mapping

则会对配置文件当中匹配mvc:view-controller

84e47ba63c5432e39857d99df1b8c4e1.png

注意点:使用时要添加后面的内容

mvc:annotation-driven/

是一种简写形式

会自动注册三个Bean:

RequestMappingHandlerMapping、

RequestMappingHandlerAdapter

ExceptionHandlerExceptionResolver

并提供了 数据绑定支持,

@NumberFormatannotation支持,

@DateTimeFormat支持,

@Valid支持,读写XML的支持(JAXB),

读写JSON的支持(Jackson)。

form标签

简介

在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容

作用

第一是它会自动的绑定来自Model中的一个属性值到当前form对应的实体对象

第二是它支持我们在提交表单的时候使用除GET和POST之外的其他方法进行提交,包括DELETE和PUT等

使用场景

当编辑时, 跳转到form表单页,传统模式要在跳转前先到数据库查询数据,然后进行表单数据回显

使用form之前一定要保证有对应的bean,没有对应的bean时, 会自动以command为key到request域中查询,当找不到的时候, 会报异常

使用方式

引入标签库

创建表表单

7c5d55db58dcc1b8f3eb5cc25a57dc69.png

4f3336683fa7c1f4a5803ac76cd4ea83.png

处理请求

3068ad45e432c4978fb760c321b8b373.png

8214d32d7fab04f540ebea80c6236725.png

页面处理

13efc9c8bf00171d9f679feeef7de25c.png

服务器表单校验

为什么后端要做表单的校验

如果只使用前端校验的话 如果浏览器把JS给禁用掉,就弯度子啦

JSR

JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解 指定校验规则,并通过标准的验证接口对 Bean 进行验证

Hibernate Validator

是 JSR 303 的一个参考实现, 除支持所有标准的校验注解外,它还支持以下的扩展注解

常用校验规则

Bean Validation 中内置的约束

1. @Null 被注释的元素必须为 null

2. @NotNull 被注释的元素必须不为 null

3. @AssertTrue 被注释的元素必须为 true

3. @AssertFalse 被注释的元素必须为 false

4. @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

5. @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

6. @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

7. @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

8. @Size(max=, min=) 被注释的元素的大小必须在指定的范围内

9. @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

10. @Past 被注释的元素必须是一个过去的日期

11. @Future 被注释的元素必须是一个将来的日期

12. @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

Hibernate Validator 附加的约束

@NotBlank(message =) 验证字符串非null,且长度必须大于0

@Email 被注释的元素必须是电子邮箱地址

@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内

@NotEmpty 被注释的字符串的必须非空

@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

使用Hibernate-Validator导入jar包

fa156a31cf39e4f78fbf16e03b8f967a.png

在配置文件当中写上

在模型当中添加对应的校验规则

55d20e7e44b632c1f9af92b0515c6a4e.png

在处理器方法的入参标记@valid注解即可

eae965729e0ac1418cbba7f4bf9ea563.png

错误信息页面回显

使用原始表单错误信息写到Model中

1a8e421a7e7cf5a7cd3ace8ab7a36975.png

98b2d217c6ee33b2421cd00dfe2f6500.png

6f623e7728741b8c59d454be357b1b5d.png

使用form标签

访问静态资源

概述

在进行Spring MVC的配置时,通常我们会配置一个dispatcher servlet用于处理对应的URL

在设置url-pattern时可以设置三种形式

/*:拦截所有 jsp js png .css 真的全拦截.不建议使用

/:拦截所有,不包括jsp,包含.js .png.css 建议使用

*.action *.do:拦截以do action 结尾的请求

url-pattern为/时访问静态资源

方式1-

方式2- 采用spring自带方法

配置

描述

location元素表示webapp目录下的static包下的所有文件;

mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b;

该配置的作用是:DispatcherServlet不会拦截以/static开头的所有请求路径,并当作静态资源 交由Servlet处理。

Json处理

概述

当前端使用Ajax发送请求时,服务器要以JSON的数据格式响应给浏览器

使用方式

@ResponseBody来实现;注解方式

@ResponseBody**

添加json处理相关jar包

59a0d75504acf5c771b004d3c8f05cfe.png

在配置文件当中写上

设置映射方法的返回值为@ResponseBody

方式1-直接返回一个对象

e4f3861149de8e69cfc4368c68707fb9.png

方式2-返回一个List集合

af56064c95d591eca4f557b29963bc72.png

方式3-返回一个Map集合

cb5f57277fb133d927ef878424e80b78.png

表单序列化

序列化方式

user:

age:

爱好: 篮球

乒乓球

足球

序列化转Json

(function($){

$.fn.serializeJson=function(){

var serializeObj={};

var array=this.serializeArray();

var str=this.serialize();

$(array).each(function(){

if(serializeObj[this.name]){

if($.isArray(serializeObj[this.name])){

serializeObj[this.name].push(this.value);

}else{

serializeObj[this.name]=[serializeObj[this.name],this.value];

}

}else{

serializeObj[this.name]=this.value;

}

});

return serializeObj;

};

})(jQuery);

@RequestBody

作用

默认情况下我们发送的都是Content-Type: 不是application/x-www-form-urlencoded

直接使用@RequestParam接收参数

如果不是Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json,

application/xml等;

使用@RequestBody接收

使用

发送Json参数

b049a6d6419cc5fb33b056852e1a08f0.png

0289f43ac137c576e9d8c3175285983a.png

发送二进制流

44b9a2017392fb9e7f66df49c772e801.png

fa476e9dc443eb5ef5df2b98dbcf6891.png

视图解析器

视图解析器

请求处理方法执行完成后,最终返回一个 ModelAndView 对象

对于那些返回 String,View 或 ModeMap 等类型的处理方法

Spring MVC 也会在内部将它们装配成一个 ModelAndView 对象 它包含了逻辑名和模型对象的视图

Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP

视图

视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户

视图对象由视图解析器负责实例化

在org.springframework.web.servlet 包中定义了一个高度抽象的 View 接口

常见实现类

InternalResourceView

将JSP或其它资源封装成一个视图 是InternalResourceViewResoler默认使用的实现类

文件下载

8d8358dec5c26ec90e1515604adfc439.png

文件上传

概述

Spring MVC 为文件上传提供了直接的支持

是通过即插即用的 MultipartResolver 实现的

MultipartResolver是一个接口

Spring MVC 上下文中默认没有装配 MultipartResovler

如果想使用 Spring 的文件上传功能

就必须得要自己下载相关jar包

自己到配置文件当中装配到springMVC当中

上传步骤

导入相关jar包

deeddd7ff4ce7a150d8159aba90a033d.png

在springmvc配置文件当中装配MultipartResovler

3100f1dd2432d079fd4240f6b6ba875f.png

实现上传代码

9b6956ab8097af0505cb24b5a9741055.png

多文件上传

WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件

异常

概述

Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射、数据绑定以及目标方法执行时发生的异常。

SpringMVC 提供的 HandlerExceptionResolver 的实现类

异常处理

处理 Handler 中用 @ExceptionHandler 注解定义的方法。

@ExceptionHandler优先级

根据继承关系 找继承关系比较近的那一个

b37d2c9399f4e140cac3b3a1849f5874.png

@ControllerAdvice

如果在当前类中没有找到@ExceptionHanler

则会到@ControllerAdvice 中的@ExceptionHandler 注解方法

eeb66415cc9edb10aa77e16c61c19801.png

国际化

概述

SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型

当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析器(LocalResolver),

找到后使用它获取请求所对应的本地化类型信息。

默认实现过程

要先创建国际化的资源文件

56cd4c220c183b40519d965ff9e6bc45.png

73e5eacd7ebcac049b3f947b8a65ec86.png

1865c75723e080dd76166c06a6ec56f2.png

添加配置文件

69c3bcaabf8e78699cbf64d8d906c7d8.png

添加JSTL jar包

在页面当中编写标签

b13aef22e75f351d5420300cc5ee8130.png

原理

如果没有显式定义本地化解析器

SpringMVC 会使用 AcceptHeaderLocaleResolver:根据 HTTP 请求头的 Accept-Language 参数确定本地化类型

10bea7f1d7f42e6079f0dba88a813d54.png

切换中英文切换

默认情况是通过AccepHeaderLocaleResolver来从浏览器当中获取语言信息

可以从请求参数中获取本次请求对应的本地化类型。

获取到本地类型后, 给写入到session当中

实现

配置文件

169b6f097bab54c9bb4deeb927a627ca.png

属性文件

8fa2e6d93ea5fe7206ecfc3a756dba83.png

b85e088d3b6b4a0730258537c780fe7c.png

001a43ff2790b400deee15181163120f.png

页面信息

a939b413070759065fd1e99f48b21b0c.png

拦截器

概述

Java 里的拦截器是动态拦截 action 调用的对象。

可以Controller中的方法执行之前与执行之后, 及页面显示完毕后, 执行指定的方法

自定义的拦截器必须实现HandlerInterceptor接口

方法介绍

preHandle():在业务处理器处理请求之前被调用

postHandle: 在业务处理器处理完请求后

afterCompletion: 在 DispatcherServlet 完全处理完请求后被调用

SpringMVC拦截器使用

拦截所有请求

创建一个类实现HandlerInterceptor接口

335ffc1e414fbf035948f37e73f38107.png

配置文件当中添加拦截器

0f8d406f2e92e668e6e269bcb2a715a0.png

拦截指定请求

4cacb85f7efe09332d4e48e78c170ea3.png

原文链接:https://www.cnblogs.com/joker-dj/p/12772182.html

如有疑问请与原作者联系

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值