Как я могу удалить NullPointerException в Struts1.x

Я новичок в STRUTS и пытаюсь разработать простой пример. Когда я выполняю пример, я получаю следующую ошибку в интернет-браузере.

<< 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)

Может кто-нибудь выяснить, что я делаю неправильно и почему происходит эта ошибка.

Спасибо,
Анкит

3 ответа

Вы забыли / в вашем действии на html:form,

Вот как вы должны назвать свое действие в форме.

<html:form action="/login">

Обновление, убедитесь, что вы очистите все свои документы XML, включая JSP

Следующие (примеры) не были разрешены в валидаторе XML:

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

XML не позволяет пробелы внутри <></>, </> теги. Это также относится и к тегам.


Обновление, я нашел правильную проблему. Это ваша декларация для формы бобов в вашем struts-config.xml,

У тебя есть:

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

Вы закрываете свой <form-bean> дважды.

Решение:

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

Теперь это должно работать.:-) (Извините за поздний ответ, работа требует меня.)

Кроме того, я предлагаю использовать среду IDE, такую ​​как Eclipse или NetBeans, для выполнения своего проекта Struts (а не делать это вручную), особенно для объявлений XML.

Ну, эта ошибка из-за того, что вы не настроили ваш Struts-config.xml должным образом.

Вы должны указать конкретное имя Form-Bean, когда действие Form называется соответствующим образом.

Теперь посмотрим на код, который вы должны дать действие, как это.

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

но пока вы вызываете POJO также вместе, но вы должны вызвать этот бин, прежде чем делать POST-действие для помещения любых данных во взаимодействие с пользователем. поэтому сделайте одно новое действие, которое может вызвать bean-класс, прежде чем вызывать основное действие.

например:

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

таким образом, проблема будет решена.

Проверьте свой jsp. Он использует логин в качестве формы действия вместо LoginForm.

Другие вопросы по тегам