springMVC掌握要点汇总

springMVC掌握要点汇总

总结一下springMVC常用到的一些知识点

文章目录

  • springMVC掌握要点汇总
    • springMVC的执行流程
    • springMVC的核心配置
    • 请求参数的绑定
    • springMVC的常用注解
    • springMVC自定义类型转换器
    • 响应数据和结果视图
    • 文件上传
    • springMVC全局异常处理器
    • springMVC拦截器(AOP思想的应用)

springMVC的执行流程

springMVC掌握要点汇总_第1张图片

  1. 浏览器发送请求。
  2. 请求被DispatherServlet捕获,该servlet并不处理请求,而是把请求转发出去。转发的路径是根据请求URL,匹配 @RequestMapping 中的内容。
  3. 匹配到了后,执行对应方法。该方法有一个返回值。
  4. 根据方法的返回值,借助 InternalResourceViewResolver 找到对应的结果视图。
  5. 渲染结果视图,响应浏览器。

springMVC的核心配置

  • springmvc.xml配置

    
    <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配置

    
    <filter>
    	<filter-name>CharacterEncodingFilterfilter-name>
    	<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    	<init-param>
    		<param-name>encodingparam-name>
    		<param-value>utf-8param-value>
    	init-param>
    filter>
    <filter-mapping>
    	<filter-name>CharacterEncodingFilterfilter-name>
    	<url-pattern>/*url-pattern>
    filter-mapping>
    
    
    
    <servlet>
    	<servlet-name>eric-managerservlet-name>
    	<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    	
    	<init-param>
    		<param-name>contextConfigLocationparam-name>
    		<param-value>classpath:spring/springmvc.xmlparam-value>
    	init-param>
    	<load-on-startup>1load-on-startup>
    servlet>
    <servlet-mapping>
    	<servlet-name>eric-managerservlet-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"    
    	<property name="defaultEncoding" value="UTF-8">property>
    	
    	<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{}
    }
    

过滤器和拦截器的区别

  1. 过滤器是servlet 规范中的一部分,任何java web工程都可以使用。
    拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。
  2. 过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。
    拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者js是不会进行拦截的。

你可能感兴趣的:(springMVC)