同步操作将从 dearHaoGeGe/Ebooks 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
在配置文件中(一般命名为springmvc.xml 文件)通过开启配置:
<mvc:annotation-driven>
来实现注解处理器和适配器的开启。
注解本质是一个继承了Annotation的特殊接口,其具体实现类是JDK动态代理生成的代理类。
通过反射获取注解时,返回的也是Java运行时生成的动态代理对象。
通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法,该方法会从memberValues这个Map中查询出对应的值,而memberValues的来源是Java常量池。
在Controller类上增加@SessionAttributes注解,使得在调用该Controller时,将Model中的数据存入Session中,实例代码如下:
```java @Controller @RequestMapping("/") @SessionAttributes("isAdmin") public class IndexController extends BasicController { //.... }
### 题4:[Spring MVC 如何设置重定向和转发?](/docs/Spring%20MVC/最新2022年Spring%20MVC面试题高级面试题及附答案解析.md#题4spring-mvc-如何设置重定向和转发)<br/>
在返回值前面加“forward:”参数,可以实现转发。
```java
"forward:getName.do?name=Java精选"
在返回值前面加“redirect:”参数,可以实现重定向。
"redirect:https://blog.yoodb.com"
### 题5:[Spring MVC 请求转发和重定向有什么区别?](/docs/Spring%20MVC/最新2022年Spring%20MVC面试题高级面试题及附答案解析.md#题5spring-mvc-请求转发和重定向有什么区别)<br/>
请求转发是浏览器发出一次请求,获取一次响应,而重定向是浏览器发出2次请求,获取2次请求。
请求转发是浏览器地址栏未发生变化,是第1次发出的请求,而重定向是浏览器地址栏发生变化,是第2次发出的请求。
请求转发称为服务器内跳转,重定向称为服务器外跳转。
请求转发是可以获取到用户提交请求中的数据,而重定向是不可以获取到用户提交请求中的数据,但可以获取到第2次由浏览器自动发出的请求中携带的数据。
请求转发是可以将请求转发到WEB-INF目录下的(内部)资源,而重定向是不可以将请求转发到WEB-INF目录下的资源。
### 题6:[Spring MVC 中常用的注解包含哪些?](/docs/Spring%20MVC/最新2022年Spring%20MVC面试题高级面试题及附答案解析.md#题6spring-mvc-中常用的注解包含哪些)<br/>
@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都能获得在此处设置的键值对。
### 题7:[Spring MVC 中 @RequestMapping 注解用在类上有什么作用?](/docs/Spring%20MVC/最新2022年Spring%20MVC面试题高级面试题及附答案解析.md#题7spring-mvc-中-@requestmapping-注解用在类上有什么作用)<br/>
@RequestMapping注解是一个用来处理请求地址映射的注解,可用于类或方法上。
用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
比如
```java
@Controller
@RequestMapping("/test/")
public class TestController{
}
启动的是本地服务,默认端口是8080,通过浏览器访问的路径就是如下地址:
http://localhost:8080/test/
Spring MVC的入口是一个servlet即前端控制器(DispatchServlet),而Struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。
Spring MVC是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),Struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,而Spring MVC通过参数解析器将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后将ModelAndView中的模型数据通过reques域传输到页面。其中Jsp视图解析器默认使用jstl。
默认情况下是单例模式,在多线程进行访问时存在线程安全的问题。
解决方法可以在控制器中不要写成员变量,这是因为单例模式下定义成员变量是线程不安全的。
通过@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)或@Scope("prototype")可以实现多例模式。但是不建议使用同步,因为会影响性能。
使用单例模式是为了性能,无需频繁进行初始化操作,同时也没有必要使用多例模式。
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
RequestMapping注解有六个属性
value
指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method
指定请求的method类型, GET、POST、PUT、DELETE等;
consumes
指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces
指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params
指定request中必须包含某些参数值是,才让该方法处理。
headers
指定request中必须包含某些指定的header值,才能让该方法处理请求。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。