Spring MVC的入口 DispatcherServlet,通过 ModelAndView 对象把模型和视图结合在一起。
访问路径流程
注解:
@Controller 表示该类是一个控制器,可以不再让类实现Controller接口
@RequestMapping(“/index”)请求页面在此进行处理,建立请求URL和请求处理方法之间对应
@PathVariable:用于绑定URL的占位符
@RequestParam:请求参数传入到指定的 形参赋值
@RequestBody:获取请求内容,将请求过来的Json数据转换成对象,get方法不使用,因为请求数据为url,不是Json数据,只允许Put和POST方法
@ResponseBody:获取相应内容,将返回的对象数据转换成Json数据格式返回给客户端,未配置时,默认返回为ModelAndView对象
new ModelAndView("redirect:/index")
实现客户端跳转
中文乱码问题
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
表单提交后页面跳转中文乱码解决:
提交form表单method=“post”,且在web.xml配置中文编码过滤器。(如上)
视图定位:
在SpringMVC的配置文件xml中添加以下代码
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/" />
<property name="suffix" value=".jsp" />
</bean>
ModelAndView mav = new ModelAndView("index");
则index后不需要加.jsp
异常处理
包括预期异常和运行时异常
系统的 dao、service、controller 出现都通过 throws Exception 向上抛出,最后由 springmvc 前端控制器交由异常处理器进行异常处理
异常处理
- 使用 Spring MVC 提供的简单异常处理器
SimpleMappingExceptionResolver。 - 实现 Spring 的异常处理接口 HandlerExceptionResolver 自定义自己的异常处理器。
- 使用 @ExceptionHandler 注解实现异常处理(常用)
注意点
- SpringMVC默认情况下是不安全的,因为是singleton单例模式,提高了性能,不用每次都创建Controller实例,一定程度上减少了时间和空间
- Struts2默认是prototype多例模式,在每次请求上都重新创建一个对象,所以不存在线程安全问题
- 当出现有状态bean、全局变量时,SpringMVC就会出现线程安全问题,有高并发隐患
- 使用ThreadLocal、改为prototype多例模式、不使用全局变量可解决线程安全问题
其它
- SpringMVC 实现:同步阻塞方式,基于 SpringMVC + Servlet + Tomcat
- SpringWebflux 实现:异步非阻塞方式,基于 SpringWebflux + Reactor + Netty