0

私は Struts を初めて使用します。Struts Web アプリケーションの作成方法に関するチュートリアルに従います。ここに私が作成したファイルがあります。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
 <web-app>
 <display-name>Mon application Struts de tests</display-name>
 <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
          <param-name>config</param-name>
          <param-value>struts-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Struts-config.xml

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config> 
<form-beans>
   <form-bean name="HelloWorldForm" type="com.hello.HelloWorldFrom" />
   <form-bean name="LoginForm" type="com.test.LoginForm.LoginForm"/>
</form-beans> 
<action-mappings type="org.apache.struts.action.ActionMapping">
   <action path="/helloWorld" type="com.hello"  name="HelloWorldForm">
    <forward name="success" path="/HelloWorld.jsp" />
   </action>
   <action path="login" parameter="" input="/index.jsp" scope="request"
      name="loginForm" type="com.test.controller.LoginAction">
      <forward name="succes" path="/accueil.jsp" redirect="false" />
      <forward name="echec" path="/index.jsp" redirect="false" />
   </action>
</action-mappings> 

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page language="java" %> 
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
<html:html locale="true">
<head>
<title>authentication</title>
<html:base/>
</head>
<body bgcolor="white">
<html:form action="login" focus="nameUserr">
  <table border="0" align="center">
    <tr>
      <td align="right">
        User:
      </td>
      <td align="left">
        <html:text property="nameUserr" size="20" maxlength="20"/>
      </td>
    </tr>
    <tr>
      <td align="right">
        Password :
      </td>
      <td align="left">
      <html:password property="psdUser" size="20" maxlength="20"
                      redisplay="false"/>
      </td>
    </tr>
    <tr>
      <td align="right">
        <html:submit property="submit" value="Submit"/>
      </td>
      <td align="left">
        <html:reset/>
      </td>
    </tr>
  </table>
</html:form>

LoginAction.java

package com.test.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.*;
import com.test.LoginForm.LoginForm;
public class LoginAction extends Action{

public ActionForward execute(ActionMapping mapping, 
        ActionForm form, 
        HttpServletRequest req, 
        HttpServletResponse res) throws Exception {

            String result = null;
            String nomUtilisateur = ((LoginForm) form).getNameUser();
            String mdpUtilisateur = ((LoginForm) form).getPsdUser();

            if (nameUser.equals("xyz") && psdUser.equals("xyz")) {
            result = "succes";
            } else {
            result = "failure";
            }

            return mapping.findForward(result);
            }
 }

ログインフォーム.java

package com.test.LoginForm;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class LoginForm extends ActionForm{
  String nameUser;

  String psdUser;

  public String getpsdUser() {
    return psdUser;
  }

  public void setpsdUser(String psdUser) {
    this.psdUser= psdUser;
  }

  public String getnameUser() {
    return nameUser;
  }

  public void setnameUser(String nameUser) {
    this.nameUser= nameUser;
  }

  public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    ActionErrors errors = new ActionErrors();
    return errors;
  }

  public void reset(ActionMapping mapping, HttpServletRequest request) {
    this.psdUser= null;
    this.nameUser= null;
  }

}

しかし、実行すると、次のエラーが発生しました

Etat HTTP 500 - javax.servlet.ServletException: javax.servlet.jsp.JspException: ActionMappings または ActionFormBeans コレクションが見つかりません

EDIT : 完全なスタック トレース

Report type Exception 

Message javax.servlet.ServletException: javax.servlet.jsp.JspException: Can not find ActionMappings gold ActionFormBeans collection
description The server encountered an internal error that prevented it from fulfilling the request.

exception
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Can not find ActionMappings gold ActionFormBeans collection
org.apache.jasper.servlet.JspServletWrapper.handleJspException (JspServletWrapper.java:549)
org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service (JspServlet.java:339)
javax.servlet.http.HttpServlet.service (HttpServlet.java:727)

Parent cause

