お世話になります。

Java6のサーブレット内で、半角の&(アンド)文字を
String属性の変数であるstrMessageにセットした上で、
その文字データを、
request.setAttribute("err_message", strMessage);
this.getServletContext().getRequestDispatcher(
"/WEB-INF/jsp/errorMessage/FormError.jsp").forward(
request, response);
としてセットすると、JSP画面上では、

&

という文字で、Webブラウザ上に表示されてしまいます。

これを正しい半角の&(アンド)文字で表示させるには、
Javaのサーブレット内において、
どのように値をセットすればよろしかったでしょうか?

以上になります。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

><c:out value="${fn:escapeXml(err_message)}" />


c:outで出力するときには、デフォルトでエスケープ処理されます。
(escapeXml="false"とすればエスケープ処理はされません。)
この記述ではfn:escapeXmlでエスケープ処理した文字列をさらにエスケープ処理することになります。
つまり、
& → &amp; →&amp;amp;
となるため、「&amp;」と表示されてしまうのです。
ですので、
<c:out value="${err_message}" />
とすればいいです。
    • good
    • 0
この回答へのお礼

「yamada_g」様

お世話になります。
お礼のレスポンスが遅くなってすみません。

先週、ご回答いただきましたように、
私の方で、つい先ほど、
<c:out value="${err_message}" />
として試したところ、
半角の&(アンド)文字を、無事に
JSP画面上に表示することが出来ました。

丁寧なご回答をいただきまして、
本当に助かりました。

また機会がございましたら、
よろしくお願い致します。
ありがとうございました。

お礼日時:2011/04/18 17:45

それはサーブレットでの問題ではなく、画面表示時のエスケープ処理の問題です。


JSPのソースも記載した方がいいと思いますよ。

この回答への補足

了解いたしました。
JSPのソースを以下に添付いたします。

<%@ page session="false" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="../error/SystemError.jsp" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>システムエラー画面</title>
<link rel="stylesheet" type="text/css" href="./style.css">
</head>
<body>
<h1>入力エラー</h1>
<p>
入力された内容に対して、次のエラーが発生しました。<br>
</p>
<ul><c:out value="${fn:escapeXml(err_message)}" /></ul>
<a href="javascript:history.back()">戻る</a><br />
</body>
</html>

以上になります。
よろしくお願いいたします。

補足日時:2011/04/15 17:29
    • good
    • 0
この回答へのお礼

お世話になります。
上記No3のお礼入力で、まとめてお礼申し上げますので、
宜しくお願い致します。

お礼日時:2011/04/18 17:39

JSP側で「&amp;」に変換していませんか?


ブラウザに「&amp;」って表示されるってことはブラウザのソース表示したら
「&amp;amp;」になっているはずですが。
そう考えると2回変換していると思われます。
途中のソースがないのでなんとも分かりませんが。
    • good
    • 0
この回答へのお礼

「tegra」様

このたびは、ご回答いただきまして、
本当にありがとうございました。
大変参考になりました。

お礼日時:2011/04/18 17:38

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QgetRequestDispatcher

includeメソッドで処理を転送するプログラムを学習しようと思い、
exDispatcherServlet.javaとexDispatcherServlet2.javaの2つのファイルを作りました。
web-inf\classes配下に2つのクラスファイルを入れました。web.xmlファイルのservlet-classはexDispatcherServletを指定しました。
exDispatcherServlet.javaでは、
req.setAttribute("name", "java");
ServletContext sc = getServletContext( );
RequestDispatcher rd = sc.getRequestDispatcher("/exDispatcherServlet2");
rd.include(req, res);
のようにexDispatcherServlet2.classファイルに送り、
exDispatcherServlet2.javaで
PrintWriter out = res.getWriter( );
out.println("name : ");
のようにしたのですが、exDispatcherServlet2の方のプログラムが反応なしです。
getRequestDispatcher
WEB-INF¥classesで指定するURLはコンテキストルートからの絶対パスとのことだったので、WEB-INFと同じ場所にexDispatcherServlet2.classをおいてみたのですが、だめでした。

どのようにすればうまくいくでしょうか?
参考URLはこちらです。
http://www.javaroad.jp/servletjsp/sj_servlet7.htm

