1.地址栏中:http://localhost:8088/sshtest/user.do?act=register 报错:HTTP Status 404 - Servlet action is not available 原因是:struts-config.xml配置文件中的请求处理器类出错了(找不到类路径)解决办法:
2.报错 :javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection 原因: 工程里面的struts包.有损坏或某些struts包没有存在. 解决办法:重新创建一个工程,并且导入struts,然后将导入的struts包copy到目前的工厂的 WEB-INf/lib目录,重新部署,重新启动服务,就ok了
3.报错:java.lang.Long cannot be cast to java.lang.Integer
Long 无法转化成Integer类型.
这个异常 经常出现在hinbernate分页查询的时候.
例如:
注: super.pageQuery(hql,null,null,null);调用了一个父类的一个封装方法.查询时候使用
List list = this.getHibernateTemplate().executeFind(new HibernateCallback(){});
/**
* 查询所有用户记录总数
*/
public Integer getUsersCount() {
String hql = "select count(*) from Users";
List list = super.pageQuery(hql, null, null, null);
return (Integer) list.get(0);
}
原因:
这里在Hibernate2.0之前版本list.get(0)返回的是Integer类型.
但是在Hibernate3.0以后版本list.get(0)返回的是Long类型.
所以在这里不可以由Long型强转成Integer类型.
解决办法:
public Integer getUsersCount() {
String hql = "select count(*) from Users";
List list = super.pageQuery(hql, null, null, null);
Number num = (Number) list.get(0);
return num.intValue();
}
注:java.lang.Number是Integer,Long的父类.
4.报错:java.lang.NoSuchMethodError org.objectweb.asm.ClassVisitor.visit
(IILjavalangString;LjavalangString;[LjavalangString;LjavalangString;)V.txt
原因: 由于某些Spring和Hibernate的版本问题,其中导入包的时候,某些jar包发生了冲突.
解决办法: 删除工程下面WEB-INF/lib/asm-2.2.3.jar,然后在MyEclipse中刷新工程,
再重新部署工程,然后重启 Tomcat.
5. 报错 : Servlet Action is not available
(1). 将struts-config.xml文件中的
去掉
(2).然后在web.xml文件中加上这段代码就可以了.
contextConfigLocation
/WEB-INF/applicationContext.xml
context
org.springframework.web.context.ContextLoaderServlet
1
6.报错:'sessionFactory' or 'hibernateTemplate' is required
原因: 在dao操作类中需要注入HibernateTemplate来创建sessionFactory.
或者直接注入sessionFactory.
错误的写法:
解决办法:
要将这2个对象中的某一个注入到dao中.
第一种方法:
第二种方法:
7.报错: java.lang.IllegalStateException: No WebApplicationContext found:
no ContextLoaderListener registered?
原因: web.xml文件中的配置写错了
解决办法:在web.xml中加上
contextConfigLocation
/WEB-INF/classes/applicationContext.xml
context
org.springframework.web.context.ContextLoaderServlet
1
8.报错:No bean named 'sessionFactory' is defined
错误可能原因1:
在web.xml中加载applicationContext.xml文件的时候没有加载成功,看你的路径是否 正确,
这个配置错误,服务器启动的时候不会报错
错误可能原因2:
没有删除asm-2.2.3.jar文件.一定要直接从磁盘目录删除.然后刷新工程,重新部署 重启服务.
9.报错:sessionFactory或者hibernateTemplate找不到
有的时候,我们明明就在dao中注入了sessionFactory或hibernate,但是还是总是报错,说
sessionFactory或者hibernateTemplate找不到
下面这种情况会引发这种情况:
在struts中的formbean中的reset方法,往往我们用来初始化界面的一些显示值.
如一个注册,可能在这里先查询数据库,找到所有的部门信息,然后绑定在界面的下拉框中.
所以可能会在reset方法中调用业务层方法.(也有可能请求页面之前,先经过一个servlet或jsp,
在servlet里面调用业务层方法)
如果你在formbean中是这样写会报上面的错误:
ApplicationContext ap = new FileSystemXmlApplicationContext(
new String[] {
"E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\applicationContext.xml",
"E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\operatorbeans.xml",
"E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\actionbeans.xml" });
IUserService us = (IUserService) ap.getBean("userservice");
然后用us 直接调用方法.
原因: 在这里ApplicationContext ap = new FileSystemXmlApplicationContext(
new String[] {});
启动的实际上是另外一个spring容器,而不是刚刚启动服务的时候创建的那个spring容器.
解决办法:
在reset方法中:
ServletContext context = servlet.getServletContext();
ApplicationContext app = (ApplicationContext) context.getAttribute
(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
IDeptService ds = (IDeptService) app.getBean("deptservice");
this.depList = ds.selectAllDeps();
注:servlet是struts框架中间的一个对象,保存了web容器的很多信息
那么之前是怎样设置进去的呢?
// context.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,启动的时候创建的那个spring器);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/659894/viewspace-559930/ ,如需转载,请注明出处,否则将追究法律责任。