またまた質問で申し訳ないんですが、よろしくお願いします。

Servletで表示させる文字が化けます。
ServletのdoGet()を呼び出しています。
ServletをURLにて直接呼び出しているので、doGetで間違いないと思います。記述としては、

response.setContentType(text/html;charset=Shift_JIS);
と記述しています。
過去の質問等も調べて、byteに変換してJISAutoDetectを指定しても直りませんでした。
str = new String(str.getBytes("iso-8859-1"), "JISAutoDetect")としました。
8859-1も、同様に駄目でした。

そして、tomcatを起動した時に出るDos窓に
「Unsuported encoding: Shift_JIS」
と出ているのですが、tomcat3-1-4ではサポートされてないのでしょうか??

なんとか、解決策ってないでしょうか?
教えてください。よろしくお願いします。

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

A 回答 (7件)

文字化けの原因を探るほうは、ちょっと行き詰まってしまいました。


(Tomcatのバージョンをあげていただくか、それでだめならソースを見て考えるしか、私には思いつきません…)

気にされているログファイルの内容ですが、

Starting endpoint port="8080" handler="org.apache.tomcat.service.http.HttpConnectionHandler"
Starting endpoint port="8007" handler="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"

この2行に関しては、エラーではなくTomcatが使用しているポート番号と、クラス名です。(ご存知だとは思いますが、TomcatはJavaで記述されています)

Tomcatを起動して、ブラウザで確認する場合に

http://localhost:8080/

と入力されると思いますが、この「8080」が、Tomcatのサービスのポート番号です。

他の内容に関してもエラーではなく、Tomcatの自身の設定を表示しているだけですのでご安心下さい。
TOMCAT_HOME\conf\server.xmlで設定している内容の一部ですので、こちらのファイルを一度覗いてみてください。

では、お役に立てずにすみませんが、がんばってください。
    • good
    • 0

補足です。



もしJDK1.2.×を使っていらっしゃるのなら

str.getBytes("iso-8859-1")を

str.getBytes("iso8859-1") か

str.getBytes("iso8859_1")に してみてください。

どうも、JDKのバージョンによってエンコーディング名が違うようです。

参考までに。

この回答への補足

JDK1.3を使用していますが、とりあえずチャレンジしました。

結果は、駄目でした。
まさに、奥が深いです。
でも、面白いですね。
がんばります。
早く、日本語が見たくなってきました。

補足日時:2002/01/31 10:56
    • good
    • 0

ひとつ確認していただきたいのですが、お使いのJDKのバージョンは何でしょうか。



str = new String(str.getBytes("iso-8859-1"), "JISAutoDetect") を

TOMCAT3.2.4+JDK1.2.2で試してみると確かにgetBytes()のあたりでエラーがでました。

TOMCAT3.2.4+JDK1.3.0で試すとエラーが出ませんでした。

JDK1.2.×をお使いでしたらJDK1.3.×にしてみてください。

参考までに。

この回答への補足

おはようございます。
返事が遅くなりました。

jdkの方は、1.3を使用しています。

>TOMCAT3.2.4+JDK1.2.2で試してみると確かに
>getBytes()のあたりでエラーがでました。

そうなんです。私も、そこでエラーでます。
でも、問題の切りわけを考えると、とりあえずTOMCAT自体
が怪しいかなと思っています。

それと、TOMCAT起動時の画面に表示される内容が正常でないような気がします。下記の通りですが、エラーが出ているのでlogs/tomcat.logを見ろ。みたいな。

■■■■■■■■■■tomcat起動時画面■■■■■■■■
Context log: path="/examples" Adding context path="/examples" docBase="webapps/examples"
Context log: path="/XmlServlet" Adding context path="/XmlServlet" docBase="webapps/XmlSe
vlet"
Context log: path="" Adding context path="" docBase="webapps/ROOT"
Context log: path="/test" Adding context path="/test" docBase="webapps/test"
Starting tomcat. Check logs/tomcat.log for error messages
■■■■■■■■■■■■■■■■■■■■■■■■■■

