- PR -

struts1.2.8で、表示用JSPファイルが表示されない。

1
投稿者投稿内容
みっふぃー
会議室デビュー日: 2007/07/07
投稿数: 5
投稿日時: 2007-07-09 15:52
はじめまして、ストラッツ初心者のみっふぃーです。

TOMCAT5.5.20、struts1.2.8で、簡単なストラッツサンプルをテストしています。
しかし、サーバーエラーが表示され、うまく表示用JSPファイルが表示されない
状態です。

以下に、表示用JSPファイル(page1.jsp)、struts-config.xml、web.xml、Page1ActionForm.java(アクションフォーム)、Page1Action(アクション)ファイルの中身を書き出します。

====page1.jsp====
<%@ page contentType="text/html; charset=EUC-JP" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" />
<title></title>
</head>
<body>
<html:form method="POST" action="action1.do" >
<html:text property="text1" readonly="true" size="40" />
<br/>
<html:text property="field1" />
<br/>
<html:submit value="OK" />
</html:form>
</body>
</html:html>
=========================

====struts-config.xml====
<?xml version="1.0"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software
Foundation//DTD Struts Configuration 1.2//EN"
"http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<form-beans>
<form-bean name="page1form" type="jp.tuyano.framework.Page1ActionForm" />
</form-beans>
<action-mappings>
<action name="page1form" type="jp.tuyano.framework.Page1Action"
path="/action1" input="/page1.jsp" />
</action-mappings>
</struts-config>
===============

====web.xml====
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

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

<jsp-config>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
============================

====Page1ActionForm.java====
package jp.tuyano.framework;

import java.io.UnsupportedEncodingException;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;

public class Page1ActionForm extends ActionForm {

private static final long serialVersionUID=1L;
private String text1;
private String field1;

public void setText1(String text1){
this.text1=text1;
}

public String getText1(){
return text1;
}

public void setField1(String field1){
this.field1=field1;
}

public String getField1(){
return field1;
}

public void reset(ActionMapping mapping,HttpServletRequest request) {
super.reset(mapping,request);
try{
request.setCharacterEncoding("EUC-JP");
this.setText1("お名前は?");
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}
}

}
========================

====Page1Action.java====
package jp.tuyano.framework;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForward;

public class Page1Action extends Action {

public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception
{
Page1ActionForm page1form=(Page1ActionForm)form;
String input=page1form.getField1();
page1form.setText1("こんにちわ、"+input+"さん!");

return mapping.getInputForward();
}
}
====================

これらのファイルを本の記述とおりの場所に配置し、
http://localhost:8080/struts-test/page1.jsp
を叩いてアクセスを試みると、以下のようなエラーメッセージが
表示されます。

====エラーメッセージ====
HTTPステータス 500 -
type: 例外レポート
メッセージ:
説明: The server encountered an internal error () that prevented it from fulfilling this request.
例外:
org.apache.jasper.JasperException: ActionMappingsまたはActionFormBeansコレクションが見つかりません
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:512)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

