Himalayas

博客园 首页 联系 订阅 管理

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即可,不用管各个数据库访问的实现。

 
posted on 2018-02-12 18:11  Himalayas  阅读(206)  评论(0编辑  收藏  举报