ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

サーブレットとの不毛な戦いに決着をツケタヨ #209

サーブレットとの不毛な戦いに決着をつけた

昨日から悩みまくっていたサーブレットとの戦い。どこにアクセスしても405が返ってくる件。

先輩の助けを得て無事に解決しました。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/fuck")
public class Index extends  HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        PrintWriter w = resp.getWriter();
        w.println("Super fuck java servlet!");
    }
}

これが間違っていたコード。親クラスのdoGet()を呼ぶとうまくいかないらしいです。

そして解決したので適当にいろいろ出力してたのですが、今度は日本語が文字化けするという。

public class Index extends  HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=UTF-8");
        PrintWriter w = resp.getWriter();
        w.println("じゃばさーぶれっと");
    }
}

これが間違ったコード。

setContentType()getWriter()の前に書いてしまうと、サーブレット標準の文字コードで出力されてしまうようです。

なので正しくは

public class Index extends  HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter w = resp.getWriter();
        resp.setContentType("text/html; charset=UTF-8");
        w.println("じゃばさーぶれっと");
    }
}

こうですね。

2017年も終わろうとしているのにJava7で素のサーブレットを書いて初心者がハマってしまいそうなポイントでハマってる記事を書くことにどれくらい意義があるのかわかりませんが、書いておきます。

(ちなみに私の学校の「Web技術応用」とかいう名前の講義では今もサーブレットを書かされています。せめてPHPとか、なんかもうちょっと有るでしょう…)

雑談

だいぶ早いけど今日はブログを更新しちゃう。

今日含め残り二回のバイトにこのあと行ってきます。