spring与springmvc整合

spring与springmvc整合

在项目中使用springmvc的时候,由于spring和springmvc是同源的,有时候大家会把所有的配置都扔到springmvc的配置文件中,而不去区分spring和springmvc的配置,而我习惯于把两个配置拆分开来,spring来配置数据源、事务以及和其他框架的整合,springmvc来配置web相关的一些配置。

只使用springmvc配置

先来看一下如果只是用springmvc配置的话,如何进行配置

先配置web.xml,只需要配置DispatcherServlet即可。之后将所有的spring配置和springmvc配置都放到springmvc.xml的配置中

<servlet>
    <servlet-name>dispatcher</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>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

区分spring和springmvc的配置

这就是本篇文章的重点了,两者整合,那就有两个配置文件了。此时就出现了spring父子容器,由ContextLoaderListener来加载spring配置文件,创建父容器;DispatcherServlet加载springmvc配置文件,创建子容器。

看一下此时的web.xml如何配置

<!-- spring配置文件位置 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置监听器,加载spring配置文件 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>dispatcher</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>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

然后分别在spring和springmvc的配置文件中配置相关的bean

在这里给大家说明一下两者配置整合时可能会遇到的一些问题

重复创建bean

当springmvc的配置文件和spring的配置文件分离的时候,由于现在使用注解的比较多,大多都是用组件扫描,

如果两个配置文件都使用<context:component-scan base-package="com.zhanghe.study.springmvc"/>来进行组件扫描的话,会导致两个配置文件都扫一遍这些组件,这些bean都会创建两次

这时候就用到了<context:exclude-filter>和<context:include-filter>来进行设置过滤了

springmvc只需要管控制器Controller就可以了,所以在springmvc的配置文件中配置

<context:component-scan base-package="com.zhanghe.study.springmvc" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

而spring的配置文件中只需要相应的排除掉springmvc扫描的

<context:component-scan base-package="com.zhanghe.study.springmvc">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
容器关系

父容器是ContextLoaderListener加载的spring配置文件,子容器是DispatcherServlet加载的spring配置文件,子容器可以访问父容器中的bean,反之则不行

获取spring容器上下文

在项目启动的时候,监听器中会在web应用环境初始化的时候将spring的上下文内容存在应用上下文中

servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

所以在取出来时只需要获取到应用上下文

req.getServletContext()

然后取出来即可

context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)

https://zhhll.icu/2021/框架/springmvc/基础/8.spring与springmvc整合/

本文由 mdnice 多平台发布

  • 34
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SpringSpring MVC整合的基本思路是将Spring作为Spring MVC应用程序的核心容器,Spring MVC作为Web层框架,通过配置文件将它们连接在一起。 具体来说,整合的基本步骤如下: 1. 在Spring配置文件中引入Spring MVC配置文件 ```xml <import resource="spring-mvc.xml"/> ``` 2. 配置Spring MVC的DispatcherServlet 在web.xml中配置DispatcherServlet,将Spring MVC的请求交给它来处理。 ```xml <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:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 3. 配置Spring MVC的视图解析器 在Spring配置文件中配置视图解析器,将Spring MVC的视图解析器注册到Spring容器中。 ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> ``` 4. 配置Spring MVC的控制器 在Spring MVC配置文件中定义控制器,配置请求映射和处理方法。 ```xml <bean class="com.example.controller.HelloController"> <property name="message" value="Hello, Spring MVC!"/> </bean> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean id="/hello" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> <property name="viewName" value="hello"/> </bean> ``` 5. 在Spring配置文件中配置组件扫描 ```xml <context:component-scan base-package="com.example"/> ``` 通过以上步骤,就可以将SpringSpring MVC整合起来,实现一个完整的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾光师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值