- - PR -
strusアプリケーションが動かない
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-24 22:46
はじめまして いつも拝見させていただいています。
strutsを勉強している初心者です。 環境は、以下の環境です。 struts:1.02 tomcat:4.0.4 JDK:1.4.0_01 上記環境でpostMessage.jspで入力し、showMessage.jspに入力値を表示させようとしていますが、postMessage.jspで「投稿」ボタンをクリックすると真っ白な画面が表示されてしまい、showMessage.jspが表示できません。 postMessage.jspとshowMessage.jspは、同じディレクトリ内にあります。 ソース、設定ファイル、tomcatのlogを添付しますので、何かアドバイスをいただけると 大変嬉しく思います。 1.postMessage.jsp <%@page contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <html:html> <head> <title>グルメ掲示板〜メッセージ投稿〜</title> </head> <body> <div align="center"> <h1>グルメ掲示板〜メッセージ投稿〜</h1> <html:form action="/postMessage"> <table border="0" cellpedding="5" width="500"> <tr> <td bgcolor="skyblue">お店の名前</td> <td bgcolor="Khaki"><html:text property="shopName" maxlength="20" size="20"/></td> </tr> <tr> <td bgcolor="skyblue">投稿者氏名</td> <td bgcolor="Khaki"><html:text property="criticName" maxlength="20" size="20"/></td> </tr> <tr> <td bgcolor="skyblue">メッセージ</td> <td bgcolor="Khaki"><html:textarea property="messageBody" cols="35" rows="3"/></td> </tr> </table> <html:submit property="submit" value="投稿"/> <html:reset value="リセット"/> </html:form> </div> </body> </html:html> 2.showMessage.jsp <%@page contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <html:html> <head> <title>グルメ掲示板〜メッセージ一覧〜</title> </head> <body> <div align="center"> <h1>グルメ掲示板〜メッセージ一覧〜</h1> <html:link page="/postMessage.jsp">戻る</html:link> <table border="0" cellpedding="5" width="500"> <logic:iterate id="oneMessage" name="gourmet.messages" scope="application"> <tr> <td colspan="2" bgcolor="skyblue"> <font size="6"><bean:write name="oneMessage" property="shopName"/></font> </td> </tr> <tr> <td bgcolor="Khaki">投稿者</td> <td bgcolor="Khaki"><bean:write name="oneMessage" property="criticName"/></td> </tr> <tr> <td bgcolor="Khaki">メッセージ</td> <td bgcolor="Khaki"><pre><bean:write name="oneMessage" property="messageBody"/></pre></td> </tr> <tr></tr><tr></tr> </logic:iterate> </table> </div> </body> </html:html> 3.PoatMessageForm.java /* * タイトルoatMessageForm.java * 説明 :アクションフォームBean * 変更履歴:初版 */ package gourmet; import org.apache.struts.action.*; /** * 基本掲示板アクションフォームBean * * @author * @version 1.0 */ public final class PostMessageForm extends ActionForm { private String shopName; private String criticName; private String messageBody; /** * shopNameアクセッサメソッド * * @author * @version 1.0 */ public void setShopName(String shopName) { this.shopName = shopName; } public String getShopName() { return shopName; } /** * criticNameアクセッサメソッド * * @author * @version 1.0 */ public void setCriticName(String criticName) { this.criticName = criticName; } public String getCriticName() { return criticName; } /** * messageBodyアクセッサメソッド * * @author * @version 1.0 */ public void setMessageBody(String messageBody) { this.messageBody = messageBody; } public String getMessageBody() { return messageBody; } } 4.PoatMessageAction.java /* * タイトルoatMessageAction.java * 説明 :アクションクラス * 変更履歴:初版 */ package gourmet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletContext; import org.apache.struts.action.*; import java.util.LinkedList; /** * 基本掲示板アクションクラス * * @author * @version 1.0 */ public final class PostMessageAction extends Action { public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest req,HttpServletResponse res) { ServletContext context = getServlet().getServletContext(); PostMessageForm postMessageForm = (PostMessageForm)form; // 例えばこのようにして、リクエストデータからお店の名前を取り出すことができます。 // String shopName = postMessageForm.getShopName(); LinkedList messages = (LinkedList)context.getAttribute("gourmet.messages"); // messageが空からセット if(messages == null) { messages = new LinkedList(); context.setAttribute("gourmet.messages",messages); } messages.addFirst(form); return (mapping.findForward("success")); } } 5.struts-config.xml(form,action部分を抜粋) <!-- ========== Form Bean Definitions =================================== --> <form-beans> <!-- Example logon form bean <form-bean name="logonForm" type="org.apache.struts.example.LogonForm"/> --> <!-- 掲示板form --> <form-bean name="postMessageForm" type="gourmet.PostMessageForm"/> </form-beans> <!-- 掲示板アクション --> <action path="/postMessage" type="gourmet.PostMessageAction" name="postMessageForm" scope="request"> <forward name="success" path="/showMessage.jsp"/> </action> 6.tomcatのログ(localhost_log) 2007-12-24 22:43:21 StandardManager[/manager]: 乱数発生器のクラス java.security.SecureRandom のシードを生成しています 2007-12-24 22:43:21 StandardManager[/manager]: 乱数発生器のシードの生成が完了しました 2007-12-24 22:43:21 ContextConfig[/manager]: 証明書をリクエストの属性値に追加します 2007-12-24 22:43:21 ContextConfig[/manager]: メソッド BASIC のオーセンティケータを設定します 2007-12-24 22:43:21 StandardWrapper[/manager:default]: コンテナサーブレット default をロードします 2007-12-24 22:43:21 default: init 2007-12-24 22:43:21 StandardWrapper[/manager:invoker]: コンテナサーブレット invoker をロードします 2007-12-24 22:43:21 invoker: init 2007-12-24 22:43:21 jsp: init 2007-12-24 22:43:22 StandardHost[localhost]: URL file:D:\Program Files\Apache Tomcat 4.0\webapps\gourmet からコンテキストパス /gourmet にWebアプリケーションをインストールします 2007-12-24 22:43:22 WebappLoader[/gourmet]: クラスリポジトリを作業ディレクトリ D:\Program Files\Apache Tomcat 4.0\work\Standalone\localhost\gourmet に配備します 2007-12-24 22:43:22 WebappLoader[/gourmet]: JAR /WEB-INF/lib/struts.jar を D:\Program Files\Apache Tomcat 4.0\webapps\gourmet\WEB-INF\lib\struts.jar に配備します 2007-12-24 22:43:22 StandardManager[/gourmet]: 乱数発生器のクラス java.security.SecureRandom のシードを生成しています 2007-12-24 22:43:22 StandardManager[/gourmet]: 乱数発生器のシードの生成が完了しました 2007-12-24 22:43:23 ContextConfig[/gourmet]: 証明書をリクエストの属性値に追加します 2007-12-24 22:43:23 StandardWrapper[/gourmet:default]: コンテナサーブレット default をロードします 2007-12-24 22:43:23 default: init 2007-12-24 22:43:23 StandardWrapper[/gourmet:invoker]: コンテナサーブレット invoker をロードします 2007-12-24 22:43:23 invoker: init 2007-12-24 22:43:23 action: init 2007-12-24 22:43:23 action: Loading application resources from resource ApplicationResources 2007-12-24 22:43:23 action: Initializing configuration from resource path /WEB-INF/struts-config.xml 2007-12-24 22:43:23 action: Process servletName=action, urlPattern=*.do 2007-12-24 22:43:23 action: Mapping for servlet 'action' = '*.do' 2007-12-24 22:43:23 jsp: init 2007-12-24 22:43:23 StandardHost[localhost]: URL file:D:\Program Files\Apache Tomcat 4.0\webapps\ROOT からコンテキストパス にWebアプリケーションをインストールします 2007-12-24 22:43:23 WebappLoader[]: クラスリポジトリを作業ディレクトリ D:\Program Files\Apache Tomcat 4.0\work\Standalone\localhost\_ に配備します 2007-12-24 22:43:23 StandardManager[]: 乱数発生器のクラス java.security.SecureRandom のシードを生成しています 2007-12-24 22:43:23 StandardManager[]: 乱数発生器のシードの生成が完了しました 2007-12-24 22:43:23 ContextConfig[]: 証明書をリクエストの属性値に追加します 2007-12-24 22:43:23 StandardWrapper[efault]: コンテナサーブレット default をロードします 2007-12-24 22:43:23 default: init 2007-12-24 22:43:23 StandardWrapper[:invoker]: コンテナサーブレット invoker をロードします 2007-12-24 22:43:23 invoker: init 2007-12-24 22:43:23 jsp: init 2007-12-24 22:43:23 StandardHost[localhost]: URL file:D:\Program Files\Apache Tomcat 4.0\webapps\tomcat-docs からコンテキストパス /tomcat-docs にWebアプリケーションをインストールします 2007-12-24 22:43:23 WebappLoader[/tomcat-docs]: クラスリポジトリを作業ディレクトリ D:\Program Files\Apache Tomcat 4.0\work\Standalone\localhost\tomcat-docs に配備します 2007-12-24 22:43:23 StandardManager[/tomcat-docs]: 乱数発生器のクラス java.security.SecureRandom のシードを生成しています 2007-12-24 22:43:23 StandardManager[/tomcat-docs]: 乱数発生器のシードの生成が完了しました 2007-12-24 22:43:24 ContextConfig[/tomcat-docs]: 証明書をリクエストの属性値に追加します 2007-12-24 22:43:24 StandardWrapper[/tomcat-docs:default]: コンテナサーブレット default をロードします 2007-12-24 22:43:24 default: init 2007-12-24 22:43:24 StandardWrapper[/tomcat-docs:invoker]: コンテナサーブレット invoker をロードします 2007-12-24 22:43:24 invoker: init 2007-12-24 22:43:24 jsp: init 2007-12-24 22:43:24 StandardHost[localhost]: URL file:D:\Program Files\Apache Tomcat 4.0\webapps\webdav からコンテキストパス /webdav にWebアプリケーションをインストールします 2007-12-24 22:43:24 WebappLoader[/webdav]: クラスリポジトリを作業ディレクトリ D:\Program Files\Apache Tomcat 4.0\work\Standalone\localhost\webdav に配備します 2007-12-24 22:43:24 StandardManager[/webdav]: 乱数発生器のクラス java.security.SecureRandom のシードを生成しています 2007-12-24 22:43:24 StandardManager[/webdav]: 乱数発生器のシードの生成が完了しました 2007-12-24 22:43:24 ContextConfig[/webdav]: 証明書をリクエストの属性値に追加します 2007-12-24 22:43:24 StandardWrapper[/webdav:default]: コンテナサーブレット default をロードします 2007-12-24 22:43:24 default: init 2007-12-24 22:43:24 StandardWrapper[/webdav:invoker]: コンテナサーブレット invoker をロードします 2007-12-24 22:43:24 invoker: init 2007-12-24 22:43:24 jsp: init 2007-12-24 22:43:52 jsp: init 2007-12-24 22:44:24 action: Processing a POST for /postMessage 2007-12-24 22:44:24 action: Setting locale 'ja' 2007-12-24 22:44:24 action: Looking for ActionForm bean under attribute 'postMessageForm' 2007-12-24 22:44:24 action: Creating new ActionForm instance of class 'gourmet.PostMessageForm' 2007-12-24 22:44:24 action: Storing instance under attribute 'postMessageForm' in scope 'request' 2007-12-24 22:44:24 action: Populating bean properties from this request 2007-12-24 22:44:24 action: Validating input form properties 2007-12-24 22:44:24 action: No errors detected, accepting input 2007-12-24 22:44:24 action: Looking for Action instance for class gourmet.PostMessageAction 2007-12-24 22:44:24 action: Double checking for Action instance already there 2007-12-24 22:44:24 action: Creating new Action instance 長文になってしまい恐縮ですが、よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2007-12-25 09:54
るぱんです。
解析中。汗
ここに、
と打ってみて、反応はありますか?
[ メッセージ編集済み 編集者: るぱん 編集日時 2007-12-25 12:28 ] [ メッセージ編集済み 編集者: るぱん 編集日時 2007-12-25 12:29 ] | ||||||||||||
|
投稿日時: 2007-12-25 22:14
るぱんさん
こんばんは 初心者です。 長文の中アドバイスをいただきありがとうございます。 アドバイス通り //Debug System.out.println("TEST"); を入れてみましたが、全く反応がないです。 tomcatのログ(localhost_log) も変化がありませんでした。 何かが不足しているのでしょうか。 見当がつかないのでアドバイスいただけると嬉しいです。 よろしくおねがいいたします。 | ||||||||||||
|
投稿日時: 2007-12-25 23:40
この手のご質問の場合必ず書いているんですが、慣れないうちは
サンプルプロジェクトに少しずつ手を加えて試す方法をお勧め しています、急がば回れということで。 | ||||||||||||
|
投稿日時: 2007-12-26 20:48
こんばんは。
すっごく気になるところがありました。
ここと、
ここ、です。 ファイル名とクラス名が異なりますが・・・タイプミスでしょうか・・・? #関係ないかもしれませんが。 #もしかして、プロジェクト内に #PoatMessageForm.javaとPostMessageForm.javaと、 #PoatMessageAction.javaとPostMessageAction.javaがあって、 #Post〜の方を見に行ってるとか・・・。 #でもExceptionでますよね・・・。 _________________ 普通?常識?何ですかそりは。 日本語は難しい・・・。 | ||||||||||||
|
投稿日時: 2007-12-27 00:51
struts-configのaction要素はaction-mappings要素で囲まれているのですよね?
うまく行かない原因はforward先jspの配置場所がおかしいからという可能性が高いと思われます。 jspがコンテキストルートの直下にあるように指定していますが、間違っていませんか?
細かいとこに気づきましたね〜 すばらしい。 ログからはアクションのインスタンスが生成されていることが分かりますから、 他に写し間違いなど無ければ、これはまあ"Poat"→"Post"の書き間違いでしょう。 標準出力がログに書き出されないとのことですが、ログに書き出すかどうかはTomcatの設定次第ですので、 行いたいなら設定を変更する必要があります。 ……と思ったのですが、Tomcat6では(5も?)管理画面が変わっていて設定項目が出てきませんね。 Tomcat4だと、この辺りを管理者用画面から設定できたはずですので確認してみてください。 Actionが実行されているかどうかですが、HttpServletResponseに出力してやって、画面で確認するという手もあります。 例えばexecuteに以下のコードを書いて
画面に This is a Test. が出力されれば通っていると判断できるという風に。 Log4J等のロギングクラスを利用してログ出力するようにできればベストなのですが。 お好みの方法で確認してみてください。 [編集] 勉強中なのですね。 であれば、今後のことを考えてjdk等のバージョンは新しいものを使用しておいたほうが良いです。 strutsについては1系と2系で多少異なるようですので、参考書籍との兼ね合いもありましょうから、 一概に新しいものをとは勧めません。 [/編集] [ メッセージ編集済み 編集者: 暁 編集日時 2007-12-27 00:57 ] | ||||||||||||
|
投稿日時: 2007-12-27 22:33
こんばんは 初心者です。
たくさんのアドバイスをいただき 感謝しています。 返信遅くなり申し訳ありません。 ー引用ー jspがコンテキストルートの直下にあるように指定していますが、間違っていませんか? ー引用ー についてですが、showMessage.jspは、webapps/gourmet配下にありますので コンテキストルートの直下にあります。 ファイル名は、それぞれPostMessageForm.java、PostMessageAction.javaに なっていましたのでファイル名違いでもありませんでした。 解決できなかったらアドバイスをいただきたいと思いますが、 まずは、暁さんのいただいたアドバイスをもとに自分で解析してみます。 暁さん、だーてさん、小僧さん、るぱんさん 本当にありがとうございました。 |
1