Struts.xml配置问题
可是说这里是重灾区,基本控制台中的报错没有自己工程中的内容而是struts的jar包报错,那么很大程度就是xml文件的配置有错。
Unable to intantiate Action!
本想通过action无耦合度实现servlet的api接口,在Struts初学阶段把action类声明成了抽象类。于是乎便出现了报错。
//实现Servlet的api接口声明成抽象类
public abstract class Test implements ServletRequestAware, SessionAware, ServletContextAware{
}
所以只要使用public类并实现其接口下的方法即可。
public class Test implements ServletRequestAware, ServletResponseAware, ServletContextAware {
@Override
public void setServletContext(ServletContext arg0) {
// TODO Auto-generated method stub
}
@Override
public void setServletResponse(HttpServletResponse arg0) {
// TODO Auto-generated method stub
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
}
}
javax.el.PropertyNotFoundException
出现这个报错是源于属性未找到,纠于报错是指向某个类没有找到url属性,但根据这个指向去找根源,却是没有半点头绪,根本就是一个死路。其实转念一想,便了解报错前是进行了跳转操作,那么也就说出问题极大可能跟Struts.xml配置的url有关系。于是乎,找到了配置文件,发现跳转的页面父目录出错。
但这里不免让我有点疑惑,这里有多个相似的配置,虽然只是跳转的父目录不一样,Action不同,但页面的结构与result返回都几乎无差,为什么仅仅是在该action跳转到其他action配置的目录结构下也会出现错误,其内部的解析以及逻辑层分析这些目前难以寻迹的求证有待多多通过记录尝试来了解。
将原menu目录改为了role目录
报着不撞南墙不回头的态度,我尝试了几次其他的配置改变来确定我所想是否正确,结果发现是给action类添加了泛型这一导航,使得struts2能够精确的找到JavaBeans,所以配置的url出错才算真的解决。
java.lang.NullPointerException com.zc.action.RoleAction.menuTree(RoleAction.java:66) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
- ...
- 首先sun.* 或者org.*,都是源码,这些信息不是排查Bug 的重点
- 一般异常抛出是自己的业务代码有漏洞, 才会触发一系列的信息抛出;
- 先找异常信息中的Cause by ... 这是此次异常抛出的原因,
- 然后先看异常信息中第一条和当前项目有关业务代码,
- 看看信息指定的类的方法某一行为什么抛出空指针异常.
- 比如上面这个是自己写的RoleAction.java 文件中方法menuTree抛出的异常,
- 运行中发现第66 行存在为null 的对象.
SSH整合
SSH就是Struts2 + Spring + Hibernate三个框架有Spring作桥梁将三个框架“无缝”衔接起来的这么一个开发模式
报错内容为:
Unable to load configuration Struts Cofigration no found;
case by: Cannot locate the chosen ObjectFactory implementation: spring
大概是以上的报错信息,其根源是由于Struts2要由Spring引入则需要配置一个jar包
struts2-spring-plugin-2.3.16.1.jar。Struts有三个可以引入外部插件的jar包,在Struts2使用外部插件则一定要引入,反之不需要时则不能引入(引入也会报错)。一个是使用注解引入的jar包,另一个是使用jason使用的jar包。