javax.servlet.ServletException: javax.servlet.jsp.JspException: Can not find ActionMappings gold ActionFormBeans collection
org.apache.jasper.runtime.PageContextImpl.doHandlePageException (PageContextImpl.java:916)
org.apache.jasper.runtime.PageContextImpl.handlePageException (PageContextImpl.java:845)
org.apache.jsp.index_jsp._jspService (index_jsp.java:112)
org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service (HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service (JspServlet.java:339)
javax.servlet.http.HttpServlet.service (HttpServlet.java:727)

Parent cause

javax.servlet.jsp.JspException: Can not find ActionMappings gold ActionFormBeans collection
org.apache.struts.taglib.html.FormTag.lookup (FormTag.java:798)
org.apache.struts.taglib.html.FormTag.doStartTag (FormTag.java:506)
org.apache.jsp.index_jsp._jspx_meth_html_005fform_005f0 (index_jsp.java:189)
org.apache.jsp.index_jsp._jspx_meth_html_005fhtml_005f0 (index_jsp.java:143)
org.apache.jsp.index_jsp._jspService (index_jsp.java:99)
org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service (HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service (JspServlet.java:339)
javax.servlet.http.HttpServlet.service (HttpServlet.java:727)
Note The complete trace of the mother cause of this error is available in the log files for Apache Tomcat / 7.0.59.

私はグーグルで検索し、提案されたすべての解決策を試しましたが、エラーは解決しません。任意のアイデアください。

PS:Struts 1.1を使用しています

4

1 に答える 1

1

struts-config.xmlファイル内のは</action-mappings>代わりに<struts-config>

また、すべてのファイルに多くのエラーがあります。そのため、コードが正しいかどうかを確認しようとしていないようです。

1)web.xmlファイル内

DTD 宣言に問題があります。次のようになります。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

2)struts-config.xmlファイル内:

フォーム Bean 名を次のように宣言しましLoginFormた。actionloginForm

またforward、アクション クラスが を返したときに何をしたいのかを示す宣言もありませんfailure

したがって、コードは次のようになります。

   <action path="/login" parameter="" input="/index.jsp" scope="request"
      name="LoginForm" type="com.test.controller.LoginAction">
      <forward name="succes" path="/accueil.jsp" redirect="false" />
      <forward name="echec" path="/index.jsp" redirect="false" />
      <forward name="failure" path="/loginFailed.jsp" redirect="false" />
   </action>

3)index.jsp複数の問題がある場合:

a) taglib 宣言は次のようになります (Struts 1.3.10 の場合):

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="logic" %>

b) struts html カスタム タグにはlocale、struts html タグを閉じていないことを示す index.jsp とも呼ばれる属性がありません。

これをチェックして:

<html:html>
......
</html:html>

c) プロパティ宣言:

<html:text property="nameUserr" size="20" maxlength="20"/>

フォーム Bean には呼び出されたプロパティnameUserrがありLoginFormますが、宣言されたプロパティがnameUserあるため、jsp ファイルのコードを次のように変更します。

<html:text property="nameUser" size="20" maxlength="20"/>

4) LoginForm Bean の getter メソッドと setter メソッドが間違っています。それらは次のようになります。

public String getNameUser() {
    return nameUser;
}

public void setNameUser(String nameUser) {
    this.nameUser = nameUser;
}

public String getPsdUser() {
    return psdUser;
}

public void setPsdUser(String psdUser) {
    this.psdUser = psdUser;
}

5) 最後に、LoginActionアクション クラスでは、比較が正しくありません。次のようにする必要があります。

        String nomUtilisateur = ((LoginForm) form).getNameUser();
        String mdpUtilisateur = ((LoginForm) form).getPsdUser();

        if (nomUtilisateur.equals("xyz") && mdpUtilisateur.equals("xyz")) {
        result = "succes";
        } else {
        result = "failure";
        }
于 2015-04-02T09:19:33.550 に答える