javaのservletのエンコードの問題です
サーブレットの初心者です。
今日はservletエンコードの勉強しています。
バイト列から文字列を作成する際に、文字化けの問題に遭いました。
OS : fedora28
jdk : java10
server : tomcat9
IDE : eclipse4.8
以下はソースコードです。
servlet :
package getBytes_fun;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RequestSample2 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html; charset = UTF-8");
response.getWriter().append("Served at: ").append(request.getContextPath());
PrintWriter out = response.getWriter();
String tmp;
String name = "";
tmp = request.getParameter("name");
if (tmp == null || tmp.length() == 0) {
name = "未制定";
} else {
name = decodeString(tmp);
}
int old;
tmp = request.getParameter("old");
if (tmp == null || tmp.length() == 0) {
old = -1;
} else {
try {
old = Integer.parseInt(tmp);
} catch (NumberFormatException e) {
// TODO: handle exception
old = -1;
}
}
String tmps[] = request.getParameterValues("food");
String food = "";
if (tmps != null) {
for (int i = 0; i < tmps.length; i++) {
food += decodeString(tmps[i]);
food += "";
}
} else {
food = "ありません";
}
StringBuffer sb = new StringBuffer();
sb.append("<html>");
sb.append("<head>");
sb.append("<title>サンプル</title>");
sb.append("</head>");
sb.append("<body>");
sb.append("<p>お名前は ");
sb.append(name);
sb.append(" です</p>");
sb.append("<p>年齢は ");
if (old == -1) {
sb.append("未設定です</p>");
} else {
sb.append(old);
sb.append(" です</p>");
}
sb.append("<p>好きな果物は ");
sb.append(food);
sb.append(" です</p>");
sb.append("</body>");
sb.append("</html>");
out.println(new String(sb));
out.close();
}
protected String decodeString(String str) {
// TODO Auto-generated method stub
try {
byte[] byteData = str.getBytes("ISO_8859_1");
str = new String(byteData, "UTF-8");
} catch (Exception e) {
// TODO: handle exception
return null;
}
return str;
}
}
html file :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>アンケート調査です</p>
<form action="/ERP/RequestSample2" method="get">
<table>
<tr>
<td>氏名</td>
<td><input type="text" size="20" value="" name="name"></td>
</tr>
<tr>
<td>年齢</td>
<td><input type="text" size="5" value="" name="old"></td>
</tr>
<tr>
<td>好きな果物</td>
<td><select name="food" size="3" multiple>
<option value="りんご">りんご</option>
<option value="メロン">メロン</option>
<option value="ぶどう">ぶどう</option>
</select></td>
</tr>
</table>
<input type="submit" name="button1" value="送信">
</form>
プリントアウト結果:
ご教示お願い致します。