しかし、一応起動は出来ています。
それと、現在URLの指定にIPアドレスを指定しています。
localhostを指定すると表示できません。
これも、何か設定がおかしいのでしょうか?

tomcat.logも下記に記します。
★★★★★★★tomcat.log内容★★★★★★★★★★★★
Starting tomcat install="C:\tomcat" home="C:\tomcat" classPath="C:\tomcat\classes;C:\tomcat\lib\webserver.jar;C:\tomcat\lib\jasper.jar;C:\tomcat\lib\xml.jar;C:\tomcat\lib\servlet.jar;C:\jdk1.3\lib\tools.jar;D:\javamail\javamail-1.2\mail.jar;D:\javamail\jaf-1.0.1\activation.jar;.;C:\jdk1.3\bin;C:\tomcat\lib\servlet.jar;C:jdk1.3\lib\tools.jar"
Context log: path="/admin" Automatic context load docBase="C:tomcat\webapps\admin"
Context log: path="/admin" Adding context path="/admin" docBase="C:\tomcat\webapps\admin"
Starting endpoint port="8080" handler="org.apache.tomcat.service.http.HttpConnectionHandler"
Starting endpoint port="8007" handler="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"
★★★★★★★★★★★★★★★★★★★★★★★★★★
私には、さっぱりの内容です^^;
何か、アドバイスあればよろしくお願いします。
バージョンアップも考えていますが、もうちょい、がんばってみます。

補足日時:2002/01/31 10:35
    • good
    • 0

TOMCATのバージョンを上げることはできないのでしょうか?


3.2.4もしくは3.3.1を使った方がいいと思うのですが。
(4.0.1はまだ安定していない感があるので、お勧めしません。)

3.1.4は使ったことありませんが、セキュリティは大丈夫ですか?
あまり古いバージョンだとセキュリティホールが塞がれて
いなくて攻撃を受けやすい可能性があります。

この回答への補足

まいどまいどで、ありがとうございます。

TOMCATのバージョンは上げる事が出来ます。
仕事上使用しているとかではなくて、勉強してみよう
と思い、見つけたCD(本か何かについてた)から
TOMCATをインストールしたので、いつでも変更可能です。

ですので、セキュリティも全然大丈夫です。
ご心配して頂いて、ありがとうございます。

もうちょっと、色々調べてみて、だめだったらバージョンアップします。(結構、原因調査ってのも勉強になり面白かったりで^^;)

補足日時:2002/01/31 10:25
    • good
    • 0

下の回答1の訂正です。



>どうもJSPの時は"Shift_JIS"と書かないとうまくいかないのですが、Servletの時は

この記述は勘違いでした。encodingを"Shift_JIS"と指定するのは、server.xmlやweb.xmlの中でです。

JSPでも charset=SJIS の指定はできます。

(もしかするとTOMCATのバージョンで違うかもしれませんが・・・)

混乱させてしまいましたら、すみません。

この回答への補足

いえいえ、ありがとうございます。

色々教えて頂きありがたく思ってます。
早く、日本語が表示できるように必死でがんばってます。

ちなみに、現在は、下みたいになってます。
「??????? GET ????????????????」
恥ずかしながら、GETだけが正常に表示できてます。

がんばります。

補足日時:2002/01/30 18:07
    • good
    • 0

//str = new String(str.getBytes("iso-8859-1"), "JISAutoDetect");



str = new String(str.getBytes("SJIS"), "JISAutoDetect");

とやってみたら、どうなります?

この回答への補足

コンパイルは、通りました。
しかし、表示させようとすると、エラーがでました。
下記に記します。

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

Error: 500
Location: /servlet/test.Servlet1
Internal Servlet Error:

