トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

ServletでのGET/POST対応

ServletでのGET/POST対応

Servletにて、HTMLのPOST(フォームでの入力)、 GET(<a href="http://xxxx.yyy.zz:8080/mydir/servlet/test?name=xx&val=yyy">のような指定)、より値を取って来るには、request.getParameterを使用します。

ただし、取得してきた文字列はHTMLのコードそのままが入ってくるため、文字化け対策をしておかないと全角文字が化けてしまいます。そのため、以下のように変換処理をかけてあげる必要があります。

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class formTest extends HttpServlet {

    public void doGet(HttpServletRequest request,
              HttpServletResponse response)
        throws IOException, ServletException {

        response.setContentType("text/html; charset=SHIFT_JIS");
		
        PrintWriter out = response.getWriter();

        //入力値の取得
        String Name = request.getParameter("name");

        //文字化け回避のエンコード処理
       if(Name!=null){
            Name = new String(Name.getBytes("8859_1"), "JISAutoDetect");
        }

        out.println("<html>");
        out.println("<head>");

        out.println("<title>フォームより入力のテスト</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("フォームより入力のテスト<br>");
        out.println("name="+Name+"<br>");
        out.println("<hr>");
        out.println("<form action=\"./formTest\" method=\"POST\">");
        out.println("<input type=\"text\" name=\"name\"><br>");
        out.println("<input type=\"submit\">");
        out.println("<hr>");
        out.println("</form>");

        out.println("</body></html>");
		
        out.close();
    }

    //POST処理の場合は、doGetと同じであるのでそのままdoGetに飛ばす
    public void doPost(HttpServletRequest request,
                HttpServletResponse response)
        throws IOException, ServletException {

        doGet(request, response);
   }
}

上記の場合、フォームの「name」より入力値を「request.getParameter("name");」で取得してきます。その後、「Name = new String(Name.getBytes("8859_1"), "JISAutoDetect");」より文字コード変換します。これがないと、フォームから取得した文字が表示する段階で文字化けしてしまうことになります。

上記のソースは、GET/POST両方に対応しています。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.