質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Q&A

解決済

1回答

16380閲覧

JSPからJSPへ値渡しについて

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

0グッド

0クリップ

投稿2015/07/24 13:15

eclipsで、JSPとJAVAを書いています。

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 %>">

以上です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

<% %>の中では、出力しない処理のJavaのコードを普通に実行することができますよ。

<% String strException = (String) request.getAttribute("javax.servlet.error.exception"); %> <INPUT type="hidden" name="exception" Value="<%= strException %>">

投稿2015/07/24 15:26

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/07/25 03:45 編集

ご回答ありがとうございます。ですが、残念ながら下記エラーとなりました。 それから懸念点ですが、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: %>
argius

2015/07/25 03:45

エラーは他に出ていませんか? /exception_error.jsp:48 で何のエラーが出ているかが知りたいです。
退会済みユーザー

退会済みユーザー

2015/07/25 03: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 03:51

String同士なら、ダブルクォーテションも、=で次のStringへ代入できることがわかりました=そこできれない。
argius

2015/07/25 03:52

このAttributeにはNumberFormatExceptionクラスのオブジェクトが入っているんですね。 てっきり文字列自体が入っていると思ったので... 必ず何らかのExceptionが入るとしたら、 Exception strException = (Exception) request.getAttribute("javax.servlet.error.exception"); とすれば大丈夫だと思います。
退会済みユーザー

退会済みユーザー

2015/07/25 03:59

はい、必ず、例外エラーの文字がはいります。 プログラム本体で例外は、ほぼ吸収しているのですが、極まれに、そこで!!というのがあるので、万が一に備えて、このエラーが出たときに、 1.ユーザー様へソースを表示せずに。 2.表の形で、各種エラー情報を表示し、 3.お客様の名前とメールアドレス、コメントを入れて、 4.送信ボタンを押すと、 5.システム管理チームへ、エラー内容とお客様情報が送信される。 というようにしたくて、ここのエラーJSP⇒メール送信JSPへ、例外のダウぶるクォーテーションが入っている情報も切れずに、渡したいのです。 上記、一度やってみます。
退会済みユーザー

退会済みユーザー

2015/07/25 04:01

これだけのエラーをsend_erro.jspへ渡しています。 <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") %>">
argius

2015/07/25 04:04

念のため補足します。 「例外エラーの文字」という表現は正しくありません。 この場合は、文字が入るのではなく、Exceptionのサブクラスのインスタンスが入る、というのが正しいです。 それをout.printlnで出力したりtoStringでStringに変換することで、初めて「文字」になります。 これを認識しないまま話を進めてしまうと、話が通じなくなることがありますので、ご注意ください。
退会済みユーザー

退会済みユーザー

2015/07/25 04:26

補足ありがとうございます。とても勉強になり、大変たすかります。本当にありがとうございます。
退会済みユーザー

退会済みユーザー

2015/07/25 04: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 04:40

PS. <% Exception strException = (Exception) request.getAttribute("javax.servlet.error.exception"); strException = strException.replaceAll("\"", "”"); %> と、半角"を全角”にできるとおもったのですが、strExceptionが、String型ではないため、実行時エラーとなりました。残念、他の方法を考えます。
argius

2015/07/25 04:40

私が問題点を正しく理解できていないのかと少し心配しましたが、方法が見つかったようで何よりです。
退会済みユーザー

退会済みユーザー

2015/07/25 05:15

いえ、そんなことは、ありません。聞き方がわるかったのです。 ご報告です。サーバーでもダブルクォーテションを含むエラーも正常に、送信用jspへ渡せ、無事に全エラー情報、ユーザー情報を、システム管理者へ送ることができるようになりました。 おそらく出番は、すくないと思いますが、万一発生時は、このメールから、あっ、エラーがでた。きずき、ログやソースなどをみて、対処できると考えています。 ありがとうございました。
argius

2015/07/25 05:27

こちらこそ、ご報告までいただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問