ネットが遅くてイライラしてない!?

はじめまして。javaの初心者です。
質問があります。以下のソースコードで、
----------------------------------------------------------------
<%@ page contentType="text/html;charset=Shift_JIS"
import="java.net.URLEncoder" %>
<html>
<body>
<p>送信元 Test01.jsp</p>
<%
String query = URLEncoder.encode("テスト","Shift_JIS");
String url "http://localhost:8080/Test/Test02.jsp?name="+que …
%>
<a href="<%=url%>">送信</a>
</body>
</html>
----------------------------------------------------------------
<%@ page contentType="text/html;charset=Shift_JIS"
import="java.net.URLDecoder" %>
<html>
<body>
<p>送信先 Test02.jsp</p>
<%
String str = request.getParameter("name");
String name = URLDecoder.decode(str,"Shift_JIS");
%>
<%= name %>
</body>
</html>
----------------------------------------------------------------
リンクに日本語をエンコードした文字列をクエリとして追加して
送信すると、送信先で表示したとき文字化けしてしまいます。
setCharacterEncoding("Shift_JIS")などを送信先に指定すると
文字化けは回避できるのですが、それではURLEncoderやURLDecoder
を使用している意義がないのではないかと思っています。
なぜ文字化けしてしまうのかをご教授お願いします。
現在WindowsXP IE6.0 Tomcat5.5 JDK1.5を使用しています。

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

A 回答 (1件)

参考URLのような問題があるみたいですね。


(Versionが違うからはっきりとしたことがいえませんが・・・・。)

もしApacheのcommonsを使用できる環境にあるならば
org.apache.commons.codec.net.URLCodec
でおそらく解決できるのではないでしょうか・・・?
(検証していないのではっきりとしたことはいえませんが・・・。)

参考URL:http://senrigan.ddo.jp/candid/urlencode.html
    • good
    • 0
この回答へのお礼

braver_2004様へ
連絡が遅れましてすみませんでした。
braver_2004様が教えてくださいました、参考URLが大変参考になりました。ありがとうございました。
やはり、J2SE 1.5でも参考URLの内容と同じ問題がおこるようです。
JavaのURLEncoderによるエンコードの結果と、ブラウザによる
エンコードの結果が異なるため、その異なったブラウザによるエンコードの結果がURLDecoderに渡されるために文字化けが生じたのですね。
勉強になりました。ありがとうございました。

お礼日時:2006/10/20 14:59

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

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

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

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

QJSP/Servletのパラメータの受け渡しが文字化けしてうまくいきません。

JSP・Servlet・Beanがうまくいかなくて困っています。開発環境はWindowsXP JDK5とEclipse3.2とTomcat5.5を使って作っています。
じゃんけんをするゲームを作ったのですが、コンピュータの手は文字列も画像もきちんと出るのですが、自分の手が文字列は文字化けして画像も正しく表示されません。
JSPのcharsetやServletのrequest.setCharacterEncoding()メソッドなど文字化け等で考えられることはいろいろ調べてやってみたつもりなのですがどうもうまくいきません。コンソールに値を出力するようにしてデバックもやってみてはいるのですが、同様に文字化けした値が入ってしまいます。どなたかご教授下さい。以下にソースを書きます。
<!--JankenStart.jsp-->
<%@page language="java" import="java.lang.*, java.util.*"
contentType="text/html; charset=Shift_JIS"%>
<html>
<head><title>じゃんけんゲーム</title></head>
<body>
<h2>このゲームはコンピュータとじゃんけんをします!<br>
コンピュータに勝てるかな?</h2>
<form action="../JankenAction">
あなたの手:
<input type="radio" name="te1" value="グー">グー<img src="../img/hand4-1-3.gif">
<input type="radio" name="te1" value="チョキ">チョキ<img src="../img/hand4-1-1.gif">
<input type="radio" name="te1" value="パー">パー<img src="../img/hand4-1-2.gif"><p>
<center><input type="submit" value="勝負"></center>
</body>

