如何删除 Struts1.x 中的 NullPointerException

发布于 11-16 19:27 字数 8635 浏览 3 评论 0原文

我是 STRUTS 新手,正在尝试制定简单的示例。当我执行该示例时,我在 Internet 浏览器上收到以下错误......

<< javax.servlet.ServletException: javax.servlet.jsp.JspException: Exception creating bean of class com.example.LoginForm >>

并且在 Eclipse 控制台中看到类似的错误,并在空指针异常上有附加行

<< SEVERE: Error creating form bean of class com.example.LoginForm
java.lang.NullPointerException >>

下面列出的是我的 struts-config.xml 的一部分

struts-config.xml - 提取

<struts-config>

< form-beans>   
  < form-bean name="loginRequest" type="com.example.LoginForm" />    
</form-bean>
< /form-beans>


< !-- =========================================== Global Forward Definitions -->

< global-forwards>  
< forward
   name="welcome"
   path="/Welcome.do"/>  
< /global-forwards>


< !-- =========================================== Action Mapping Definitions -->

< action-mappings>   
< action path="/login"
    name="loginRequest"
    type="com.example.LoginAction">   
 < forward name="success"
     path="/success.jsp">
 < /forward>    
 < forward name="failure"
     path="/login.jsp">
  < /forward>
 </action>    
 <action path="/Welcome"
    forward="/pages/Welcome.jsp"/>
< /action-mappings>


< !-- ======================================== Message Resources Definitions -->

< message-resources parameter="MessageResources" />

< /struts-config>    

我的 JSP login.jsp

< %@ taglib prefix="bean" uri="/WEB-INF/struts-bean.tld" %>    
< %@ taglib prefix="html" uri="/WEB-INF/struts-html.tld" %>

< bean:message key="title" />

< html:form action="login">

    <bean:message key="login.username"/>

    <html:text property="username"></html:text>

    <br>

    <bean:message key="login.password"/>

    <html:text property="password"></html:text>

    <br>

    <html:submit>
        <bean:message key="login.submit"/>
    </html:submit>

< /html:form>

LoginForm 类

package com.example;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm     
{     
    private String username;   
    private String password;

    public LoginForm()
    {

    }

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

LoginAction 类

package com.example;   

import javax.servlet.http.HttpServletRequest;    
import javax.servlet.http.HttpServletResponse;     

import org.apache.struts.action.Action;     
import org.apache.struts.action.ActionForm;     
import org.apache.struts.action.ActionForward;      
import org.apache.struts.action.ActionMapping;     

public class LoginAction extends Action   
{     
    @Override    
    public ActionForward execute(ActionMapping mapping, ActionForm form,    
            HttpServletRequest request, HttpServletResponse response)    
            throws Exception     
    {   
        LoginForm login = (LoginForm)form;     
        String name = login.getUsername();    
        String pass = login.getPassword();    

        if(name.equals("hello") && pass.equals("hello"))    
            return mapping.findForward("success");   
        else    
            return mapping.findForward("failure");    
    }    
}   

MessageResources.properties 类

title=Welcome   
login.username=Username    
loguin.password=Password    
login.submit=Submit

堆栈跟踪

org.apache.struts.util.RequestUtils createActionForm    
SEVERE: Error creating form bean of class com.example.LoginForm 
java.lang.NullPointerException
=========== ======================
    at org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:289)
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:259)
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:213)
    at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:526)
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:503)
    at org.apache.jsp.login_jsp._jspx_meth_html_005fform_005f0(login_jsp.java:122)
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:79)
    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:374)
    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.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)

Jun 23, 2011 12:56:47 PM org.apache.struts.util.PropertyMessageResources loadLocale
WARNING:   Resource org/apache/struts/taglib/html/LocalStrings_en_US.properties Not Found.
Jun 23, 2011 12:56:47 PM org.apache.struts.util.PropertyMessageResources loadLocale
WARNING:   Resource org/apache/struts/taglib/html/LocalStrings_en.properties Not Found.
Jun 23, 2011 12:56:47 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception <br/><br/>
javax.servlet.jsp.JspException: Exception creating bean of class com.example.LoginForm under form name loginRequest
    at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:536)
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:503)
    at org.apache.jsp.login_jsp._jspx_meth_html_005fform_005f0(login_jsp.java:122)
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:79)
    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:374)
    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.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)

