Spring里的坑
1. 配置文件配置controller,在Controller中使用注解配置的bean,会出现获取不到bean的情况
步骤一:使用在配置文件 springmvc.xml 中配置的方式配置controller
<bean name="login.action" class="com.orderonline.controller.admin.LoginController"></bean>
步骤二:在controller中获取 Automired 自动注入的bean
public class LoginController implements Controller{
@Autowired
private UserService userService;
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
System.out.println(userService); //这个将会打印 null
ModelAndView mav = new ModelAndView();
mav.setViewName("/admin/success.jsp");
return mav;
}
}
总结:要么都使用配置文件的方式配置bean,要么都使用注解的方式。
2. web.xml文件中的<welcome-file>配置springmvc的action
<welcome-file-list>
<!-- 访问项目的时候,如果不加具体的页面地址,默认访问的页面 -->
<welcome-file>index.action</welcome-file>
</welcome-file-list>
问题:
<welcome-file> 里面配置一个html页面或者jsp页面都没有问题,但是如果配置一个action就会出现访问不到的情况。
解决方法:
新建一个与action同名的 空文件。例如我这里的 action 是 index.action,Action代码如下:
@Controller
public class IndexController {
@Autowired
private IndexService indexService;
@RequestMapping("/index.action")
public ModelAndView initPage(){
ModelAndView mav = new ModelAndView();
// ... ...
mav.setViewName("/WEB-INF/index.jsp");
return mav;
}
}
那我就要在webapp下新建一个 index.action 文件,如下图:
3. Spring不引入 commons-logging.jar,报错:java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;
在使用Spring的时候,如果不导入 commons-logging.jar 就会报错;提示导入这个jar包。但是疑惑的是,我的项目中没有使用到这个jar包啊。
那么就只能是一个原因了。既然我们自己没有使用这个jar包的日志功能,那么就一定是Spring使用了这个jar包的日志功能。
所以当我们使用Spring的时候,我们的项目也就依赖commons-logging.jar了。
Spring依赖Commons-loggin.jar的原因:
我们都知道,使用了Spring的项目在添加日志打印功能的时候,只需要很简单的几个配置,就能把第三方的日志打印框架整合进来,例如强大的Log4j。(这里不讲Log4j的导入)。
那么为什么Spring对这些第三方日志打印框架有这么好的整合呢?
原因就是,给这些第三方日志框架提供了日志打印接口。而Spring实现这些日志打印接口的方法就是通过Commons-loggin.jar实现的。
Commons-loggin.jar的目的是为“所有的Java日志实现”提供一个统一的接口,它自身的日志功能平常弱,所以一般不会单独使用它。
在这里可以类比于JDBC的API接口:java提供操作数据库的接口,而操作数据库的驱动和api的实现由各个数据库的厂商来做。开发者只需要调用java的api即可,不用管各个数据库访问的实现。