//JankenAction.java
package servlets;
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import beans.JankenBean;
public class JankenAction extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
 request.setCharacterEncoding("Windows-31J");
 response.setCharacterEncoding("Windows-31J");
  String te=request.getParameter("te1");
  JankenBean jankenBean=new JankenBean();
  jankenBean.setJibun(te);
  jankenBean.setComputer();
  jankenBean.setHantei();
  request.setAttribute("hoge", jankenBean);
  RequestDispatcher rDispatcher=request.getRequestDispatcher("JSP/JankenKekka.jsp");
  rDispatcher.forward(request, response);
}
}
//JankenBean.java
package beans;
public class JankenBean {
private String computer=null;private String jibun=null;
private String hantei=null;private String jgazou=null;
private String cgazou=null;
public String getComputer(){
return computer;
}
public String getCgazou(){
return cgazou;
}
public void setComputer(){
int random =(int)(Math.random()*3);
if(random==0){
System.out.println("グー");
computer="グー";
cgazou="img/hand4-1-3.gif";
}
else if(random==1){
System.out.println("チョキ");
computer="チョキ";
cgazou="img/hand4-1-1.gif";
}else{
System.out.println("パー");
computer="パー";
cgazou="img/hand4-1-2.gif";
}
System.out.println("computer"+computer);
}
public String getJibun(){
return jibun;
}
public String getJgazou(){
return jgazou;
}
public void setJibun(String te){
jibun=te;
if(jibun.equals("グー")){
jgazou="img/hand4-1-3.gif";
}
else if(jibun.equals("チョキ")){
jgazou="img/hand4-1-1.gif";
}else{
jgazou="img/hand4-1-2.gif";
}
System.out.println("jibun"+jibun);
}
public String getHantei(){
return hantei;
}
public void setHantei(){
String hantei2="";
if( (computer.equals("グー"))&&(jibun.equals("チョキ"))||(computer.equals("チョキ"))&&(jibun.equals("パー"))||(computer.equals("パー"))&&(jibun.equals("グー")) ){
System.out.println("コンピュータの勝ち");
hantei2="コンピュータの勝ち";
}
  else if( (computer.equals("グー"))&&(jibun.equals("パー"))
    ||(computer.equals("チョキ"))&&(jibun.equals("グー"))
    ||(computer.equals("パー"))&&(jibun.equals("チョキ")) ){
System.out.println("あなたの勝ち");
hantei2="あなたの勝ち";
}else{
System.out.println("あいこ");
hantei2="あいこ";
}
hantei=hantei2;
}
}

JSP・Servlet・Beanがうまくいかなくて困っています。開発環境はWindowsXP JDK5とEclipse3.2とTomcat5.5を使って作っています。
じゃんけんをするゲームを作ったのですが、コンピュータの手は文字列も画像もきちんと出るのですが、自分の手が文字列は文字化けして画像も正しく表示されません。
JSPのcharsetやServletのrequest.setCharacterEncoding()メソッドなど文字化け等で考えられることはいろいろ調べてやってみたつもりなのですがどうもうまくいきません。コンソールに値を出力するようにしてデバックも...続きを読む

Aベストアンサー

JankenStart.jspのエンコーディングがShift_JISなので、
te1の値もShift_JISで送信されてきていると思いますが、
 String te=request.getParameter("te1");
だと、そのままJavaはunicodeだと思って読み込んでしまうので、
文字コード変換しなければならないと思います。
 String te=new String(request.getParameter("te1").getBytes("ISO-8859-1"), "Shift_JIS");
としてみたらどうでしょうか。

QURLエンコード(JavaScript)をデコード(JSP)する方法

JavaScriptでescapeでエンコードした文字列をJSPで取得しデコードするにはどのようにしたらよいのでしょうか?
JavaScriptで言うところのunescapeにあたるメソッドはJavaでは何になるのでしょうか?
URLDecoder.decodeを利用して

String P = "";
P = URLDecoder.decode("%u304A%u306F%u3088%u3046","UTF-8");

