spring mvc 为什么要把spring controllerr交给子容器管理

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&扫描配置如下:
spring-context.xml
&context:component-scan base-package=&com.freecg.green007&&
& & &context:exclude-filter type=&annotation& expression=&org.springframework.stereotype.Controller& /&
&/context:component-scan&
spring-mvc.xml
&context:component-scan base-package=&com.freecg.green007&&&
& & &context:exclude-filter type=&annotation& expression=&org.springframework.stereotype.Service& /&
&/context:component-scan&
spring父容器不扫描@Controller,MVC子容器不扫描@Service.
事务配置如下:
spring-context.xml
&tx:annotation-driven transaction-manager=&transactionManager&&proxy-target-class=&false& /&
&bean id=&transactionManager&&class=&org.springframework.jdbc.datasource.DataSourceTransactionManager&&
& & &property name=&dataSource& ref=&dataSource& /&
因为spring容器和spring-mvc是父子容器,spring容器会先加载,如果此时扫描了Controller,但未扫描到Service。
spring事务配置文件还有上下文都是通过org.springframework.web.context.ContextLoaderListener加载的,而spring
MVC的action是通过org.springframework.web.servlet.DispatcherServlet加载的&。
web是先启动ContextLoaderListener后启动DispatcherServlet&在ContextLoaderListener加载的时候action并没在容器中,所以现在使用AOP添加事务或者扫描注解都是无用的。
结论:让spring扫描注册Service实现类,让MVC扫描注册Controller,此时spring父容器已经注册Service为Bean,此时事务可以得到正常配置。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5974次
排名:千里之外
原创:28篇springmvc 请求无法到达controller,出现404错误的原因
日期: 14:05:22
来源:ITeye
springmvc 请求无法到达controller,出现404错误的原因
最近做springmvc+mybatis+maven项目集成的时候遇到一个问题,项目搭起来以后,http请求怎么都进不到controller中,耗费
了一天多时间弄这个问题,最后发现还是自己对spring的配置文件和各种注解不熟。其实这个问题就是由于注解没配好的缘故
首先,从配置文件讲起
&!-- 加载Spring配置文件 --&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&
classpath:spring-context*.xml
&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&!-- 加载spring mvc --&
&servlet-name&spring3mvc&/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&spring3mvc&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
在上面的web.xml中,我们看到基于ContextLoaderListener和DispatcherServlet都可以配置spring相关的XML,两类XML的前缀分别以spring和springmvc开头,说明,基于ContextLoaderListener加载的XML配置,原则上是与spring容器相关的(也可以说是父容器);而基于DispatcherServlet加载的XML配置,原则上是与springmvc容器相关的(相当于子容器)。
父容器加载的配置文件默认地址为:/WEB-INF/applicationContext.xml,它默认以applicationContext命名,说明它是spring的全局的配置,如果你项目中此文件名和地址都没有改,那么在web.xml中可以不用配置,spring容器会自动到默认地址下去加载。
子容器的配置文件命名默认为[servlet-name]-servlet.xml方式,也就是说servlet-name中如果没有指定init-param属性,系统自动寻找的配置文件为[servlet-name]-servlet.xml,默认路径也是WEB-INF下。
所以个人建议,基于mvc相关的spring配置由DispatcherServlet加载,而其余的JavaBean都交给ContextLoaderListener加载。
值得说明的是这两种方式加载spring的ApplicationContext上下文对象不是合并存储的。mvc
context可以引用applicationContext的bean,而applicationContext无法引用到mvc的bean,spring查找bean,会先在当前context中查找,如果没有满足的,再到父容器查找。而且两个context中可以存在相同的bean定义的,只不过优先查找当前context。并且各context上下文中的声明式标签相互不起作用。也就是说,如果你在applicationContext.xml中声明的&mvc:annotation-driven
/& ,在mvc的context中是不起作用的。
说了这么多,其实我项目中的错误原因也就找到了,我的问题在于,我将&mvc:annotation-driven
/&声明在了application上下文的配置中,从而导致mvc的context 中声明的&context:component-scan base-package="com.hq51.business.controller" /& 不起作用,项目也就无法识别和加载controller了,所以会出现需要controller处理的http请求,最后都是莫名其妙的404错误。
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
[1] Insert an installation media of SLES in CD/DVD drive and restart your computer. After follwoing screen is shown, Select "Installation" to proceed next. [2] Select your language and keyboard layouts. And also check a box "I Agree to the Lisence Terms"
1.1. Java dump概述 JavaDump即Java虚拟机的运行时快照。制作和分析dump时,常常将当时Java虚拟机运行时的状态和信息保存到dump文件。 dump分类: 线程Dump,包含JVM进程中所有线程的运行状态。纯文本格式。 堆Dump,包含线程Dump以及所有堆对象的状态。二进制格式。
1.2. 制作和分析Dump 1.2.1. 常见Java虚拟机 不同Java虚拟机的Dump规范不完全相同。线程dunp为纯文本格式,各虚拟机略有不同。 Java虚拟机类型 说明 HotSpo
目录 目录 组策略 组策略对象GPO 实验一组策略的计算机配置 实验二组策略的用户配置 实验三首选设置 实验四组策略更改计算机桌面 组策略 组策略分为 计算机配置 和 用户配置 两部分: 1. 计算机配置:当计算机开机时,系统会根据计算机配置的属性来设置计算机环境。例如:我们在这个AD域内设置了计算机配置组策略,则此策略就会被应用到这个域内的所有计算机。 2. 用户配置:当用户登录时,系统会根据用户配置的属性来设置用户的工作环境。例如:我们对组织单位 teacher 配置了组策略,则组织
[1] Download CentOS 7 [1] This is the configuration Examples for CentOS 7.x that is compatible with Red Hat Enterprise Linux 7.x. Download the CentOS 7.2 ISO file for installation from the following site. => http://mirror.centos.org/centos-7/7.2.1511/isos/
近期突然要用到Redis,对于此君以前也之只是耳闻,没有用过,现在的技术更新实在太快,每年都会出现很多新技术,学无止境啊…… 起因 首先简单说下Redis的概念.Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。 在没了解前,只是
一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。
1. ctrl+shift+r:打开资源
这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xml。美中不足的是这组快捷键并非在所有视图下都能用。 2. ctrl+o:快速outline
如果想要查看当前类的方法或某个特定方法,但
说明: 目前安装了4个Redhat linux操作系统,主机名分别为hadoop01,hadoop02,hadoop03,hadoop04 其中hadoop01为主节点,hadoop02,hadoop03,hadoop04为从节点 四个节点ip地址为192.168.10.61~64. 如果不修改hosts文件,从第二部开始可将hadoop01~04改为所对应的ip地址,如第4步中的 scp ~/.ssh/id_rsa.pub root@hadoop02:~ 命令可改为 scp ~/.ssh/id_rsa.
[1] Insert installation media in CD/DVD drive and restart your computer. Follwoing screen is shown and Click "Installation" to do it. [2] Select your language and keyboard layouts.And also check a box "I Agree to the Lisence Terms" to proceed next. [3] Th
vm安装php,系统为centos7,php版本为5.6.15。 首先解压,进入源码目录: 对源码进行编译配置: 配置参数: . /configure -- prefix = /usr/ local /php -- enable -fpm -- with -curl -- with -openssl -- enable -mbregex -- with -mysql -- with -mysqli -- with -mysql -sock -- enable -pdo -- with -pdo -mysq
Arch Linux 安装小记 这只是一篇随笔,用来记录从全新安装 Arch Linux 开始,到在使用过程中各种软件配置的过程。 其实对于 Arch Linux 这样滚动更新的 Linux,很少需要重新安装系统。只不过在开始使用 Arch Linux 时遇到的一些问题,有时并没有真正了解其中的原因或者问题被掩盖了,所以通过写一些记录文档,并且把一些花时间配置的文件备份下来,无论以后再次使用还是整理思路都是好的。 注意: 这 不是 一个安装 Arch Linux 的完整过程, ArchWiki 才是。但对
Copyright (C)
ITfish.net

我要回帖

更多关于 spring mvc 两个容器 的文章

 

随机推荐