原因:
javax.servlet.ServletException: ActionMappingsまたはActionFormBeansコレクションが見つかりません
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:843)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
org.apache.jsp.page1_jsp._jspService(page1_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


原因
javax.servlet.jsp.JspException: ActionMappingsまたはActionFormBeansコレクションが見つかりません
org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:747)
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:443)
org.apache.jsp.page1_jsp._jspx_meth_html_form_0(page1_jsp.java:131)
org.apache.jsp.page1_jsp._jspx_meth_html_html_0(page1_jsp.java:104)
org.apache.jsp.page1_jsp._jspService(page1_jsp.java:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


注意 原因のすべてのスタックトレースは、Apache Tomcat/5.5.20のログに記録されています
====================

補足:webapps/struts-test/WEB-INF/lib内には、commons-beanutils.jar、commons-digester.jar、struts.jarの三つのjarを配置してあります。
気づいたこと、とは言っても、スペルチェックと配置場所チェックぐらいですが、、
はおこなっております。また、j2sdk1.4.2_14とj2sdk1.5.0_10の両方で、アクション
ファイルとアクションフォームファイルのコンパイルは行って試してみました。

どのようなことでもかまいませんので、返答をお待ちしております。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-07-09 16:52
◆page1.jspに書いてあるhtmlタグライブラリのつぶやき
「アクションフォームが見当たらないじゃないの!やめだ、もう処理してあげない!」

page1.jspに直接アクセスした場合、Strutsフレームワークを通らずTomcat(APサーバ)
がダイレクトにJSPを処理してしまうので、Strutsフレームワークが必要なデータを設定
してくれることを期待しているhtmlタグライブリが怒ってしまったという次第だと思い
ます。1.2.8だと確かactionタグにJSPを定義することができたはずなので、JSPへのマッ
ピングを作って、ほにゃらら.doでJSPをアクセスしてみると良いかもしれないです。
※Forwardアクションで定義する方法は、もう古いのかもしれない・・・
初期化専用のアクションを作ってしまう方法も、昔やったっけかな。(JSP表示するだけ
にしては面倒だから、お勧めしません)

設定の書き方は調べてねー。

朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-07-09 21:33
あ〜 http://struts.apache.org/tags-html 等のタグライブラリを使用している場合。

jsp <html:form action="/Action.do">〜</html:form>

struts-config

<form-bean name="form"〜

<action path="/Action" name="form"〜

という記述をまもっていればJSP直接起動もできます。
みっふぃー
会議室デビュー日: 2007/07/07
投稿数: 5
投稿日時: 2007-07-10 10:35
返答、どうも有難うございます。

設定の書き方(page1.jsp)が、TOMCAT5.5.20に適していないのが、根本原因
とみて良いのでしょうか?

もともと、page1.jsp、struts-config.xml、web.xml、Page1ActionForm、Page1Action
とstruts1.2.8(struts-html.tldを含む)に関しては、ある本の写しと、添付されていた
ものを使い、TOMCAT5.5.20に関しては、別の本に添付されていたものを使っているので、組み合わせがうまくない。ということでしょうか?

TOMCAT5.5.20に添付していたサンプル(struts1.2.9用)を表示させるのは、
すんなりと出来たので、今回の組み合わせで試すというのは、ちょっとしばらく
おいておこうか、とも考えています。

ちなみに、page1.jspにおいて、
<html:form action="/action1"> と書いてみたものを試したのですが、
以下のようなエラーが出てきました。

====================
type 例外レポート

メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

org.apache.jasper.JasperException: Exception in JSP: /page1.jsp:10

7: <title></title>
8: </head>
9: <body>
10: <html:form action="/action1">
11: <html:text property="text1" readonly="true" size="40" />
12: <br/>
13: <html:text property="field1" />


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


原因

javax.servlet.ServletException: ActionMappingsまたはActionFormBeansコレクションが見つかりません
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:843)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:776)
org.apache.jsp.page1_jsp._jspService(page1_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


原因

javax.servlet.jsp.JspException: ActionMappingsまたはActionFormBeansコレクションが見つかりません
org.apache.struts.taglib.html.FormTag.lookup(FormTag.java:747)
org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:443)
org.apache.jsp.page1_jsp._jspx_meth_html_form_0(page1_jsp.java:130)
org.apache.jsp.page1_jsp._jspx_meth_html_html_0(page1_jsp.java:104)
org.apache.jsp.page1_jsp._jspService(page1_jsp.java:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


注意 原因のすべてのスタックトレースは、Apache Tomcat/5.5.20のログに記録されています
====================

当初、バージョンの違いで、書き方が大きく異なることを知らなかったので、
はまってしまいました。

小僧さん、杏さん、返答どうも有難うございます。



小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-07-10 11:53
引用:

設定の書き方(page1.jsp)が、TOMCAT5.5.20に適していないのが、根本原因
とみて良いのでしょうか?

もともと、page1.jsp、struts-config.xml、web.xml、Page1ActionForm、Page1Action
とstruts1.2.8(struts-html.tldを含む)に関しては、ある本の写しと、添付されていた
ものを使い、TOMCAT5.5.20に関しては、別の本に添付されていたものを使っているので、組み合わせがうまくない。ということでしょうか?




前提情報が少な過ぎですね、問題がぼやけるのでこういったことは最初に書きべきですよ。
片方のサンプルに手を加える方向がいいと思いますよ。

引用:

TOMCAT5.5.20に添付していたサンプル(struts1.2.9用)を表示させるのは、
すんなりと出来たので、今回の組み合わせで試すというのは、ちょっとしばらく
おいておこうか、とも考えています。



そうしてください。
それから、設定からソースまで丸投げタイプの質問は、識者がパスする傾向にあるのでご注意を。


[ メッセージ編集済み 編集者: 小僧 編集日時 2007-07-10 11:55 ]
みっふぃー
会議室デビュー日: 2007/07/07
投稿数: 5
投稿日時: 2007-07-10 16:00
リプライ、大変有難うございます。

====引用====
前提情報が少な過ぎですね、問題がぼやけるのでこういったことは最初に書くべきですよ。
片方のサンプルに手を加える方向がいいと思いますよ。
===========

そうですね、最初から何をやりたいかの全体像が分かっていたほうがいいですよね。

====引用====
それから、設定からソースまで丸投げタイプの質問は、識者がパスする傾向にあるのでご注意を。
===========

つかみどころがなかったもので、つい丸投げになってしまいました。
以後、気をつけます。どうも有難うございました。
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-07-11 00:07
struts-config.xml の <action-mapping>/ <form-beans>の設定がまずそうですね。
1

スキルアップ/キャリアアップ(JOB@IT)