としていますが、上手くデコード出来ません。

Aベストアンサー

URLDecoder.decode
は%uhhhhの形式を理解しないようです。

URLDecoder.decode("%30%4A%30%6F%30%88%30%46","UTF16");
でデコードできるのは確認したので、
単純には、
%uHHhh→%HH%hhに変換してやればいいことになると思います。
変換には、
String str = "%u304A%u306F%u3088%u3046";
str = str.replaceAll("%u(..)(..)","%$1%$2");
としてやればいいと思います。

QサーブレットとJSPについて

こんにちは、今回初投稿させてもらいます。aetklimです。よろしくお願いします。
過去ログを見たのですが、同じような質問が見当たらなかったので、質問させてもらいます。 初歩的なことなのですが、サーブレットとJSPの意味(違い)が分かりません。本やサイトなどで調べたのですが、初めての僕には意味不明なのでどなたか、詳しく、分かりやすいく説明してもらいませんでしょうか。 どうか、よろしくお願いします。返答をお待ちしております。

Aベストアンサー

JAVA言語そのものについてはある程度は理解されているでしょうか。
また、WEBの仕組みやWEBアプリケーションについての理解も必要です。

Java Servletというのはサーバーの内部で動作するJAVA言語で作られたアプリケーションです。
動作としてはCGIと同じような動きをします。(仕組みは違いますが)
掲示板を例にするとHTMLページから送信されたデータを受取り、ファイルに書き込み、その結果画面をブラウザに送信するといった処理を行うのがServletです。

JSPはHTMLの記述の中にJAVAのコードを記述することでコンパイルなしでデータの受取りや動的なページの生成を行う技術です。
Servletを用いても動的なHTMLは作れますが、HTMLのコード全てをServletから送信しなければならないので面倒であり、また、HTMLは画面デザインに関係してくるので
コンパイルが必要なServletに記述していては画面の変更などをHTMLファイルのように簡単に行えません。
JSPはコンパイルをせずHTMLファイルの中に直接JAVAコードを記述するだけでで動的なページを生成できるのでデザインの変更などが行いやすいのがメリットです。
ただし、あまりJAVAコードを記述すると内容が複雑となり管理しにくくなります。
そこで役割としてサーバ内部の処理はServletで行い、画面表示はJSPで行うというのが一般的な方法となっています。

JSPはコンパイルしないと書きましたが、実際はサーバにインストールされたJSPコンテナというモジュールによって自動的にコンパイルされServletに変換されています。
簡単に書くとJSPはHTMLの中にServletのJAVAコードが埋め込まれていてアクセス(起動)されると自動的にコンパイル・実行を行う機能です。
つまりJSPも結局は同じServletであるということになります。
ただ、プログラムの処理と表示する画面の部分をメンテナンスしやすいように別々にしているという訳です。

下記のページで分りやすく解説されているので参考にしてください。

JSP・サーブレットについての解説
http://www.atmarkit.co.jp/fjava/rensai2/jspservlet01/jspsevlet01_1.html

WEBの仕組み
http://www.lsd.tamagawa.ed.jp/johokiso/ITTEXT2001/FPEx/FPIndex.htm
CGIについて
http://www.mytools.net/cgitips/index.html

JAVA言語そのものについてはある程度は理解されているでしょうか。
また、WEBの仕組みやWEBアプリケーションについての理解も必要です。

Java Servletというのはサーバーの内部で動作するJAVA言語で作られたアプリケーションです。
動作としてはCGIと同じような動きをします。(仕組みは違いますが)
掲示板を例にするとHTMLページから送信されたデータを受取り、ファイルに書き込み、その結果画面をブラウザに送信するといった処理を行うのがServletです。

JSPはHTMLの記述の中にJAVAのコードを記述する...続きを読む

Q子→親ウインドウへデータを受け渡し、子ウィンドウを閉じる。

このような処理はできないでしょうか?

