SpringMVC常见知识点总结

什么是SpringMVC?

img

SpringMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级Web框架,MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

SpringMVC的核心组件

记住了下面这些组件,也就记住了 SpringMVC 的工作原理。

  • DispatcherServlet核心的中央处理器,负责接收请求、分发,并给予客户端响应。
  • HandlerMapping处理器映射器,根据 uri 去匹配查找能处理的 Handler ,并会将请求涉及到的拦截器和 Handler 一起封装。
  • HandlerAdapter处理器适配器,根据 HandlerMapping 找到的 Handler ,适配执行对应的 Handler
  • Handler请求处理器,处理实际请求的处理器。
  • ViewResolver视图解析器,根据 Handler 返回的逻辑视图 / 视图,解析并渲染真正的视图,并传递给 DispatcherServlet 响应客户端

SpringMVC的流程?

在这里插入图片描述

  1. 客户端(浏览器)发送请求, DispatcherServlet拦截请求。
  2. DispatcherServlet 接收到请求之后,调用HandlerMapping处理器映射器,请求获取Handler
  3. 处理器映射器根据请求uri找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet
  4. DispatcherServlet 调用 HandlerAdapter适配器执行 Handler
  5. HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑
  6. Handler执行完成返回ModelAndView
  7. HandlerAdapterHandler执行结果ModelAndView返回给DispatcherServlet
  8. DispatcherServletModelAndView传给ViewResolver视图解析器进行解析
  9. ViewResolver解析后返回具体View
  10. ``DispatcherServletView`进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户

SpringMVC的优点

  1. 丰富的视图选择:SpringMVC支持多种视图技术,如JSP、Freemarker、Thymeleaf等,可以根据需要选择合适的视图技术。
  2. 与Spring框架的集成:SpringMVC是Spring框架的一部分,可以无缝地与Spring的其他部分(如SpringIoC、SpringAOP等)进行集成。
  3. 清晰的角色分配:前端控制器(dispatcherServlet) ,请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。
  4. 支持各种请求资源的映射策略。

SpringMVC常用的注解

  1. @Controller:用于标识一个控制器。
  2. @RequestMapping:用于映射Web请求到特定的处理器功能或控制器方法。
  3. @RequestParam:用于将请求参数绑定到方法参数。
  4. @PathVariable:用于将URL中的模板变量绑定到方法参数。
  5. @ResponseBody:用于将返回值转换为JSON或XML等格式返回给客户端。
  6. @RequestBody:用于将HTTP请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。
  7. @ModelAttribute:用于将请求参数绑定到命令对象,或者在Model中暴露值。
  8. @SessionAttributes:用于将模型属性存储在会话中。
  9. @ExceptionHandler:用于处理控制器中的异常。

SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代?

一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。

SpringMvc里面拦截器是怎么写的?

有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可:

<!-- 配置SpringMvc的拦截器 -->
<mvc:interceptors>
    <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 -->
    <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean>
<!-- 只针对部分请求拦截 -->
<mvc:interceptor>
   <mvc:mapping path="/modelMap.do" />
   <bean class="com.zwp.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>

注解的原理

在Java编程中,注解(Annotation)是一种用于提供元数据的机制。它们是在代码中添加的特殊标记,可以在编译、类加载、运行时被读取,并执行特定的功能。

注解的基本语法是在注解名前加上@符号,例如@Override,@Entity等。

注解有三种类型:

  1. 标记注解:没有成员的注解,例如@Override。
  2. 单值注解:只有一个成员的注解,例如@SuppressWarnings(“unchecked”)。
  3. 完整注解:包含多个成员的注解,例如@RequestMapping(method = RequestMethod.GET, path = “/example”)。

如何自定义注解?

  1. 创建一个自定义注解:与创建接口类似,但自定义注解需要使用 @interface
  2. 添加元注解信息,比如 @Target、@Retention、@Document、@Inherited 等
  3. 创建注解方法,但注解方法不能带有参数
  4. 注解方法返回值为基本类型、String、Enums、Annotation 或其数组
  5. 注解可以有默认值
@Target(FIELD)
@Retention(RUNTIME)
@Documented
public @interface CarName {
    String value() default "";
}

SpringMVC的异常处理

答:可以将异常抛给Spring框架,由Spring框架来处理;我们只需要配置简单的异常处理器,在异常处理器中添视图页面即可。

SpringMvc的控制器是不是单例模式?如果是,有什么问题?怎么解决?

答:是单例模式,在多线程访问的时候有线程安全问题,解决方案是在控制器里面不能写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal机制解决,为每个线程单独生成一份变量副本,独立操作,互不影响。

如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?

答:可以在@RequestMapping注解里面加上method=RequestMethod.GET。

怎样在方法里面得到Request,或者Session?

答:直接在方法的形参中声明request,SpringMvc就自动把request对象传入。

如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

答:直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。

如果前端传入多个参数,并且参数都是同个对象的,如何快速得到这个对象?

答:直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

SpringMvc中函数的返回值是什么?

答:返回值可以有很多类型,有String,ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

SpringMvc用什么对象从后台向前台传递数据的?

答:通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前端就可以通过el表达式拿到。

怎么样把ModelMap里面的数据放入Session里面?

答:可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值