springMVC掌握要点汇总
程序员文章站
2022-03-18 19:17:45
...
springMVC掌握要点汇总
总结一下springMVC常用到的一些知识点
文章目录
springMVC的执行流程
- 浏览器发送请求。
- 请求被DispatherServlet捕获,该servlet并不处理请求,而是把请求转发出去。转发的路径是根据请求URL,匹配 @RequestMapping 中的内容。
- 匹配到了后,执行对应方法。该方法有一个返回值。
- 根据方法的返回值,借助 InternalResourceViewResolver 找到对应的结果视图。
- 渲染结果视图,响应浏览器。
springMVC的核心配置
-
springmvc.xml配置
<!-- 指定扫描controller包 --> <context:component-scan base-package="com.eric.controller" /> <!-- 注解驱动 --> <mvc:annotation-driven /> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置 资源映射 --> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources> <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
-
web.xml配置
<!-- 解决post乱码 --> <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> <!-- springmvc的前端控制器 --> <servlet> <servlet-name>eric-manager</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>eric-manager</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
请求参数的绑定
-
基本类型参数
包括基本类型和String类型,要求我们的参数名称必须和控制器中方法的形参名称保持一致。(严格区分大小写)
-
POJO 类型参数
包括实体类,以及关联的实体类,要求表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型。
-
数组和集合类型参数
包括List结构和Map结构的集合(包括数组),要求集合类型的请求参数在POJO中,或者接收的请求参数是json格式数据(此时需要借助RequestBody注解实现)。
springMVC的常用注解
@Controller
@Autowired 根据类自动注入
@RequestMapping 指定请求路径
@RequestParam 给方法形参赋值时指定表单参数名称
@PathVaribale 用于restful风格的请求
@ResponseBody 返回json格式的数据
@Value 读取配置的常量
springMVC自定义类型转换器
略…
响应数据和结果视图
-
响应请求页面
return String或者ModelAndView,包括转发和重定向
-
响应ajax异步请求
return bean或者集合类,同时借助ResponseBody注解
-
响应下载等
void
文件上传
-
springmvc.xml
<!-- 配置 文件解析器(文件上传) --> <bean id="multipartResolver" <!-- 此处的id是固定的,不能改 --> class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设定默认编码 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 设定文件上传的最大值5MB,5*1024*1024 --> <property name="maxUploadSize" value="5242880"></property> </bean>
-
代码
@RequestMapping("/pic/upload") @ResponseBody public Map<String, Object> uploadImg(String picName, MultipartFile uploadFile){}
springMVC全局异常处理器
该异常处理器整个系统只有一个
-
springmvc.xml
<!-- 全局异常处理器 --> <bean class="com.eric.search.exception.GlobalExceptionResolver"/>
-
代码
public class GlobalExceptionResolver implements HandlerExceptionResolver { //打印控制台; //记录日志; //发邮件或者短信; //显示错误页面等等 }
springMVC拦截器(AOP思想的应用)
以登录拦截器为例
-
springmvc.xml
<!-- 拦截器配置 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.eric.cart.interceptor.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors>
-
代码
public class LoginInterceptor implements HandlerInterceptor { //执行handler之前 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{} //执行handler之后,返回模型视图之前 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView model) throws Exception{} //返回模型视图之后,处理异常 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception{} }
过滤器和拦截器的区别
- 过滤器是servlet 规范中的一部分,任何java web工程都可以使用。
拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。 - 过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。
拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者js是不会进行拦截的。