子ウィンドウはコード番号の検索用。該当のコードのリンクをクリックすると、そのコード番号を親ウィンドウのテキストボックスへ落とし込む。そのタイミングで、子ウィンドウは閉じる。
子→親ウインドウへのデータの受け渡しと、子ウィンドウのクローズを同時に行うようなイメージです。
よろしくお願いします。

Aベストアンサー

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<th>顧客名称</th>
</tr>
<tr>
<td><a href="javascript:ich('ABC商店')">0001</a></td>
<td>ABC商店</td>
</tr>
<tr>
<td><a href="javascript:ich('DEF商店')">0002</a></td>
<td>DEF商店</td>
</tr>
</table>

もしくはNo.1様の言うようにidを設定して
【親画面】
<input type="text" name="kokyaku_cd" size="10" id="kokyaku_cd">

【子画面 function内】
window.opener.document.getElementById("kokyaku_cd").value=n;

でできると思います

こんにちは

【親ウィンドウ】
<form action="xxx.php" method="POST" name="myForm">
顧客コード
<input type="text" name="kokyaku_cd" size="10">
<a href="javascript:void(0)" onClick="window.open('search.html','search','menubar=no,height=400,width=300');">検索</a>
</form>

【子ウィンドウ】
<script language="javascript"><!--
function ich(n) {
window.opener.document.myForm.kokyaku_cd.value=n;
window.close();
}
//--></script>

<table>
<tr>
<th>顧客コード</th>
<t...続きを読む

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Qjavascriptからjavaを呼び出したい

javascriptの勉強中です。
javascriptでajaxを用いてjavaのメソッドにアクセスし、結果をjavascriptに返す、という実装をしたいのですが上手く行きません。

流れとしては以下のようなものを想定しています。

js
/project/WebContent/js/testJS.js(画面の値を引数としてtestJavaクラスのtestMethodメソッドを呼び出す)

java
/project/src/java/jp/co/application/util/testJava.java(受け取った引数の値をtestDAOクラスのtestDAOMethodメソッドに渡す)

java
/project/src/java/jp/co/application/dao/testDAO.java(受け取った値を用いてDBにアクセスし、結果をjsに返す)

まず技術的に、同じプロジェクト内のjavaメソッドをjs上で呼び出し、結果を受け取るということは可能なのでしょうか。
ご教示お願いします。

Aベストアンサー

#3 です。

> 「javaを使わない」という条件だと、XMLのリクエストのみで実現は可能でしょうか。
DB上にあるデータを全てXML化して置いておけば出来なくはありません。
ただ、その場合は静的データ(XML)で管理することになるので、DBを使用する意味がなくなると思うのですが…。

DBを利用するならサーバサイドスクリプトの存在は必須です。

1. DBの内容をサーバ意サイドスクリプトで出力
2. 出力データを JavaScript で受け取り、カレンダーに描画する

このような処理が必要になります。
出力データのフォーマットは JSON, XML 何でも良いですが、JavaScript で認識しやすいデータが望ましいですね。
DBデータがあらかじめキャッシュして置ける内容なら初めからJavaScriptに全データをObjectとして渡しておくのが理想だと思います。
月が変化する毎にリクエストを発行する必要がなくなりますので、コードを単純化できます。
その場合は、カレンダーを出力するHTMLをサーバサイドスクリプトで書いて、JSONを出力しておくのが楽な実装ですね。

# Re: mifu223さん

#3 です。

> 「javaを使わない」という条件だと、XMLのリクエストのみで実現は可能でしょうか。
DB上にあるデータを全てXML化して置いておけば出来なくはありません。
ただ、その場合は静的データ(XML)で管理することになるので、DBを使用する意味がなくなると思うのですが…。

DBを利用するならサーバサイドスクリプトの存在は必須です。

1. DBの内容をサーバ意サイドスクリプトで出力
2. 出力データを JavaScript で受け取り、カレンダーに描画する

このような処理が必要になります。
出力データのフォーマッ...続きを読む


人気Q&Aランキング