ももらぼっ!にっき


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) ???? "&lt;/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)

_ [Java][Eclipse] eclipseに入れたPlugin。

忘れないように覚書として。 会社の環境にあわせて、eclipseはちと古い2.1.2を使っている。

*1  デフォルトのままだと「パースペクティブのカスタマイズ」に出てこなかったので、[eclipse-home]\features\viPluginFeature_0.2.10\feature.xmlの//feature/requires/*をばっさり削除してやった。こんなことしていいのかは不明(汗)

_ [tDiary] 注釈。

ありゃ? 今までなら、こんな感じ(コレ→*1)に出ていた注釈がサイトぶち壊れ→復旧という工程を踏んでるうちに出ないようになっていたようだ。

さっくり、footnote.rbをpluginフォルダに突っ込んで対応。 ここ数回の更新では注釈を結構入れていたのに気づかなかった…_|‾|○

*1  おひょ。