JSPからJSPへ値渡しについて
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 9,974

退会済みユーザー
JSP⇒JSPに値を受け渡すときに、ダブルクォーテーションの含まれている文字列が、
ダブルクォーテーションの前までで切れてしまうとう現象が発生しています。
1.それは、テキスト入力に入力した場合は、切れずに、次のJSPにわたる。
これはユーザー様へ、例外内容を見せるための表示
<td><b>例外</b></td>
<td><%= request.getAttribute("javax.servlet.error.exception") %></td>
↓ここは、無意味。これで、次のmail_error.jspで、getAttributeしても、NULLになる。
※windows上では、NULLにならないが、サーバー上では必ずNULLになる。
<% session.setAttribute("servlet_name", request.getAttribute("javax.servlet.error.servlet_name")); %>
仕方が無いので、下記の方法で、次のmail_error.jspへ値を渡そうとしている。
値はわたるが、例外の文章の中のダブルクォーテーションで切れて、
次のJSPへ渡る。
<FORM 省略 action="/mail_error.jsp">
↓ここは、次のJSPへ渡すために、INPUT項目の値として、例外内容をわざわざ入れている。
<INPUT type="hidden" name="exception" Value="<%= request.getAttribute("javax.servlet.error.exception") %>">
<TABLE>
<TR>
<TD>タイトル</TD>
<TD><INPUT type="text" name="subject" size=32 Value="障害発生"></TD>
</TR>
<TR>
<TD>発生手順及びコメント</TD>
<TD><TEXTAREA name="comment" rows=5 cols=40></TEXTAREA></TD>
</TR>
<TR>
<TD> </TD>
<TD><INPUT type="submit" value="障害報告を送信" ></TD>
</TR>
</TABLE>
■質問1
それで、ご質問です。
<INPUT type="hidden" name="exception" Value="<%= request.getAttribute("javax.servlet.error.exception") %>">
の部分の<%= request.getAttribute("javax.servlet.error.exception") %>をString変数に入れることは
できませんか?
String変数に入れれれば、
半角"を下記のように全角”に変換し、切れないようにできると考えています。
String strException;
strException = strException .replaceAll("\"", "”");
■質問2
もし、上記で、Stringに入れれた場合、下記にはどのように組み込めばよろしいですか?
<INPUT type="hidden" name="exception" Value="<%= request.getAttribute("javax.servlet.error.exception") %>">
↓↓↓↓ これでよい?
<INPUT type="hidden" name="exception" Value="<%= strException %>">
以上です。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
<% %>
の中では、出力しない処理のJavaのコードを普通に実行することができますよ。
<%
String strException = (String) request.getAttribute("javax.servlet.error.exception");
%>
<INPUT type="hidden" name="exception" Value="<%= strException %>">
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/07/25 12:43 編集
それから懸念点ですが、strExceptionへ入れるときに、ダウぶるクォーテションから後ろも入るのか、切れちゃうのかもきになります。※別でテストしてみればすぐわかりますが。
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: Exception in JSP: /exception_error.jsp:48
45:
46: <FORM method="POST" action="http://localhost:8080/mail_error.jsp.jsp">
47: <%
48: String strException = (String) request.getAttribute("javax.servlet.error.exception");
49: out.println(strException);
50: %>
2015/07/25 12:45
2015/07/25 12:48
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:489)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:686)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:656)
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:801)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
org.apache.jsp.api.app_005ferror_005frccurrence_005ftest_jsp._jspService(app_005ferror_005frccurrence_005ftest_jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:186)
root cause
java.lang.ClassCastException: java.lang.NumberFormatException
org.apache.jsp.api.app_005fexception_005ferror_jsp._jspService(app_005fexception_005ferror_jsp.java:117)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:686)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:656)
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:801)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
org.apache.jsp.api.app_005ferror_005frccurrence_005ftest_jsp._jspService(app_005ferror_005frccurrence_005ftest_jsp.java:70)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:369)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:308)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:186)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.33 logs.
2015/07/25 12:51
2015/07/25 12:52
てっきり文字列自体が入っていると思ったので...
必ず何らかのExceptionが入るとしたら、
Exception strException = (Exception) request.getAttribute("javax.servlet.error.exception");
とすれば大丈夫だと思います。
2015/07/25 12:59
プログラム本体で例外は、ほぼ吸収しているのですが、極まれに、そこで!!というのがあるので、万が一に備えて、このエラーが出たときに、
1.ユーザー様へソースを表示せずに。
2.表の形で、各種エラー情報を表示し、
3.お客様の名前とメールアドレス、コメントを入れて、
4.送信ボタンを押すと、
5.システム管理チームへ、エラー内容とお客様情報が送信される。
というようにしたくて、ここのエラーJSP⇒メール送信JSPへ、例外のダウぶるクォーテーションが入っている情報も切れずに、渡したいのです。
上記、一度やってみます。
2015/07/25 13:01
<INPUT type="hidden" name="status_code" Value="<%= request.getAttribute("javax.servlet.error.status_code") %>">
<INPUT type="hidden" name="exception_type" Value="<%= request.getAttribute("javax.servlet.error.exception_type") %>">
<INPUT type="hidden" name="message" Value="<%= request.getAttribute("javax.servlet.error.message") %>">
<INPUT type="hidden" name="exception" Value="<%= request.getAttribute("javax.servlet.error.exception") %>">
<INPUT type="hidden" name="request_uri" Value="<%= request.getAttribute("javax.servlet.error.request_uri") %>">
<INPUT type="hidden" name="servlet_name" Value="<%= request.getAttribute("javax.servlet.error.servlet_name") %>">
2015/07/25 13:04
「例外エラーの文字」という表現は正しくありません。
この場合は、文字が入るのではなく、Exceptionのサブクラスのインスタンスが入る、というのが正しいです。
それをout.printlnで出力したりtoStringでStringに変換することで、初めて「文字」になります。
これを認識しないまま話を進めてしまうと、話が通じなくなることがありますので、ご注意ください。
2015/07/25 13:26
2015/07/25 13:36
<%= request.getAttribute("javax.servlet.error.exception") %>の要領で、
・ステータスコード 500
・例外のタイプ null
・メッセージ null
・例外 java.lang.NumberFormatException: For input string: "ABC"
・URI /api/app_error_rccurrence_test.jsp
・サーブレット名 jsp
ソースに、
<%
Exception strException = (Exception) request.getAttribute("javax.servlet.error.exception");
out.println("ここから:「" + strException.getMessage() + "」");
out.println("ここから2:「" + strException + "」");
%>
を組み込んだところ、下記のように画面に表示されました。
ここから:「For input string: "ABC"」
ここから2:「java.lang.NumberFormatException: For input string: "ABC"」
どうやら、おしえていただいた、strExceptionに、そのまま例外情報が切れずにはいるようです。
これを使って、実現させます。
お手数をおかけしました。
ありがとうございました。自分では、到底思いつかない方法でした。
2015/07/25 13:40
<%
Exception strException = (Exception) request.getAttribute("javax.servlet.error.exception");
strException = strException.replaceAll("\"", "”");
%>
と、半角"を全角”にできるとおもったのですが、strExceptionが、String型ではないため、実行時エラーとなりました。残念、他の方法を考えます。
2015/07/25 13:40
2015/07/25 14:15
ご報告です。サーバーでもダブルクォーテションを含むエラーも正常に、送信用jspへ渡せ、無事に全エラー情報、ユーザー情報を、システム管理者へ送ることができるようになりました。
おそらく出番は、すくないと思いますが、万一発生時は、このメールから、あっ、エラーがでた。きずき、ログやソースなどをみて、対処できると考えています。
ありがとうございました。
2015/07/25 14:27