java.io.UnsupportedEncodingException: SJIS
at sun.io.Converters.getConverterClass(Unknown Source)
at sun.io.Converters.newConverter(Unknown Source)
at sun.io.CharToByteConverter.getConverter(Unknown Source)
at java.lang.String.getCTBConverter(Unknown Source)
at java.lang.String.getBytes(Unknown Source)
at kimura.Servlet1.doGet(servlet1.java:22)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:597)
at org.apache.tomcat.servlets.InvokerServlet.service(InvokerServlet.java:257)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559)
at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:160)
at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338)
at java.lang.Thread.run(Unknown Source)

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

また、tomcatのログ(tomcatインストールディレクトリ/conf/tomcat.log)にも同じエラーが書かれています。
そして、最初の2行に変なものがありますが、これは関係有りそうでしょうか?

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
Starting endpoint port="8080" handler="org.apache.tomcat.service.http.HttpConnectionHandler"
Starting endpoint port="8007" handler="org.apache.tomcat.service.connector.Ajp12ConnectionHandler"
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

アドバイスよろしくお願いします。
エラーだらけで、泣きそうです。
でも、がんばります。

補足日時:2002/01/30 18:00
    • good
    • 0

response.setContentType(text/html;charset=Shift_JIS);



の代わりに

response.setContentType("text/html;charset=iso-2022-jp");

と書いてみてください。(もしだめなら "SJIS"で試してみてください。)

どうもJSPの時は"Shift_JIS"と書かないとうまくいかないのですが、Servletの時は
iso-2022-jp もしくは SJIS と書くようです。

では。

この回答への補足

早速試してみました。

しかし、両方ともエラーが出てしまいます(泣)
エラー内容です。
「Unsuported encoding: iso-2022-jp」
「Unsuported encoding: SJIS」

どうなってるんでしょうねぇ。
難しいですよ。
Unsuportedって、もしかして、何もサポートされてないなんてことだったら、どうしよう。。
困ったぁ~。

補足日時:2002/01/30 17:53
    • good
    • 0

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

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

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

