目录

  • 1创建Web项目
  • 2配置web.xml
  • 1.核心组件DispatcherServlet(前端控制器)
  • 2.配置请求时,前端资源过滤器,解决请求资源为乱码的情况
  • 3.配置请求方式过滤器:处理使用RestFul风格编码接收非GET/POST请求方式无法匹配的问题
  • 2.配置MVC的核心配置文件,springmvc.xml
  • 1.开启包扫描,使其能够扫描到使用注解的类、添加到容器中统一管理
  • 2.开启MVC注解的支持,即光扫描到还不够,你还得让注解可以生效。
  • 3.之后配置的就是需要用的一些组件(bean)
  • 4.视图解析器配置(jsp/
  • 5.配置文件上传解析器------MultilpartResolver

1创建Web项目

使用Maven选择web骨架创建web项目之后、先配置web.xml文件

2配置web.xml

1.核心组件DispatcherServlet(前端控制器)

它是springmvc的核心组件、其作用是调度工作,控制任务流程,能够对浏览器发送的请求进行统一管理。
配置

<servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
<!--            指定springMVC的核心配置为类路径下的springmvc.xml-->
<!--            如果不配置,则默认核心配置在WEB-INF目录下,文件名默认为 当前servlet的名字 + -servlet.xml,即:“characterEncodingFilter-servlet.xml”-->
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
<!--        让DispatcherServlet的创建提前到项目启动时,因为如下图中一系列组件的初始化如果都在第一次发送请求时进行调用,name会大大的影响服务器响应速度。所以参数设置为1,让其初始化提前到了服务器启动时-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
<!--        设置请求拦截的范围,/ 表示能够处理的路径为除了.jsp的所有请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

在该类内部的 initStrategies()方法中初始化了WebMVC中的组件进行了初始化,将它们加载到容器中。

protected void initStrategies(ApplicationContext context) {
        //初始化文件上传解析器,发送请求,文件上传时,需要配置该bean,它能够识别这种请求并进行处理
        this.initMultipartResolver(context);
        //
        this.initLocaleResolver(context);
        //
        this.initThemeResolver(context);
        //初始化处理器映射器,用来将嵌套请求与后台的URL,参数进行匹配
        this.initHandlerMappings(context);
        //初始化处理器适配器,用来执行控制器映射所匹配的控制器(controller)方法
        this.initHandlerAdapters(context);
        //初始化处理器异常解析器、可以在产生异常时,将其映射到其他页面,比如统一的错误界面。为用户展示比较友好的界面
        this.initHandlerExceptionResolvers(context);
        this.initRequestToViewNameTranslator(context);
        //初始化视图解析器、用来接收控制方法返回的视图名称,并将其进行渲染,得到一个ModelAndView
        this.initViewResolvers(context);
        this.initFlashMapManager(context);
    }

2.配置请求时,前端资源过滤器,解决请求资源为乱码的情况

<!--    配置前端资源过滤器,设置编码-->
    <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>
        <!--        设置响应体的编码格式也强制为Encoding的格式-->
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.配置请求方式过滤器:处理使用RestFul风格编码接收非GET/POST请求方式无法匹配的问题

简而言之,配置这个过滤器,你才能使用RestFul风格进行编码

<!--配置请求方式过滤器-->
    <filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
<!--      浏览器解析的  /*  就是拦截所有的请求-->
<!--      服务器解析的  /*  就是拦截,上下文路径下单层的所有的请求、例如/*/aa的请求就拦截不了,得使用/**-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2.配置MVC的核心配置文件,springmvc.xml

1.开启包扫描,使其能够扫描到使用注解的类、添加到容器中统一管理

<!--    配置包扫描,即要扫描哪些包到容器中-->
    <context:component-scan base-package="com.zzj"></context:component-scan>

2.开启MVC注解的支持,即光扫描到还不够,你还得让注解可以生效。

<!--    开启注解扫描的支持-->
    <mvc:annotation-driven></mvc:annotation-driven>

3.之后配置的就是需要用的一些组件(bean)

前面讲过的处理器映射(HandlerMapping)、/处理器异常解析器(HandlerExceptionResolver)、文件上传解析器(MultipartResolver)、如需使用都是在核心配置文件中配置的。一般就配个文件上传,视图解析就差不多了

4.视图解析器配置(jsp/

使用jsp时----视图解析器声明-----InternalResourceViewResolver

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--    解析controller参数后,为其加上前缀和后缀,进行访问-->
    <property name="prefix" value="/WEB-INF/pages/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>

如果使用thymeleaf,则声明对应的视图解析器------ThymeleafViewResolver
注:需要引入thymeleaf相关依赖

<!-- 配置Thymeleaf视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">

                        <!-- 视图前缀 -->
                        <property name="prefix" value="/WEB-INF/templates/"/>

                        <!-- 视图后缀 -->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

5.配置文件上传解析器------MultilpartResolver

<bean id="multipartResolverr" class="org.springframework.web.multipart.commons.CommonsMultipartResolverr" >
        <property name="maxUploadSize" value="*10241024*8"/>
        <property name="defaultEncoding" value="utf-8"></property>
    </bean>