任何人都可以弄清楚我做错了什么以及为什么会发生此错误。

谢谢,
安基特

I am new to STRUTS and am trying to work out simple example . When I execute the example I get the following error on the internet browser..

<< javax.servlet.ServletException: javax.servlet.jsp.JspException: Exception creating bean of class com.example.LoginForm >>

and in the Eclipse console see a similar error with additional line on Null pointer exception

<< SEVERE: Error creating form bean of class com.example.LoginForm
java.lang.NullPointerException >>

Listed below is part of my struts-config.xml

struts-config.xml - Extract

<struts-config>

< form-beans>   
  < form-bean name="loginRequest" type="com.example.LoginForm" />    
</form-bean>
< /form-beans>


< !-- =========================================== Global Forward Definitions -->

< global-forwards>  
< forward
   name="welcome"
   path="/Welcome.do"/>  
< /global-forwards>


< !-- =========================================== Action Mapping Definitions -->

< action-mappings>   
< action path="/login"
    name="loginRequest"
    type="com.example.LoginAction">   
 < forward name="success"
     path="/success.jsp">
 < /forward>    
 < forward name="failure"
     path="/login.jsp">
  < /forward>
 </action>    
 <action path="/Welcome"
    forward="/pages/Welcome.jsp"/>
< /action-mappings>


< !-- ======================================== Message Resources Definitions -->

< message-resources parameter="MessageResources" />

< /struts-config>    

My JSP login.jsp

< %@ taglib prefix="bean" uri="/WEB-INF/struts-bean.tld" %>    
< %@ taglib prefix="html" uri="/WEB-INF/struts-html.tld" %>

< bean:message key="title" />

< html:form action="login">

    <bean:message key="login.username"/>

    <html:text property="username"></html:text>

    <br>

    <bean:message key="login.password"/>

    <html:text property="password"></html:text>

    <br>

    <html:submit>
        <bean:message key="login.submit"/>
    </html:submit>

< /html:form>

The LoginForm class

package com.example;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm     
{     
    private String username;   
    private String password;

    public LoginForm()
    {

    }

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

The LoginAction class

package com.example;   

import javax.servlet.http.HttpServletRequest;    
import javax.servlet.http.HttpServletResponse;     

import org.apache.struts.action.Action;     
import org.apache.struts.action.ActionForm;     
import org.apache.struts.action.ActionForward;      
import org.apache.struts.action.ActionMapping;     

public class LoginAction extends Action   
{     
    @Override    
    public ActionForward execute(ActionMapping mapping, ActionForm form,    
            HttpServletRequest request, HttpServletResponse response)    
            throws Exception     
    {   
        LoginForm login = (LoginForm)form;     
        String name = login.getUsername();    
        String pass = login.getPassword();    

        if(name.equals("hello") && pass.equals("hello"))    
            return mapping.findForward("success");   
        else    
            return mapping.findForward("failure");    
    }    
}   

The MessageResources.properties class

title=Welcome   
login.username=Username    
loguin.password=Password    
login.submit=Submit

Stack Trace

org.apache.struts.util.RequestUtils createActionForm    
SEVERE: Error creating form bean of class com.example.LoginForm 
java.lang.NullPointerException
=========== ======================
    at org.apache.struts.config.FormBeanConfig.createActionForm(FormBeanConfig.java:289)
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:259)
    at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:213)
    at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:526)
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:503)
    at org.apache.jsp.login_jsp._jspx_meth_html_005fform_005f0(login_jsp.java:122)
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:79)
    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:374)
    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.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)