QFirefox/2 カーソルが砂時計のまま while(line=str.shift()){

<html>
<head>
<script type="text/javascript">
function init(){
var str="a:b:c".split(/:/);
var line;
while(line=str.shift()){
document.write(line + "<BR>");
}
}
</script>
</head>
<body onload="init()">
</body>
</html>

上記をFirefox/2(Win XP)で実行すると、カーソルが砂時計のまま戻りません。(IE6では再現視せず)

回避策ありましたら教えてください。

Aベストアンサー

document.close();

で閉じてみてください。

QTomcat Servletが動きません

『Javaへの道:Tomcat』のページを参考に同じようにやってるのですが、
JSPはうまくいくのですがServletがうまくいきません。
(長文になります)

参考ページと私の環境で違う点
Windows XP Home → XP Pro
Tomcat 6 → Tomcat 7
JDK6.0 → JDK6.23
ポート8080 → 8081

以下のファイル、フォルダを作りました(参考ページそのままです)。
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\jspdir\HelloJsp.jsp
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\WEB-IMF\classes\HelloServlet.class
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\WEB-IMF\web.xml
C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf\Catalina\localhost\javaroad.xml

--↓↓HelloJsp.jspここから↓↓--
<HTML>
<BODY>
from JSP source<br>
<%= new java.util.Date() %>
</BODY>
</HTML>
--↑↑HelloJsp.jspここまで↑↑--

--↓↓web.xmlここから↓↓--
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>

</web-app>
--↑↑web.xmlここまで↑↑--

--↓↓javaroad.xmlここから↓↓--
<Context path="/javaroad" reloadable="false"/>
--↑↑javaroad.xmlここまで↑↑--


JSPを起動
http://localhost:8081/javaroad/jspdir/HelloJsp.jsp → 正しく表示される

Servletを起動
http://localhost:8081/javaroad/Hello → ステータス404
The requested resource (/javaroad/Hello) is not available.


<気になる点>
1.Tomcatを起動するためStratボタン押しても1回では起動せず、2~3回で起動する。
 1回目のときcommons-daemon.2011-01-15.logにこんなログが出る。
 [2011-01-15 23:01:16] [error] Pid file 'C:\Program Files\Apache Software Foundation\Tomcat 7.0\logs\tomcat7.pid' exists
 [2011-01-15 23:01:16] [error] ServiceStart returned 1

2.servletクラスは正しくコンパイルできているのか


状況を詳しく説明しようとして長々と書いてしましたが
Servletを表示するにはどうしたらいいでしょう?
足りない情報があれば追加します。

『Javaへの道:Tomcat』のページを参考に同じようにやってるのですが、
JSPはうまくいくのですがServletがうまくいきません。
(長文になります)

参考ページと私の環境で違う点
Windows XP Home → XP Pro
Tomcat 6 → Tomcat 7
JDK6.0 → JDK6.23
ポート8080 → 8081

以下のファイル、フォルダを作りました(参考ページそのままです)。
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\jspdir\HelloJsp.jsp
C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\W...続きを読む

Aベストアンサー

> C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\WEB-IMF\classes\HelloServlet.class
> C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\javaroad\WEB-IMF\web.xml

× WEB-IMF
◯ WEB-INF

タイプミスですかね?

QTomcat起動時にServletの起動

tomcatを起動時に、あるServletを起動したいと思います。
どこかの設定ファイルに記述すれば、そのようなことは可能でしょうか?
可能な場合、簡単な手順等も教えていただければ、助かります。

Aベストアンサー

web.xml内の<servlet>タグ内に
<load-on-startup>タグを追加することで
サーバ起動時に実行する手順もあります。

<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>起動したいクラス名</servlet-class>
<load-on-startup/>
</servlet>

#servlet-nameは適当につけてください

この場合、<load-on-startup>は空ですが、
起動したいクラスが複数ある場合、
このタグに正数を与えて順序づけすると
起動の順番をつけることができると思います。

Qtomcatとservletの関係

表は要するにどうゆう意味かわかりません。最新のservlet2.5はjdkの何をつかえばいいのか?

Servlet/JSP Spec Apache Tomcat version
2.5/2.1 6.0.x
2.4/2.0 5.5.x
2.3/1.2 4.1.x
2.2/1.1 3.3.x

Aベストアンサー

左のServlet/JSP Spec のところは,Servlet,JSPという仕様(規格)のそれぞれのバージョンです.
その仕様を満たすように実装されたTomcatはどのバージョンなのかを表すのが,右側のApache Tomcat version です.

> 最新のservlet2.5はjdkの何をつかえばいいのか?

JDKのバージョンは直接は関係ありません.
Servletの2.5を使いたいのなら,表の通り,Tomcat 6.0.xが必要です.
JDKのバージョンは,そのTomcat 6.0.xがどのJDKを必要とするかで決まります.そして,Tomcat 6.0は,J2SE5以降を必要とするようですので,必要なJDKは5.0以降ということになります.

QTomcatでServletの配置場所を変更できますか?

Tomcatを使ってServletを開発しています。
普通ならば、d:\tomcat\webapps\test\WEB-INF\classes
に開発したServletを配置しますが、
事情があって、別のドライブにServletを置きたいのです。
# 例 E:\test\classes\

その場合、どのようにすればよいのでしょうか?
どなたか、アドバイスよろしくお願いします。

Aベストアンサー

%TOMCAT_HOME%/conf/server.xml の、
配置したいコンテキストの記述の個所で、

<Context path="hoge" docBase="C:/hoge" ... />

と docBase 属性で絶対パスを指定すれば、
そこがコンテキストルートになります。

質問にあるように、コンテキスト内のサーブレットだけを別の場所に
移動することはTOMCATが使用しているクラスローダ自体をカスタマイズしないと
できません。


人気Q&Aランキング

おすすめ情報