よろしくお願いいたします。

includeメソッドで処理を転送するプログラムを学習しようと思い、
exDispatcherServlet.javaとexDispatcherServlet2.javaの2つのファイルを作りました。
web-inf\classes配下に2つのクラスファイルを入れました。web.xmlファイルのservlet-classはexDispatcherServletを指定しました。
exDispatcherServlet.javaでは、
req.setAttribute("name", "java");
ServletContext sc = getServletContext( );
RequestDispatcher rd = sc.getRequestDispatcher("/exDispatcherServlet2");
rd.include(req, res);
...続きを読む

Aベストアンサー

#1さんの言う通りweb.xmlの設定を見直してみてはいかがですか。
参考までに実際に実行して表示できた設定ファイルをアップします。
※javaソースはダウンロードそのままでコンパイルしました。
[実行環境]
Win 2000Pro sp4
Tomcat4.1.30
J2SDK1.4.2.03

***** ${Application}/WEB-INF/web.xmlの例 ****
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>My Study Web Application</display-name>

<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>MS932</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>exDispatcherServlet</servlet-name>
<servlet-class>exDispatcherServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>exDispatcherServlet2</servlet-name>
<servlet-class>exDispatcherServlet2</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>exDispatcherServlet</servlet-name>
<url-pattern>/exDispatcherServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>exDispatcherServlet2</servlet-name>
<url-pattern>/exDispatcherServlet2</url-pattern>
</servlet-mapping>


</web-app>

**** Tomcat4.1/conf/server.xmlのコンテキスト ****
<Context path="/test" Base="C:\Study\testServlet" debug="0" reloadable="true" crossContext="true">
</Context>

#1さんの言う通りweb.xmlの設定を見直してみてはいかがですか。
参考までに実際に実行して表示できた設定ファイルをアップします。
※javaソースはダウンロードそのままでコンパイルしました。
[実行環境]
Win 2000Pro sp4
Tomcat4.1.30
J2SDK1.4.2.03

***** ${Application}/WEB-INF/web.xmlの例 ****
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<w...続きを読む

Qサーブレット-サーブレットの通信で文字列を送りたいのですが

サーブレット間の通信で文字列(String)を送りたいのですが
うまく受け取れません。
URLEncoder.encodeをつかって変換して送り、
URLDecoder.decodeで受けとってます。お願いします。

Aベストアンサー

具体的に、どうなってしまうのかが分からないと、答え様がないですね。

(1)最初の文字列
(2)URLEncoder.encodeの結果
(3)URLDecoder.decodeの結果
が提示されていると、有力なヒントになるはず。差し支えなければご提示を。

QgetRequestDispatcher の機能について

こんいちは。

下記の機能を使用して転送したいのですがエラーになってしまいます。

tomcatの設定ファイル、web.xmlなどのファイルに何か情報を登録しなければならないのでしょうか?

どなたかご存知でしたら教えていただけないでしょうか?

環境 tomcat4.1

機能
******
getServletConfig().getServletContext().getRequestDispatcher("/cc/t_1.jsp").forward(request,response);
******

ソース

package cc;

import mng.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class t_1 extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {

//response.sendRedirect("/cc/t_1.jsp");
getServletConfig().getServletContext().getRequestDispatcher("/cc/t_1.jsp").forward(request,response);

}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
doGet(request,response);
}
}


下記がエラー内容になります。

HTTP Status 404 - /cc/t_1.jsp
The requested resource (/cc/t_1.jsp) is not available.

こんいちは。

下記の機能を使用して転送したいのですがエラーになってしまいます。

tomcatの設定ファイル、web.xmlなどのファイルに何か情報を登録しなければならないのでしょうか?

どなたかご存知でしたら教えていただけないでしょうか?

環境 tomcat4.1

機能
******
getServletConfig().getServletContext().getRequestDispatcher("/cc/t_1.jsp").forward(request,response);
******

ソース

package cc;

import mng.*;
import java.io.*;
import javax.servlet.*;
import javax...続きを読む

Aベストアンサー

