dao里:
public class AffordDAOImpl implements AffordDAO { private static SqlMapClient sqlMapClient = null;
static { try {
Reader reader = com.ibatis.common.resources.Resources
.getResourceAsReader("ibatis/sql-map-config.xml");
sqlMapClient = com.ibatis.sqlmap.client.SqlMapClientBuilder
.buildSqlMapClient(reader);
} catch (IOException e) { e.printStackTrace();
}
} @Override
public List<Afford> getAllAfford() { List list = null; try {
list = sqlMapClient.queryForList("getAllAfford");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
service里:
public static AffordDAO aff=new AffordDAOImpl();

public List<Afford> getAll(){
List<Afford> list=null;
list=aff.getAllAfford();
return list;
}service层测试:
public static AffordService aff = new AffordService(); public static void main(String[] args) { List list = null; list = aff.getAll();

for(Afford afford:aff.getAll()){
System.out.println(afford.getAddress()+"=="+afford.getEnterArea());
}action里:public static AffordService aff = new AffordService(); @Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

List list=null;
System.out.println("-------------------------");
list=aff.getAll();
System.out.println("===========================");
HttpSession session=request.getSession();

session.setAttribute("list","list");

return mapping.findForward("success");
}
问题是:明明测试已经通过了,但页面调用action的时候 却报错 如下:
严重: Servlet.service() for servlet action threw exception
java.lang.ClassNotFoundException: com.ibatis.common.resources.Resources
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at com.isoftstone.dao.impl.AffordDAOImpl.<clinit>(AffordDAOImpl.java:19)
at com.isoftstone.service.AffordService.<clinit>(AffordService.java:11)
at com.isoftstone.web.action.AffordAction.<clinit>(AffordAction.java:19)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
action里用到的东西跟测试中用的完全一样的,测试通过action却报错,各位大牛帮忙解决下

解决方案 »

  1.   

    通过调试; 问题就出在 dao里的这句话上:Reader reader = com.ibatis.common.resources.Resources
                        .getResourceAsReader("ibatis/sql-map-config.xml");
    service层测试的时候它照常执行, 页面调用action的时候 报错如下:
    严重: Servlet.service() for servlet action threw exception
    java.lang.ClassNotFoundException: com.ibatis.common.resources.Resources
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at com.isoftstone.dao.impl.AffordDAOImpl.<clinit>(AffordDAOImpl.java:21)
    at com.isoftstone.service.AffordService.<clinit>(AffordService.java:11)
    at com.isoftstone.web.action.AffordAction.<clinit>(AffordAction.java:19)而action里用的东西明明和测试里的一样。 从没遇到过这样的问题,各位大虾帮忙啊。
      

  2.   

    貌似路径不对
    用相对对路径试下,找找原因还有问题
    session.setAttribute("list","list");
    你干嘛把一个字符串扔进去..
      

  3.   

    你的xml文件放在哪?这样:
    Reader reader = com.ibatis.common.resources.Resources
                        .getResourceAsReader("/ibatis/sql-map-config.xml"); 
      

  4.   

    路径应该是没问题的,因为测试类里调用dao能正常查出数据的         list=aff.getAll();
            
            HttpSession session=request.getSession();
            
            session.setAttribute("list","list");这里我把查出的结果绑定到页面啊 , 在页面中输出 
    <c:forEach items="list" var="sq" varStatus="index">
      

  5.   

    按3楼方法:报错 java.io.IOException: Could not find resource /ibatis/sql-map-config.xml
    原来的路径没问题的
      

  6.   


     list=aff.getAll(); HttpSession session=request.getSession(); session.setAttribute("list","list");这里错了   第一个list没引号
      

  7.   

    java.lang.ClassNotFoundException: com.ibatis.common.resources.Resources不会是少包吧~
      

  8.   


      public static DaoManager newDaoManager(Properties props) {
        try {
          Reader reader = Resources.getResourceAsReader(resource);
          return DaoManagerBuilder.buildDaoManager(reader, props);
        } catch (Exception e) {
          throw new RuntimeException("Could not initialize DaoConfig.  Cause: " + e, e);
        }
      }
      

  9.   

    回7楼:我service层的测试也是一层层往下掉的啊 但它能正确执行回8楼:谢谢,这确实是一个错误。但问题还没有解决,还是上面一样的错误,service层测试能查出,action调用出错:
    java.lang.ClassNotFoundException: com.ibatis.common.resources.Resources
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at com.isoftstone.dao.impl.AffordDAOImpl.<clinit>(AffordDAOImpl.java:21)
    at com.isoftstone.service.AffordService.<clinit>(AffordService.java:11)
    at com.isoftstone.web.action.AffordAction.<clinit>(AffordAction.java:19)
    从错误信息看: action --》service -->> dao -->> loader的时候出错了 就是这句:Reader reader = com.ibatis.common.resources.Resources
                        .getResourceAsReader("ibatis/sql-map-config.xml");

    最奇怪的是 测试类里 是一样调用的 却能正确执行痛苦中`````
      

  10.   

    这样 你重新发布一下程序因为你测试的时候,跑的是main方法,实际上时本地程序而程序真正运行的时候出错,此时是在服务器端运行(无论服务器和本地机器是不是同一台机器),路径一定不同重新编译发布,然后到tomcat或者其他容器下面,看是否能够找到对应的.jar和对应的.xml
    一点思路,lz试试吧~~~
      

  11.   

    服务器端程序(tomcat或者其他容器)缺少ibatis的jar包。
      

  12.   

    谢谢大家,问题已经解决了,把ibatis包复制到web-inf下的lib下就没问题了。但我还有一个困惑,希望大家指点下:我已经把ibatis的包建立了一个userlib引入工程了, 为什么还要在lib下手动加包? 
      

  13.   

    感觉CSDN越来越不行了 , 回答问题的越来越少了,是不是金融危机都转行了?