同步操作将从 Java精选/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
定义拦截器,实现HandlerInterceptor接口。
接口中提供三个方法
1、preHandle :进入 Handler方法之前执行,用于身份认证、身份授权,比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行。
2、postHandle:进入Handler方法之后,返回modelAndView之前执行,应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图。
3、afterCompletion:执行Handler完成执行此方法,应用场景:统一异常处理,统一日志处理。
拦截器配置
1、针对HandlerMapping配置(不推荐):springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。(一般不推荐使用)。
2、类似全局的拦截器:springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中。
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下:
1、加入Jackson.jar
2、在配置文件中配置json的映射
3、在接受Ajax方法里面可以直接返回Object、List等,但方法前面要加上@ResponseBody注解。
Spring MVC的返回值可以有很多类型,如String、ModelAndView等,但事一般使用String比较友好。
解决GET请求中文乱码问题
方式一:每次请求前使用encodeURI对URL进行编码。
方式二:在应用服务器上配置URL编码格式,在Tomcat配置文件server.xml中增加URIEncoding="UTF-8",然后重启Tomcat即可。
<ConnectorURIEncoding="UTF-8"
port="8080" maxHttpHeaderSize="8192" maxThreads="150"
minSpareThreads="25" maxSpareThreads="75"connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8" />
解决POST请求中文乱码问题
方式一:在request解析数据时设置编码格式:
request.setCharacterEncoding("UTF-8");
方式二:使用Spring提供的编码过滤器
在web.xml文件中配置字符编码过滤器,增加如下配置:
<!--编码过滤器-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<!-- 开启异步支持-->
<async-supported>true</async-supported>
<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>
该过滤器的作用就是强制所有请求和响应设置编码格式:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
@EnableWebMvc 在配置类中开启Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若无此句,重写WebMvcConfigurerAdapter方法(用于对SpringMVC的配置)。
@Controller 声明该类为SpringMVC中的Controller
@RequestMapping 用于映射Web请求,包括访问路径和参数(类或方法上)
@ResponseBody 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上)
@RequestBody 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前)
@PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。
@ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,
这对所有注解了 @RequestMapping的控制器内的方法有效。
@ExceptionHandler 用于全局处理控制器里的异常
@InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
@ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。
Spring MVC提供了两种上传方式配置
基于commons-fileupload.jar
org.springframework.web.multipart.commons.CommonsMultipartResolver
基于servlet3.0+
org.springframework.web.multipart.support.StandardServletMultipartResolver
1、页面form中提交方式enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析。
2、在springmvc.xml中配置multipart类型解析器。
3、方法中使用MultipartFile attach实现单个文件上传或者使用MultipartFile[] attachs实现多个文件上传。
RESTful一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
RESTful主要用于客户端和服务器交互类的软件。
REST指的是一组架构约束条件和原则。
满足这些约束条件和原则的应用程序或设计就是RESTful。
RESTful结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
表现层(UI):数据的展现、操作页面、请求转发。
业务层(服务层):封装业务处理逻辑。
持久层(数据访问层):封装数据访问逻辑。
各层之间的关系:MVC是一种表现层的架构,表现层通过接口调用业务层,业务层通过接口调用持久层,当下一层发生改变,不影响上一层的数据。
请求转发是浏览器发出一次请求,获取一次响应,而重定向是浏览器发出2次请求,获取2次请求。
请求转发是浏览器地址栏未发生变化,是第1次发出的请求,而重定向是浏览器地址栏发生变化,是第2次发出的请求。
请求转发称为服务器内跳转,重定向称为服务器外跳转。
请求转发是可以获取到用户提交请求中的数据,而重定向是不可以获取到用户提交请求中的数据,但可以获取到第2次由浏览器自动发出的请求中携带的数据。
请求转发是可以将请求转发到WEB-INF目录下的(内部)资源,而重定向是不可以将请求转发到WEB-INF目录下的资源。
@RequestParam与@PathVariable为spring的注解,都可以用于在Controller层接收前端传递的数据,不过两者的应用场景不同。
@PathVariable主要用于接收http://host:port/path/{参数值}数据。
@PathVariable请求接口时,URL是 http://www.yoodb.com/user/getUserById/2
@RequestParam主要用于接收http://host:port/path?参数名=值数据值。
@RequestParam请求接口时,URL是 http://www.yoodb.com/user/getUserById?userId=1
@PathVariable用法
@RequestMapping(value = "/yoodb/{id}",method = RequestMethod.DELETE)
public Result getUserById(@PathVariable("id")String id)
@RequestParam用法
@RequestMapping(value = "/yoodb",method = RequestMethod.POST)
public Result getUserById(@RequestParam(value="id",required=false,defaultValue="0")String id)
注意@RequestParam用法当中的参数
value参数表示接收数据的名称。 required参数表示接收的参数值是否必须,默认为true,既默认参数必须不为空,当传递过来的参数可能为空的时候可以设置required=false。 defaultValue参数表示如果此次参数未空则为其设置一个默认值。微信小程“Java精选面试题”,内涵 3000+ 道面试题。
@PathVariable主要应用场景:不少应用为了实现RestFul风格,采用@PathVariable方式。
@RequestParam应用场景:这种方式应用非常广,比如CSDN、博客园、开源中国等等。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。