もう、解決済みかもしれませんが。
sendRedirectは
webサーバがことなっていてもOK
forwardの場合は
同一Webサーバ内でのみ
有効の遷移方法だった淡い記憶があります。
ですから。
/からはじまるパス表記の意味合いがことなる可能性が
あります。
forwardは/から始まる場合は
ccからはじまる。
sendRedirectは
/からはじまる場合
Webappsとかそのあたりからかもしれません。
環境がからむのはいつも最初のほうなので。
いつも、適当に試行錯誤して、
いつも詳細を忘れてしまいます。
なので、この発言も適当です。
まったく、ためしていませんし、間違っているかも
しれませんが・・・。
/t_1.jsp
をforwardで指定してみてはいかがでしょうか?

QJavaアプレットはWebブラウザ上で動作し、Javaサーブレットはサ

JavaアプレットはWebブラウザ上で動作し、Javaサーブレットはサーバー上で動き、Javaアプリケーションは単独で動作するということは理解しました。
以上の3つには機能的な違いがありますか?
JavaアプリケーションにはあってJavaアプレットには無いもの、Javaサーブレットにあって、Javaアプレットには無いもの、JavaサーブレットにあってJavaアプリケーションには無いものなど、もっと詳しく知りたいです。参考の本などもお待ちしています。皆さんの知恵をお貸しください。よろしくおねがいします。

Aベストアンサー

アプレットでは、セキュリティ上機能が一部制限されます。

あとは、アプレット、アプリケーションではおそらく殆どの場合GUIをつくることになるので、Swingなどの知識が必要です。

サーブレットでは最終的にhtml、CSS、Javascript、xmlなどを送信することになるので、その辺の知識が必要です。
またサーブレットでは、JSPというhtmlの中にjavaのコードを埋め込むための言語というか仕様があり、それも関連してきます。


また現在Javaはサーブレットとしてのサーバーサイドで使われていることが多く、アプレットはあまり使われていません。(アプレットはユーザーのPCにJavaVMがないと実行できない、起動に時間がかかるなどの理由で)

Qサーブレットコンテキストの意味がわからなくて困っています。

やさしいJava活用編で勉強しているのですが、

サーブレットコンテキストの説明が書いてなく、ネットで調べても意味不明です。

サーブレットコンテキストは、
javax.servlet.ServletContextインタフェースを実装するクラスのインスタンスで、そのアプリケーションに一つあるとのことですが、

そのサーブレットコンテキストの意味がわからなくて困っています。
HttpSessionのようなもので、クライアントではなく、そのアプリケーションに対して1つあるということですが...
ServletContextオブジェクトは、具体的に何の情報を持っているのですか?


また以下のソースですが、
なぜ指定されたパスにあるリソースを、ラッパーとして機能するRequestDispatcherオブジェクトを返してから、
forwardで転送するのですか?


ServletContext sc = getServletContext();
sc.getRequestDispatcher("/thanks.html").forward(request, response);

やさしいJava活用編で勉強しているのですが、

サーブレットコンテキストの説明が書いてなく、ネットで調べても意味不明です。

サーブレットコンテキストは、
javax.servlet.ServletContextインタフェースを実装するクラスのインスタンスで、そのアプリケーションに一つあるとのことですが、

そのサーブレットコンテキストの意味がわからなくて困っています。
HttpSessionのようなもので、クライアントではなく、そのアプリケーションに対して1つあるということですが...
ServletContextオブジェクトは...続きを読む

Aベストアンサー

そうですねぇ。例えて言えば、contextはナースコールみたいなものだとおもいます(「情報を持っている」というだけでなく、用事も頼めるので)。

現代のアプリは、心臓や肺など、基本的な機能をアプリケーションサーバにやってもらっているので、いわば寝たきりの人みたいなものです。
自分で勝手に立って、いろいろやる力がないので、ナースコールを押してサーバにきてもらって、いろいろ助けてもらわないといけない局面があるのですね。

RequestDispatcherは、リモコンみたいなものです。看護士さんは忙しいので、患者がいちいちチャンネルを変えたいときに、毎回テレビをいじりにいく余裕がありません。

ですから、患者が「6チャンネルに変えたい」といったら、「電池を入れて、テレビのほうに向けて、ハイ」という風にセットして、さっさと自分の仕事に戻ってしまいます。

