- PR -

JSPページのカスタムタグが認識しない

1
投稿者投稿内容
ume
会議室デビュー日: 2005/02/02
投稿数: 13
投稿日時: 2005-02-09 14:02
JSPファイルのlogicタグがうごきません。
JSPファイルの一部
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:redirect forward="login"/>

struts-configの<global-forwards>に、nameは、"login" でパスも記述しております。
web.xml にも、タグリブの記述はしてあります。
上記のlogic タグをコメントアウトすると、サーブレットは生成されます。
どういったことが考えられるのでしょう
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-10 08:21
>上記のlogic タグをコメントアウトすると、サーブレットは生成されます。
ということは JSP のコンパイルで何かエラーが出ているのでしょうか?ログはご覧になりましたか?
ログに出ているメッセージの意味がわからないのであればそちらもあわせてコピペすると良いかと思います。

また、logic タグがちゃんと動いているサンプルと見比べて違いを探し出す、というのも確実な調査法ですね。
ume
会議室デビュー日: 2005/02/02
投稿数: 13
投稿日時: 2005-02-10 17:03
アドバイスありがとうございます。
ロジックタグはサンプルで正常にうごきましたので、固有のものとなるのでしょうか?
index.jsp の内容は、<logic:redirect forward="login"> この一行でして、
struts-configでは他モジュールのstruts-config-common(このような名前)のマッピングでアクションクラスを呼び、成功したらmenu.jsp にいくことになっています。
下記の内容は、〜fulfilling this request.とあるのですが、
login する時に情報をもたせばよいということになるのでしょうか?
ログの見方などよくわからず、ご教授いただけないでしょうか
サーブレットはできています。


HTTP Status 500 -
type Exception report

message

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

exception

org.apache.jasper.JasperException
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:536)


root cause

javax.servlet.ServletException
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:536)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:60)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:536)

ログ出力テキストのなかみ
005-02-10 16:43:32 StandardWrapperValve[jsp]: サーブレット jsp のServlet.service()が例外を投げました
ew3vgo4g
会議室デビュー日: 2005/02/14
投稿数: 2
投稿日時: 2005-02-14 06:22
Actionも見てみたいです。
同じ様に作ってmenu.jspに飛びましたよ。
ただForwardしただけですが。
ume
会議室デビュー日: 2005/02/02
投稿数: 13
投稿日時: 2005-02-14 15:54
index.jspには、右記のように記述し、<logic:redirect forward="login"/>
struts-config.xmlでは、
<global-forwards>
<forward name="login" path="/common/login.do" />
</global-forwards>
<!-- ========== Action Mapping Definitions =============================== -->
<action-mappings>
  <action path="/login" type="xxx.xxx.xxxx.xxxx.LoginAction">
<forward name="success" path="/common/menu.do" />
</action>
</action-mappings>

と、なっており、/common/login.do のパスがあるストラッツコンフィグは
<action-mappings>
<action path="/login" type="xxx.xxx.xxx.xxx.LoginAction">
<forward name="success" path="/menu.do"/>
</action>
となっております。
LoginActionをみますと、どこまで書いてよいものかわからないので、
省略もありますが、このような感じです。
意味のない貼り付けだったらすみません。
気になる点としては、BaseAction という点であり、独自アクションクラスとなっております。このことと、カスタムタグが認識しないという点がどのようにリンクするのでしょうか?
http://localhost:8080/xxxx/common/login.do をうつと、
現在、サーブレットactionは利用できません。とでてしまいます。
struts-config の設定も見直してはいるのですが、うまくいきません。
なにかお分かりになるようでしたら、ヒントをいただけますか?

public class LoginAction extends BaseAction{
private String contextPath;
プロパティ省略
protected ActionForward executeImpl(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res)
throws Exception {
     HttpSession session = req.getSession();
     User loginuser = (User)session.getAttribute("LoginUser");
     if (loginuser != null && !loginuser.equals("")) {
   return mapping.findForward("success");
      }
 省略
return mapping.findForward("success");
  }
 }
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-14 16:44
基本的な設定方法、コーディング方法のマナーについてはちゃんと動いているサンプルを見るのがお勧めです。
今動かないものと比べて違いを探し出してみてはいかがでしょうか。
幸いStrutsには豊富なサンプルが付属しているわけですから。
ew3vgo4g
会議室デビュー日: 2005/02/14
投稿数: 2
投稿日時: 2005-02-14 23:10
グローバルフォワードが、
<global-forwards>
<forward name="login" path="/common/login.do" />
</global-forwards>
なら、アクションマッピングは、
<action-mappings>
 <action path="/common/login" type="xxx.xxx.xxxx.xxxx.LoginAction">
<forward name="success" path="/menu.jsp" />
</action>
</action-mappings>
じゃないんですか?

アクションは、BaseActionのexecute(ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse)メソッドがStrutsから呼ばれるようになっていれば、いいと思います。

あとは、「現在、サーブレットactionは利用できません。」は、web.xmlでActionServletとパスがマッピングされてないから出るのではないでしょうか?
<!-- Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/common/*.do</url-pattern>
</servlet-mapping>
こんなかんじとか。
ume
会議室デビュー日: 2005/02/02
投稿数: 13
投稿日時: 2005-02-25 11:50
ew3vgo4gさん ありがとうございます。
結果的には、表示されました。
内容については、情報が不足していました。
ご指摘のように、<action path="/common/login" 〜>という指定でよいのだとおもいます。
システム的には、下記のように書かれていましたので記します。

struts-config で
<global-forwards>
<forward name="login" path="/common/login.do" />
</global-forwards>
では、common というモジュールのlogin.do に遷移し、
web.xml をみると、モジュール定義で
<param-name>config/common</param-name>
<param-value>/WEB-INF/struts-config-common.xml</param-value>
このように記述されていましたので、
struts-config-common.xml 内の<action-mapping>を探すと、
下記のように記述がありました。
<action path="/login"
type="xxx.xxx.xxx.xxx.LoginAction">
<forward name="success" path="/menu.do"/>
</action>

ここでLoginActionが、正常であれば、menu.do に遷移し
<action path="/menu"
type="xxx.xxx.xxx.xxxx.MenuAction">
<forward name="success" path="/menu.jsp"/>
</action>
MenuAction が正常であったので、menu.jsp が表示されました。

システム固有の遷移を書いてしまってすみません。
ありがとうございました。

1

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