SpringMVC基础考点复习

SpringMVC在 获取多个参数、文件上传、Servlet功能单一 方面都能有很好的解决办法;

一、SpringMVC总体执行框架图

3.jpg

上图清晰明了的展示了SpringMVC的工作原理:

  • SpringMVC整个赖以运作的最核心的组件:核心控制器类(DispatcherServlet),也叫前端控制器——接收request请求,进行response响应;

    三大组件

  • 处理器映射器(HandleMapping)通过url,查找对应的handler,找到后就向DispatcherServlet返回"执行链HandlerExecutionChain";(可以通过xml配置或注解方式实现)

  • 处理器适配器(HandleAdaptor):DispatcherServlet无法直接调用“处理器Handler”,必须通过调用“处理器适配器HandlerAdaptor”来间接地执行处理器;——这里有一个适配器模式;“处理器Handler”的执行结果为“ModelAndView”,也必须通过“处理器适配器HandlerAdaptor”间接返回给“DispatcherServlet”;

  • 视图解析器(ViewResolver):DispatcherServlet带着“ModelAndView”去请求“视图解析器ViewResolver”进行视图解析,“视图解析器ViewResolver”根据逻辑视图生成真正的“视图View”,并返回给DispatcherServlet;

  • 最后,DispatcherServlet对视图进行渲染,并响应给用户浏览器


二、SpringMVC的实现过程

  • 导jar包或者添加依赖;

  • 编译SpringMVC的两个主配置文件:web.xml + springmvc.xml

1、在 web.xml 中配置SpringMVC的核心类 DispatcherServlet 

<!-- 配置Springmvc的核心控制器类,DispatcherServlet -->
  <servlet>
      <servlet-name>dispatcherServlet</servlet-name>        ————核心控制器类(前端控制器)
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>   ————执行springmvc的主配置文件所在
      </init-param>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>dispatcherServlet</servlet-name>
      <!-- "/"代表项目路径,“/*”则代表项目下的所有资源 -->
      <url-pattern>/*</url-pattern>           ————配置DispatcherServlet类将要拦截的请求,当然是要所有
  </servlet-mapping>

2、配置最简单版的springmvc.xml(需要配置包扫描+注解驱动)

image.png

3、springmvc.xml中对视图解析器(viewResolver)进行配置:

<!-- 视图解析器 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 配置前缀 -->
    <property name="prefix" value="/pages/"></property>
    <!-- 配置后缀 -->
    <property name="suffix" value=""></property>
</bean>

4、springmvc.xm中对文件上传功能进行配置:

<!-- 配置文件上传配置 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 配置文件上传的编码 -->
    <property name="defaultEncoding" value="utf-8"></property>
    <!-- 配置文件上传大小 -->
    <property name="maxUploadSize" value="1048576"></property>
</bean>
注意:如果前端表单中有file控件,则必须指定enctype="multipart/form-data"

5、springmvc.xml中配置 hibernate-validator 自动校验功能:

<!-- 配置hibernate-validator -->
<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
</bean>

6、springmvc.xml中配置定时器 scheduler

<!-- 配置定时器配置 -->
<task:scheduler id="scheduler" pool-size="10"/>
<task:executor id="executor" keep-alive="3600" pool-size="100-200" queue-capacity="500" rejection-policy="CALLER_RUNS"/>
<task:annotation-driven executor="executor" scheduler="scheduler"/>

7、springmvc.xml中配置拦截器 interceptor

<!-- 7、配置拦截器,其中可以配置多个拦截器 -->
<mvc:interceptors>
     <mvc:interceptor>
         <mvc:mapping path="/front/**" />  代表front下的所有,此条必须在前
         <mvc:exclude-mapping path="/front/login.shtml"/> 除了/login.shtml
         <bean id="oneInterceptor" class="cn.java.interceptors.OneInterceptor"></bean>
     </mvc:interceptor>
</mvc:interceptors>

8、注意,配置 spring事务的操作,最好放在spring的配置文件(applicationContext.xml)中进行:

<!-- 事务配置及驱动,因为事务是放在业务service层里面的,所以service的包扫描在哪个配置文件,事务配置就在哪个文件,
    又因为事务需要用到“basicDataSource”数据源,所以最好是一起把service的包扫描也放到“applicationContext.xml”配置文件中 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="basicDataSource"></property>
</bean>
<!-- 事务注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

三、springMVC面试题总结

1、springMVC和structs2框架有什么区别?

  • springMVC的核心控制器一个Servlet(DispatcherServlet);

  • 而Structs2的核心控制器是一个Filter(StructsPreparedAndExecuteFilter);

2、说一下spring实现事务的几种方式?

  • 通过注解实现 @Transactional;

  • 通过.xml配置文件的方式实现;

3、springmvc中@RequestBody和@ResponseBody的区别?

  • @RequestBody:将奇台传递过来的json数据用 Map、List或者实体类Entity 来接收;

  • @ResponseBody:将将后台返回的数据转成 json 格式,返回给前台;

4、springMVC如何实现重定向和转发?

  • 转发:将方法的返回值类型改为String,使用“return forward: 转发路径”;

  • 重定向:将方法的返回值类型改为String,使用“teturn redirect:重定向路径”;

    细节:如果直接 return “字符串”,默认为 “转发forward”;

5、springMVC如何将数据带入JSP页面?

有三种方式:Map,Model,request;

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