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

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

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

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

3594閲覧

tomcatでのファイル出力

Test1115Test

総合スコア52

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2016/06/03 23:28

eclipseでtomcatを使っています
別のhtmlから文字を受け取ってファイルに出力したいのですがうまくいきません
doPost(HttpServletRequest request, HttpServletResponse r
esponse) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
String body = request.getParameter("body");
body = new String(body.getBytes("8859_1"),"SJIS");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print("<html><head><title>tt</title></head><body>");
//out.print(body);
try{
String path = getServletContext().getRealPath("/WEB-INF/sample.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(path,true));
bw.write(body);
bw.newLine();
bw.close();
out.print("成功");
}catch(IOException e){
out.print("失敗");
}
out.print("</body></html>");
out.close();
}

}
このように打ったのですが実行してみると??が出ます
成功のところの文字数を増やしたら?の数も増えるので、エラーになってないと思うのですがファイル出力はされません
エラーログも出ていません

解決策を教えてください

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

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

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

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

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

guest

回答2

0

ブラウザに出力している個所に出力用の文字コードが設定されていないため、文字化けが発生しています。

response.setContentType("text/html");の次の行に、以下のように追加しましょう。

java

1response.setContentType("text/html"); 2response.setCharacterEncoding("utf-8");

なお、/WEB-INF/sample.txt で指定されているファイルのありかはTomcatが動いているフォルダですので、例えば D:\tomcat8にTomcatでインストールされていて、動かしているWebアプリケーションの名前がsamplewebの場合は、次の場所になります。

java

1D:\tomcat8\webapps\sampleweb\WEB-INF\sample.txt

なお、出力されているsample.txtもおそらく文字化け(????)になると思います。Tomcatのバージョンにも依存しますが、昨今のバージョン(例えばTomcat8.0.33)であれば、以下の記述は不要です。

java

1// body = new String(body.getBytes("8859_1"), "SJIS");

投稿2016/06/04 08:34

編集2016/06/04 08:34
A-pZ

総合スコア12011

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

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

0

ベストアンサー

こんな感じでしたっけ。うろ覚え。

Java

1body = new String(body.getBytes("SJIS"), "SJIS"); 2response.setContentType("text/html;charset=Shift_JIS");

エンコーディングが合っていないだけですよ。

投稿2016/06/04 00:11

kodai

総合スコア759

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問