Jun 23, 2011 12:56:47 PM org.apache.struts.util.PropertyMessageResources loadLocale
WARNING:   Resource org/apache/struts/taglib/html/LocalStrings_en_US.properties Not Found.
Jun 23, 2011 12:56:47 PM org.apache.struts.util.PropertyMessageResources loadLocale
WARNING:   Resource org/apache/struts/taglib/html/LocalStrings_en.properties Not Found.
Jun 23, 2011 12:56:47 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception <br/><br/>
javax.servlet.jsp.JspException: Exception creating bean of class com.example.LoginForm under form name loginRequest
    at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:536)
    at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:503)
    at org.apache.jsp.login_jsp._jspx_meth_html_005fform_005f0(login_jsp.java:122)
    at org.apache.jsp.login_jsp._jspService(login_jsp.java:79)
    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:374)
    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.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)

Can anyone figure out what I am doing wrong and why this error is occuring.

Thanks,
Ankit

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

输什么也不输骨气 2024-11-23 19:27:22

您在 html:form 上的操作中忘记了 /

这就是您在表单中调用操作的方式。

<html:form action="/login">

更新,确保清除所有 XML 文档,包括 JSP

XML 验证器中不允许使用以下内容(示例):

  • < form-b​​eans>
  • < /struts-config>

XML 不允许在 <> 标记内有空格。这也适用于标签。


更新,我发现正确问题。这是 struts-config.xml 中表单 bean 的声明。

您:

<form-beans>   
    <form-bean name="loginRequest" type="com.example.LoginForm" />    
</form-bean>
</form-beans>

您正在关闭 两次

解决方案:

< form-beans>
    <form-bean name="loginRequest" type="com.example.LoginForm" />    
</form-beans>

现在,这必须有效。 :-) (抱歉回复晚了,工作需要我。

此外,我建议使用 IDE(例如 Eclipse 或 NetBeans)来完成 Struts 项目(而不是通过手动输入来完成)用于您的 XML 声明。

You forgot a / in your action on html:form.

This is how you should call your action in the form.

<html:form action="/login">

Update, Make sure you clean all your XML documents including your JSP's

The following (examples) were not allowed in the XML validator:

  • < form-beans>
  • < /struts-config>

XML doesn't allow spaces inside the <></>, </> tags. This also applies to the tags too.


Update, I found the correct problem. It's your declaration for form beans in your struts-config.xml.

You have:

<form-beans>   
    <form-bean name="loginRequest" type="com.example.LoginForm" />    
</form-bean>
</form-beans>

You're closing your <form-bean> twice.

Solution:

< form-beans>
    <form-bean name="loginRequest" type="com.example.LoginForm" />    
</form-beans>

Now, this must work. :-) (Sorry for the late reply, work demands me.)

Also, I suggest using an IDE such as Eclipse or NetBeans to do your Struts project (and not do this by hand-typing) especially for your XML declarations.

反差帅 2024-11-23 19:27:22

检查您的 jsp。它使用 login 作为操作表单,而不是 LoginForm

Check Your jsp.Its using login as action form instead of LoginForm.

预谋 2024-11-23 19:27:22

这个错误是因为您没有正确配置 Struts-config.xml 。

当相应地调用表单的操作时,您必须给出特定的 Form-Bean 名称。

现在看看你的代码,你已经给出了这样的操作。

< action path="/login" name="loginRequest" type="com.example.LoginAction">   
 < forward name="success" path="/success.jsp">< /forward>

但是,虽然您也一起调用 POJO,但您必须在执行 POST 操作以将任何数据放入用户交互之前调用该 bean。
因此,在调用主操作之前,创建一个可以调用 bean 类的新操作。

例如:

< action path="/loginPre" name="loginRequest" forward="/youloginformname.jsp">  
</action>

这样问题就会得到解决。

Well that error is because of you have not configure you Struts-config.xml properly.

you have to give particular Form-Bean name when action of the Form is called Accordingly.

now look at you code you have give action like this.

< action path="/login" name="loginRequest" type="com.example.LoginAction">   
 < forward name="success" path="/success.jsp">< /forward>

but while u are calling POJO also together but you have to call that bean before you make POST action for putting any data into the user interaction.
so make one new action which can call bean class before you main action is called.

for example:

< action path="/loginPre" name="loginRequest" forward="/youloginformname.jsp">  
</action>

that way problem will get solved.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文