- - PR -
MVCサンプルが動作してくれません(ToT)
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-07-11 04:45
OS : WinXP
Java : SE (build 1.4.2_05-b04) = C:\java Tomcat : 5.0.24 = C:\Program Files\Apache Software Foundation\Tomcat5 参考 : http://www.atmarkit.co.jp/fjava/rensai2/jspservlet13/jspsevlet13_1.html MVCのサンプルを動かしたいのですが、うまく動作してくれません。 Servlet/JSP/Beanでの連携でHelloWorldレベルのサンプルを動作させたいの ですが、下記の出力結果がでてしまい、どうしてもうまく動いてくれません。 # 他のスレッドを見て、環境変数などを何度も見直しているんですが… ちなみにコンパイルやServlet単体、Servlet+Beanのサンプルは問題ありません。 有識者の方々、どうかアドバイスをください。m(_ _)m ■概要 ========================== htmlからPOSTで適当な文字列をクエリ送信。 Servletが受け取り、Beanを呼出。 クエリ送信の内容をJSPで出力。 以下ソースと出力結果です。 ※ソースはコメントを抜いてます。 ■MVCHtml.html ========================== <html> <head> <title>MVCHtml</title> </head> <body> <h1>MVCHtml.html</h1> <form method="POST" action="Hello"> <table border="1"> <tr> <th align="right" valign="top">文字列:</th> <td><input name="message" size="40" maxlength="255" /></td> </tr> <tr> <td align="center" colspan="2"> <input type="submit" value="送信" /> <input type="reset" value="中止" /> </td> </tr> </table> </form> </body> </html> ■MVCJsp.jsp ========================== <%@ page contentType="text/html;charset=Windows-31J" %> <jsp:useBean id="MVCBean" class="MVCBean" scope="request"/> <HTML> <BODY> <jsp:getProperty name="MVCBean" property="msg" /> </BODY> </HTML> ■MVCServlet.java ========================== import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MVCServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { req.setCharacterEncoding("Windows-31J"); MVCBean bn = new MVCBean(); bn.setMsg(req.getParameter("message")); req.setAttribute("MVCBean", bn); getServletContext().getRequestDispatcher("/MVCJsp.jsp").forward(req, res); } } ■MVCBean.java ========================== public class MVCBean { private String msg; MVCBean () { msg = "Hello MVCBean!!!"; } public String getMsg () { return msg; } public void setMsg (String msg) { this.msg = msg; } } ■web.xml ========================== <web-app> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>MVCServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/Hello</url-pattern> </servlet-mapping> </web-app> ■環境変数 ========================== JAVA_HOME=C:\java Path=.;C:\java\bin; CLASSPATH=.;C:\Program Files\Apache Software Foundation\Tomcat5\common\lib\servlet-api.jar;C:\Program Files\Apache Software Foundation\Tomcat5\common\lib\jsp-api.jar; ■出力結果 ============================= type ?????? ????? ?? The server encountered an internal error () that prevented it from fulfilling this request. ?? org.apache.jasper.JasperException: /MVCJsp.jsp(2,0) org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:357) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:141) org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1217) org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1116) org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163) org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213) org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219) org.apache.jasper.compiler.Node$Root.accept(Node.java:456) org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163) org.apache.jasper.compiler.Generator.generate(Generator.java:3261) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:244) org.apache.jasper.compiler.Compiler.compile(Compiler.java:439) org.apache.jasper.compiler.Compiler.compile(Compiler.java:422) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:507) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:274) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) javax.servlet.http.HttpServlet.service(HttpServlet.java:810) MVCServlet.doPost(MVCServlet.java:26) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) javax.servlet.http.HttpServlet.service(HttpServlet.java:810) | ||||
|
投稿日時: 2004-07-11 18:20
追加情報です。???で表示されていたエラーメッセージを英語で
表示できるようになりました。 org.apache.jasper.JasperException: /MVCJsp.jsp(2,0) The value for the useBean class attribute MVCBean is invalid. logsでは、 2004-07-11 18:09:26 StandardWrapperValve[Hello]: Servlet.service() for servlet Hello threw exception こんなメッセージも出ていました。 # Helloは<servlet-name>です。 今日も一日この問題と向き合って過ごすのかぁ。はぁ…(;_;) 心当たりのある方、どうかご教示お願い致します。 | ||||
|
投稿日時: 2004-07-11 19:15
JSPの下記一文を削除したら、望み通りの結果が表示されました!
<jsp:useBean id="MVCBean" class="MVCBean" scope="request" /> 一応解決したのですが、しっくりきていません。 サンプルに則って作成していましたし、この一文がないと scopeの設定ができないのではないでしょうか? | ||||
|
投稿日時: 2004-07-11 22:21
お世話になっております。
JavaBeanとして処理を行う場合、Serializableインタフェースをimplementsする必要があります。MVCBeanクラスにおいてimplements Serializableを付加してみてください。 | ||||
|
投稿日時: 2004-07-12 00:26
syoさん、ご回答ありがとうございます! ご助言を受けてSerializableを追加してみましたが、 結果は変わりませんでした。(下記の参照) import java.io.Serializable; public class MVCBean implements Serializable {..略..} しかし、Serializableについては勉強になりました。m(_ _)m | ||||
|
投稿日時: 2004-07-12 00:34
JSPの上でのエラーにみえるのですが、
もしかしたらJSPソースを拝見させていただければ 回答しやすいかもしれません。 | ||||
|
投稿日時: 2004-07-12 00:39
目を留めてくださりありがとうございます。
ソースは上に書いてましたが、もう一度載せますね。 2行目のuseBeanでエラーとなっているようなんです…。 ■MVCJsp.jsp <%@ page contentType="text/html;charset=Windows-31J" %> <jsp:useBean id="MVCBean" class="MVCBean" scope="request"/> <HTML> <BODY> <jsp:getProperty name="MVCBean" property="msg" /> </BODY> </HTML> | ||||
|
投稿日時: 2004-07-12 05:36
解決しました!
MVCBeanクラスにpackageを設定していなかったのが原因でした。 つまりJSPからMVCBeanへの参照ができなったということです。 色々なページを探しまくってよーやく解決できました。 取り急ぎ、皆様に感謝です。 ただ、同様なエラーのケースで明示的に <%@ page import="MVCBean" %> とするとできるよ、という回答例も見つかりましたが、これは駄目でした。 やはり同様にMVCBeanクラスが参照できないようです。 # Tomcat3ではできたという噂も。。。 参考: http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1716&forum=12 そこで新たに疑問が沸いたのですが、 無名パッケージでBeanを作成すると、JSPから事前にServletのソースコードを 生成する際にJSPからWEB-INF/classes配下のBeansすらも参照できないのは なぜなのでしょうか? パッケージ化して参照させる必要はないように思えるのですが…。 的外れな質問かも知れませんが、どうかご教示ください! # これだけのことに数日間、頭を悩ませたせいかどうしても # 気になってしまいまして…。 | ||||
