日期:2014-05-18  浏览次数:20916 次

打成jar包就不能被sping的context:component-scan找到了吗?
有关sprigmvc的问题

我有一个普通的controller,比如:

@Controller("test")
public class Test{
@RequestMapping(value = "/aaa.bo", method = RequestMethod.GET)
public String aaa(HttpServletRequest request) {
System.out.println("fdsfsd");
return null;
}
}

然后,在DispatcherServlet的xml配置文件中,
定义一个scan,如下

<context:component-scan base-package="aaa">
<context:include-filter 
type="annotation" 
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>


问题来了。

当我在工程里的src存在这个Test.java文件,
启动服务,然后在浏览器里输入XXXX/aaa.bo,
可以正常执行到Test这个aaa方法


但是,
如果我把这个Test.java生成class文件,然后再打成一个jar包,
放在另一个工程的WEB-INFO\lib目录下

当我启动另外的这个工程的时候,
执行XXXX/aaa.bo的时候,就出现了下面的错误
WARN[org.springframework.web.servlet.PageNotFound:1108]No mapping found for HTTP request with URI [/XXXX/aaa.bo] in DispatcherServlet with name 'xxxDispatcher'

请问:
如果控制器打成jar包就不能被spring扫描到了吗?
按说如果放在classpath里,是可以被找到的,
而且反射机制读取的注解也无所谓在不在jar包啊???

那么,这个控制器就不能被打成jar包喽?
打包以后发布给别的工程当作通用的处理也是不行的吧?
还是我的方法有问题,缺少了什么步骤呢?

我潜意识里感觉我好像问了一个傻问题,
或者根本就是在什么地方不允许这么做,我没有意识到。。
求拍醒

谢谢

------解决方案--------------------
jar包其实是一个压缩包。
没有打成jar之前,程序寻找相关的东西,比如是一个路径/xxxProj/com/test/action/testAction可以找到,
如果打成jar后,程序寻找相关的东西,上面的就变成/xxxProj/后面是jar里面的资源。肯定是找不到。

程序找相关文件和在java里面import是不同的。

参考我之前探究类似问题:http://blog.csdn.net/withiter/article/details/11924095
------解决方案--------------------
可以找到的吧,打包的时候有个选项add directory entries这个勾选上就没问题了
------解决方案--------------------
路径没写入。