您的位置:首页 > 其它

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

2017-01-07 21:25 211 查看
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代码  


cfg=new AnnotationConfiguration();  

sf=cfg.buildSessionFactory();  

 

在这里没有写

 

Java代码  


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包的机制,后来去网上仔细搜了以下,才明白其原理,下面不废话,直接重点:

ava虚拟机是根据Java ClassLoader(类加载器)决定如何加载Class。  
系统默认提供了3个ClassLoader    
Root ClassLoader,ClassPath Loader,Ext ClassLoader  
我们也可以编写自己的ClassLoader,去加载特定环境下的Jar文件。    
能不能加载Jar,加载哪里的Jar,是由ClassLoader决定的。    
  
楼主的问题可能是 导入的仅仅是jar包的引用,例如在eclipse中通过build path加进user lib……(类似快捷方式)  
这种在Java Application中没问题,但在web Application中可能会出现找不到类的异常。  
在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": {}} 要加上又引号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ssh