整合ssh项目时所遇到的问题总结

1.异常:/hibernate.cfg.xml not found

使用spring整合hibernate之后,sessionFactory由spring管理,所以再用hibernate的Configuration conf = new Configuration().configure();就会找不到配置文件,这时候必须用spring的sessionFactory或者使用spring提供的hibernateTemplate,用sessionFactory不能管理事务,用hibernateTemplate能管理事务。

2.hibernate.dialect' must be set when no Connection available错误

Java代码   收藏代码
  1. cfg=new AnnotationConfiguration();  
  2. sf=cfg.buildSessionFactory();  

 

在这里没有写

 

Java代码   收藏代码
  1. cfg=new AnnotationConfiguration().configure();  

       缺少的是configure();

 添加这句话之后程序OK.

 

 new Configuration()默认是读取hibernate.properties

 所以使用new Configuration().configure()来读取hibernate.cfg.xml文件


3.java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL,spring获取context


今天学习spring项目的时候出现了下面的错误信息:

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

    虽然问题一眼就知道是这句话:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener


  但是还是有点迷糊,因为以前练习spring的时候,是把jar包都复制到WEB-INF/Lib目录下的,但是最近练习项目的时候都是自己建立自己不同的User libaraies,很明显我已经导入了这些jar包,但是却提示这样的信息..............

看来自己对于JVM是如何引入我们所需要的第三方jar包的机制,后来去网上仔细搜了以下,才明白其原理,下面不废话,直接重点:

  1. ava虚拟机是根据Java ClassLoader(类加载器)决定如何加载Class。  
  2. 系统默认提供了3个ClassLoader    
  3. Root ClassLoader,ClassPath Loader,Ext ClassLoader  
  4. 我们也可以编写自己的ClassLoader,去加载特定环境下的Jar文件。    
  5. 能不能加载Jar,加载哪里的Jar,是由ClassLoader决定的。    
  6.   
  7. 楼主的问题可能是 导入的仅仅是jar包的引用,例如在eclipse中通过build path加进user lib……(类似快捷方式)  
  8. 这种在Java Application中没问题,但在web Application中可能会出现找不到类的异常。  
  9. 在WEB Application中jar包最好放在webroot或webcontent下的lib文件夹内,特别是xml中用到的jar包。

原来是我们自使用类似于Ant来获取类的时候是不能象UserLibaray来使用的,因为我们建立的是一个web app,而web app使用的是自定义的ClassLoader,而非JVM中的存在的三种ClassLoader(如上面所说),因此它无法识别出我们写在xml文件中的第三方类库的class文件,而只有我们写在src目录下的java文件才能使用,因此,我们必须要把第三方的类库放入到lib目录下,web app 才会识别我们定义在xml中的类了  .

    通这个错误,也让我对classloader的认识也进了一步.虽然以前看过周志明的深入JVM一书中关于类加载器分派体系的介绍,但是不太理解,这样一来,自己也多了一些体会.


 

4.jquery和struts的结合

1.在 $("#myform").validate({}); 其中#myform这里指的是id为myform的表单 

2.rules: {title: {}} 其中的title指的是name为title的input等表单的相关项

3.当input中name使用sort.name这样的命名方式时, 则rules: {"sort.title": {}} 要加上又引号

猜你喜欢

转载自blog.csdn.net/yuwenlanleng/article/details/54178216
今日推荐