2004年07月02日 [長年日記]
_ [Struts][Java] 前回の補足。
前回の文章だと結構すんなり完成したように見えるけど、 実はあれ以外にもいろいろエラーが出てきてしまっていたりした。 「こんなエラーが発生したときにはここを疑って直すとよいかもよ」という文書って あんまり見かけないので、ちょっと書いてみることとする。
前回の成功したソースたちをベースに、少しずつエラーの出るソースに変えながら どんなエラーが発生するのか見てみよう。
JSPの終了タグを忘れた場合。
C:\study1\WEB-INF\src>pushd ..\.. C:\study1>copy index.jsp index.jsp.org (..ソース修正..) C:\study1>diff index.jsp.org index.jsp 8c8 < ログインID:<html:text property="id" /><br /> --- > ログインID:<html:text property="id"><br /> C:\study1>popd C:\study1\WEB-INF\src>ant dist C:\study1\WEB-INF\src>copy \projects\lib\study1.war [tomcat-home]\webapps C:\study1\WEB-INF\src>net stop "Apache Tomcat" C:\study1\WEB-INF\src>net start "Apache Tomcat"
こんな感じで、<html:text>の終了タグを忘れちゃった場合は、下記のようなエラーが発生した。
org.apache.jasper.JasperException: /index.jsp(11,0) ???? "</html:form" ??????????? org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:376) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:134) org.apache.jasper.compiler.Parser.checkUnbalancedEndTag(Parser.java:1706) (...以下略...)
JSPで属性値のダブルクォーテーションを閉じ忘れちゃった場合。
こんどは、property属性の値のダブルクォーテーションを閉じ忘れた場合。
C:\study1\WEB-INF\src>pushd ..\.. (..ソース修正..) C:\study1>diff index.jsp.org index.jsp 8c8 < ログインID:<html:text property="id" /><br /> --- > ログインID:<html:text property="id /><br /> C:\study1>popd C:\study1\WEB-INF\src>ant dist C:\study1\WEB-INF\src>copy \projects\lib\study1.war [tomcat-home]\webapps C:\study1\WEB-INF\src>net stop "Apache Tomcat" C:\study1\WEB-INF\src>net start "Apache Tomcat"
エラーを見ると、次の行のダブルクォーテーションまでを文字列とみなしていて、 そのせいでエラーが出ているようだ。
org.apache.jasper.JasperException: /index.jsp(9,46) ????????? org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:39) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:376) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:90) org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:193) (...以下略...)
この二つを見る限り、JSPのパースエラーが発生するときは JasperException が発生するのかな?
struts-config.xmlがパースエラーになるような場合。
今度は、struts-config.xmlをパースエラーになるようにさせてみた。
C:\study1\WEB-INF\src>pushd .. C:\study1\WEB-INF>copy struts-config.xml struts-config.xml.org C:\study1\WEB-INF>diff struts-config.xml.org struts-config.xml 7c7 < <form-bean name="LoginForm" type="study1.LoginForm" /> --- > <form-bean name="LoginForm" type="study1.LoginForm /> C:\study1\WEB-INF>popd C:\study1\WEB-INF\src>ant dist C:\study1\WEB-INF\src>copy \projects\lib\study1.war [tomcat-home]\webapps C:\study1\WEB-INF\src>net stop "Apache Tomcat" C:\study1\WEB-INF\src>net start "Apache Tomcat"
エラーを見るとActionMappingsかActionFormBeansが見つからないよーって言っている。 ちゃんとファイルを作ったはずなのにこのように言われるときは、struts-config.xmlを 疑えということか。
javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758) org.apache.jsp.index_jsp._jspService(index_jsp.java:80) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:810) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:298) 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)