そういうことをしたいので、RequestDispatcherオブジェクトを返してからforwardをやらせる設計にしたんじゃないかと思います。

Qサーブレット(doGetメソッド内)でMySQLテーブル内を、

サーブレット(doGetメソッド内)でMySQLテーブル内を、
CSVファイルとしてクライアントへダウンロードする以下プログラムで、
UTF-16LE(BOM無し)でCSVファイルが正常に出力されております。

そこでご質問内容なのですが、このCSVを出力する際に、
BOM無しではなくて、
「BOM有り」でCSVファイル出力する(BOMを追加する)方法を教えてください。
  ↓
final ResultSetMetaData meta = rs.getMetaData();
(上記のrsは、MySQLテーブル内をSELECTしたレコードセットです)

response.setContentType("application/octet-stream;charset=utf-16le");
response.setHeader("Content-Disposition", "attachment; filename="
+ "KYOIKU.csv");
out = response.getWriter();

for (int i = 1; i <= meta.getColumnCount(); i++) {
out.print("\"" + meta.getColumnName(i) + "\"");
out.print(i < meta.getColumnCount() ? "\t" : "");
}
out.print("\r\n");

while (rs.next()) {
for (int i = 1; i <= meta.getColumnCount(); i++) {
out.print("\"" + rs.getString(i) + "\"");
out.print(i < meta.getColumnCount() ? "\t" : "");
}
out.print("\r\n");
}

} catch (final NumberFormatException e) {
(以下省略)

お世話になります
以上、宜しくお願い致します。

サーブレット(doGetメソッド内)でMySQLテーブル内を、
CSVファイルとしてクライアントへダウンロードする以下プログラムで、
UTF-16LE(BOM無し)でCSVファイルが正常に出力されております。

そこでご質問内容なのですが、このCSVを出力する際に、
BOM無しではなくて、
「BOM有り」でCSVファイル出力する(BOMを追加する)方法を教えてください。
  ↓
final ResultSetMetaData meta = rs.getMetaData();
(上記のrsは、MySQLテーブル内をSELECTしたレコードセットです)

response.setContentType("application...続きを読む

Aベストアンサー

> out = response.getWriter();
の後辺りで、BOMを出力したら良いんじゃないでしょうか。

out.print("\uFEFF"); // BOM 出力。

テストしていませんが、こんな感じで、如何でしょう。

Qフォーム上で押されたボタンによってサーブレットの処理を変えたい

Urizakaです。
さて、さっそく質問です。
JSPの同一フォーム上に「登録」「修正」「削除」のボタンを置き、その押された
ボタンによってサーブレット内での処理が切り替わる(具体的には、違う
SQL文を実行し、違うJSPページをgetRequestDispatcherメソッドで生成
する)ようにしたいのですが、どのようにすればよいのでしょうか?
もちろんそれぞれの処理に対して別々のサーブレットを作り、javaScript
でそれぞれのサーブレットへ飛ぶように制御するという処理も考えたことは
考えたのですが、できれば一つのサーブレットで済ませたいと考えたもので
…宜しくお願いします。

Aベストアンサー

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=MySubmit>
</form>

<script language="JavaScript">
function func(MyCommand){
document.MyForm.MySubmit.value=MyCommand;
document.MyForm.submit();
}
</script>

■Servletでの処理
// リクエストの取得
String MyAction = req.getParameter("MySubmit");

// 処理の実行
if (MyAction.equals("Toroku")){...}
if (MyAction.equals("Shusei")){...}
if (MyAction.equals("Sakujo")){...}



---------------------------------------------------

こんな感じでどうでしょうか。
ちなみにこうやって書いておくと、フォームのボタンからじゃなくても
アンカーをクリックすることで同じ効果が出せそうな……

<a href="JavaScript:func('Toroku')">登録</a>

あ、でもまたボロが出そうなのでこの辺で(^_^;)

お恥ずかしい限りです。
前述の例、動くわけがありませんね(汗)

2つめの例、書きなおします。

---------------------------------------------------

■JSPのフォーム

<form name=MyForm action="<<サーブレットのURL>>" method=post>
<input type=button name=MyClick value=登録 onClick="func('Toroku');">
<input type=button name=MyClick value=修正 onClick="func('Shusei');">
<input type=button name=MyClick value=削除 onClick="func('Sakujo');">
<input type=hidden name=M...続きを読む

Qjsp&サーブレットにてjpgやzip等のファイルを別フォルダにコピー&貼り付けの処理

現在jsp、サーブレット、ビーンにて
画像ファイルやzipファイルなどをアップロードできるサイトを作成していまして、アップロードについては
jakartaのfileuploadで特定のフォルダにアップロードする処理は上手くいったのですが、
アップロードしたファイルを、別のフォルダにコピー&貼り付けさせるような処理を行いたいと思っています。

java.ioについて調べてみると
txtファイルの中身を読み込んだり書き込んだりする
処理しか見つける事ができず、つまずいております。

どなたかjpgやzip等を別フォルダへの
解説をしているサイトをご存知でしたら
教えていただけますでしょうか。
もしくはあのクラスを利用すれば出来る等でも
結構ですので、すみませんがご教授よろしくお願いします

Aベストアンサー

InputStream,OutputStreamを使えばバイナリ処理(1バイト単位での読み書き)ができます。

そのままでは効率が悪いので、これにバッファーを付ける意味で、BufferedInputStreamなどを一緒に使います。

QTOMCATサーブレットの呼び出し方について

こんにちわ!yukimura1024です。

tomcat5.0.27でサーブレットをやっているのですが、

web.xmlでurl-patternを定義したのもはブラウザでアドレスを入力しても
サーブレット内からrequest.getRequestDispatcherで呼び出しても見つかるのですが、

それ以外の、web.xmlでurl-patternを定義していないサーブレットは
同じディレクトリにおいてあるサーブレットでもまったく呼び出せません(TT

サーブレットの数だけweb.xmlにurl-patternを定義しなくてはならないのでしょうか?

昔は特に設定しなくても呼び出せていた気がします。。。

この辺についてわかる方、教えていただけると幸いです。
よろしくお願い致します。

Aベストアンサー

質問の通りすべてのサーブレットをweb.xmlに登録する必要があります。昔というのはたぶん4.1.11では、登録する必要がなかったことを指していると思います。現在ではデフォルトではinvoker servletは使用出来ないためです。(セキュリティーのため)

QJava サーブレット 画像

サーブレットからgoogleへ接続し、googleのページをブラウザへ返す際、画像のパスが、サーブレットのURLに置き換わってしまいます。

(現象↓)
http://localhost:8080/intl/ja_jp/images/logo.gif

(やりたいこと↓)
http://img0.gmodules.com/ig/f/vcbK_2Vv3S8/intl/ALL_jp/logo.png

上記の(やりたいこと)ようにするには、どうしたら良いでしょうか。

URL url = new URL("http://www.google.co.jp/");
HttpURLConnection urlconn = (HttpURLConnection) url.openConnection();

BufferedInputStream in = new BufferedInputStream(urlconn.getInputStream());

ServletOutputStream sout = response.getOutputStream();
int data;
while ((data = in.read()) != -1) {
sout.write(data);
}
sout.close();
urlconn.disconnect();

サーブレットからgoogleへ接続し、googleのページをブラウザへ返す際、画像のパスが、サーブレットのURLに置き換わってしまいます。

(現象↓)
http://localhost:8080/intl/ja_jp/images/logo.gif

(やりたいこと↓)
http://img0.gmodules.com/ig/f/vcbK_2Vv3S8/intl/ALL_jp/logo.png

上記の(やりたいこと)ようにするには、どうしたら良いでしょうか。

URL url = new URL("http://www.google.co.jp/");
HttpURLConnection urlconn = (HttpURLConnection) url.openConnection();

BufferedInputStream...続きを読む

Aベストアンサー

Googleはアクセスするブラウザによって
ダウンロードするものが違うのよ。

そのため、USER-AGENTが未指定・または特定できない場合
こういう現象が起きるわ。

例えばInternetExplorerのUSER-AGENTを指定してあげれば
想定通りの結果を得られるわよ。

指定方法はURLConnectionに・・・
あ、調べれば判るからいらないわね。


人気Q&Aランキング

おすすめ情報