48067


sevletについて勉強しているものです。  
今は練習中テストアプリを作成しているのですが、  
UTF-8を指定してるのに、文字化けに遭いました。

開発環境は  
OS : fedora28  
JDK : java10  
tomcat : 9.0.11  
eclipse : 4.8

[code]

    package studyDOGET;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class New_doGet
     */
    @WebServlet("/New_doGet")
    public class New_doGet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    /**
     * @see HttpServlet#HttpServlet()
     */
    public New_doGet() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
    
        out.println(createHTML("GET"));
    
        out.close();
    }
    
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out = response.getWriter();
    
        out.println(createHTML("POST"));
        out.close();
    
    }
    
    private String createHTML(String methodType) {
        // TODO Auto-generated method stub
        StringBuffer sBuffer = new StringBuffer();
    
        sBuffer.append("<html>");
        sBuffer.append("<head>");
        sBuffer.append("<meta charset=\"UTF-8\">");
        sBuffer.append("<title>サンプル</title>");
        sBuffer.append("</head>");
    
        sBuffer.append("<p>");
        sBuffer.append(methodType);
        sBuffer.append("メソッドで呼び出されました</p>");
        sBuffer.append("<p><a href=\" Sample1\">リンク</a></p>");
        sBuffer.append("<form action=\" Sample1\" method=\"get\">");
        sBuffer.append("<input type=\"submit\" value=\"GETで送信\">");
        sBuffer.append("</form>");
    
        sBuffer.append("<form action=\" Sample1\" method=\"post\">");
        sBuffer.append("<input type=\"submit\" value=\"POSTで送信\">");
        sBuffer.append("</form>");
    
        sBuffer.append("</body>");
        sBuffer.append("</html>");
    
        return (new String(sBuffer));
        }
    
    }
    
[/code]

web.xml ：

[code]

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
    <display-name>ERP</display-name>
    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
    <servlet-name>helloworld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/helloworld</url-pattern>
    </servlet-mapping>
    </web-app>
    
[/code]

printout結果：

[![文字化け](https://i.stack.imgur.com/YzGvy.png)](https://i.stack.imgur.com/YzGvy.png)

eclipseの設定画面:

[![eclipse](https://i.stack.imgur.com/alA6C.png)](https://i.stack.imgur.com/alA6C.png)

google先生にききましたが、UTF-8のタグなども追加してみました。  
効きませんでした。  
ご教示お願い致します。


CC BY-SA 4.0
2018-09-04T02:56:48.283
48066
2018-09-04T03:08:18.410
2018-09-04T03:08:18.410
13007
13007
question
java linux eclipse tomcat servlet
servletの文字化けについての質問です。


`doGet()` 内で、`getWriter()` よりも前に `setContentType()` を呼ぶ必要があります。

現在のコード:

[code]

    response.getWriter().append("Served at: ").append(request.getContextPath());
    response.setContentType("text/html; charset=UTF-8");
    
[/code]

修正案:

[code]

    response.setContentType("text/html; charset=UTF-8");
    response.getWriter().append("Served at: ").append(request.getContextPath());
    
[/code]


CC BY-SA 4.0
2018-09-04T03:06:59.353
48067
2018-09-04T03:06:59.353
3475
48066
answer