程序报错,前台界面出现空白。
java.lang.NullPointerException
at org.apache.jsp.WEB_002dINF.jsp.gsp.gspBasic.viewGspBasicAdv_jsp._jspService(viewGspBasicAdv_jsp.java:1307)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:371)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.neusoft.struts.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:85)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)
小弟好歹也学了半年了,发现报错关键字来自第一行
at org.apache.jsp.WEB_002dINF.jsp.gsp.gspBasic.viewGspBasicAdv_jsp._jspService(viewGspBasicAdv_jsp.java:1307)
于是我就分析这一行说了什么!
WEB_002dINF.jsp.gsp.gspBasic.viewGspBasicAdv_jsp 这是前半句这是我工程里存放页面jsp的地方以及文件名
这一行的关键字在后半句:jspService(viewGspBasicAdv_jsp.java:1307)这个地方
有“java.lang.NullPointerException”也就是空指针的意思。
那么jspService又是什么呢?
百度一下,jspService(){}:由jsp容器自动创建的处理jsp Page的方法,由jsp容器创建。
我大致能猜到,原来是我在jsp面页中加的
<%
String adv_flag = (String)request.getAttribute("adv_flag");
%>
类似于这样的小后台程序出现了空指针情况,也就是后台没有初始化定义变量或者传值给adv_flag
于是我就去后台javaBean里去寻找哪个地方调用了JSP中这段小后台程序,结果发现在一个判断是否添加了重复ID号的方法里,如果重复则面页显示重复,然后面页要显示失败动作。也就是我们在struts-config.xml中的配置的<action>语句 类似如下
<action name="gspXXXBean" path="/updateGspBasic" scope="session"
type="com.neusoft.struts.BeanAction" validate="false">
<forward name="success" path="/listGspBasic.do"/>
<forward name="failure" path="/WEB-INF/jsp/gsp/gspBasic/viewGspBasicAdv.jsp"/>
</action>
大家看其中的<forward name="failure" path="/WEB-INF/jsp/gsp/gspBasic/viewGspBasicAdv.jsp"/>
不就是失败了要返还到path="/WEB-INF/jsp/gsp/gspBasic/viewGspBasicAdv.jsp"这个面页么,修改的ID有重复则失败,失败则返还到这个面页。
这个面页里有上面说的
<%
String adv_flag = (String)request.getAttribute("adv_flag");
%>
这种小后台程序,如果我不赋值则报空指针的错。
思路搞明白了,我就在javaBean里修改ID的那个方法里给adv_flag赋值
ActionContext.getActionContext().getRequest().setAttribute(
"adv_flag", this.adv_flag); 这个语句就是后台向前台小程序传值的语句,我又长姿势了!也是上网查到的。
然后我的程序就好使啦!