SpringMVC的使用详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/asdf_1024/article/details/79010806

一、SpringMVC运行流程图:

SpringMVC运行流程

二、SpringMVC的组件名称:

前端控制器(DispatcherServlet);
处理器映射器(HandlerMapping);
处理器适配器(HandlerAdapter);
处理器(Handler);
视图解析器(ViewResolver);
视图(View);

三、运行流程:

1-1、用户发起请求到前端控制器;
2、前端控制器请求处理器映射器查找处理器,处理器映射器查到后向前端控制器返回处理器;
3-1、前端控制器请求处理器适配器执行处理器;
4、处理器适配器请求处理器执行,处理器执行后向处理器适配器返回ModelAndView;
3-2、处理器适配器向前端控制器返回ModelAndView;
5、前端控制器请求视图解析器进行视图解析,视图解析器解析后向前端控制器返回视图;
6、前端控制器请求视图进行渲染,视图渲染后返回给前端控制器;
1-2、前端控制器向用户返回响应。

四、代码详解:

必需(1)前端控制器(配置在web.xml):

<servlet>
  <servlet-name>springmvc</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:com/neuedu/mvc/interceptor/sprinmvc.xml</param-value>
  </init-param>
  </servlet>
  <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>*.do</url-pattern>
  </servlet-mapping>

springmvc:名字可以随便起,原则上符合生产环境使用需求即可;
org.springframework.web.servlet.DispatcherServlet:前端控制器对应类的全路径,只要不是自己开发前端控制器,这就是固定写法,是可以根据路径找到项目下对应的类的;
/sprinmvc.xml:路径一定要正确,springmvc.xml中是处理器适配器、处理器映射器等一系列组件;
.do:当然也可以是/、/.html等,这影响着用户请求的url是否会交给前端控制器来处理,例如用户请求了dologin.do,服务器收到请求,就会交给SpringMVC的前端控制器处理,当然前端控制器收到dologin.do,要自己处理了,交给处理器映射器的就是dologin,所以.do什么的只是进门的门槛,可以随便配,符合生产环境即可;

必需(2)处理器映射器和处理器适配器(使用注解):

<mvc:annotation-driven/>

使用了注解,需要启用包扫描 :

<context:component-scan base-package="com.baidu.controller" />

com.baidu.controller:指加了注解的包,也可以指定到相应的类,有多个路径的情况下,以逗号分隔;

如果不使用注解,处理器代码需要继承相应的类,开发中一般不使用:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

(3)视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>

prefix:前缀;
suffix:后缀;
当然,这都是org.springframework.web.servlet.view.InternalResourceViewResolver类中属性名,不是随便写的名字;
一般情况,配置文件中,除了id会自己命名(也要符合生产规范),其余属性皆有对应之处,如果不能对应起来,容器将不能成功加载,所以如果容器加载失败,就可以看看配置文件是否出了问题;
如果此处前端控制器请求视图解析器解析的是index逻辑视图名,视图解析器解析后,将给前端控制器返回/index.jsp物理视图名称,直接对应到前端页面;

常用(4)文件上传解析器:

需要另外导入jar包(版本自选,满足版本之间依赖关系即可):
commons-fileupload-1.2.2.jar
commons-io-2.4.jar

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 指定上传文件最大尺寸为5MB -->
<property name="maxUploadSize" value="5242880"></property>
</bean>

org.springframework.web.multipart.commons.CommonsMultipartResolver:类中还有很多属性可以扩展,例如文件编码格式、缓存大小等;

常用(5)拦截器:

<mvc:interceptors>
    <mvc:interceptor>
    <!-- /**所有url包括url路径 -->
        <mvc:mapping path="/**"/>
        <!-- 不拦截的路径 --> 
        <mvc:exclude-mapping path="*.haha"/>
        <bean class="com.neuedu.mvc.interceptor.Interceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

常用(6)异常处理器:

<bean class="com.neuedu.mvc.exception.ex.CustomExceptionResolver"></bean>

常用(7)校验器:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!-- 指定校验器 -->
<property name="providerClass" value='org.hibernate.validator.HibernateValidator'></property>
<!-- 指定资源文件,没有validationMessageSource属性,但是有set方法,依然可以注入 -->
<property name="validationMessageSource" ref="messageSource"></property>
</bean>
<!-- 校验错误信息配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <!-- 资源文件名 -->
    <property name="basenames">
        <list>
            <value>classpath:CustomValidationMessages</value>
        </list>
    </property>
    <!-- 资源文件编码格式 -->
    <property name="defaultEncoding" value="utf-8"/>
<!-- 对资源文件内容缓存时间,单位秒 -->
     <property name="cacheSeconds" value="120"/>
</bean>

猜你喜欢

转载自blog.csdn.net/asdf_1024/article/details/79010806