欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springMVC掌握要点汇总

程序员文章站 2022-03-18 19:17:45
...

springMVC掌握要点汇总

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

springMVC的执行流程

springMVC掌握要点汇总

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

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{}
    }
    

过滤器和拦截器的区别

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