■ getParameter 메소드
request 객체는 클라이언트가 폼에 입력한 데이터를 getParameter 메소드를 통해서 얻어올 수 있다. 원하는 값을 얻기 위해서는 입력양식의 name 속성 값을 getParameter메소드의 전달인자로 기술한다.
메 소 드
|
설 명
|
getParameter(String 변수명)
|
지정한 이름의 파라미터 중 첫번째 파라미터의 값을 구함 |
getParameterValues(String 변수명)
|
지정한 이름을 가진 파라미터의 모든 값을 String[] 구함
|
서버로 전달된 입력 양식의 내용은 서블릿에서 request 객체의 getParameter 메소드가 읽는다.
QueryString.java |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>입력식 태그와 퀴리 스트링 살피기</title> </head> <body> <form method = "get" action = "servlet/QueryString"> <table> <tr> <td align = "center">아이디</td> <td><input type = "text" name = "id" size = "20"></td> </tr> <tr> <td align = "center">비밀번호</td> <td><input type = "password" name = "pw" size = "20"></td> </tr> <tr> <td align = "center">회원이름</td> <td><input type = "text" name = "name" size = "20"></td> </tr> <tr> <td align = "center">회원구분</td> <td><input type = "radio" name = "mclass" value = "일반회원">일반회원 <input type = "radio" name = "mclass" value = "교수님">교수님 </td> </tr> <tr> <td align = "center">전화번호</td> <td> <select name = "phone1"> <option value = "010">010</option> <option value = "011">011</option> <option value = "016">016</option> <option value = "017">017</option> <option value = "018">018</option> <option value = "019">019</option> </select> - <input type = "text" name = "phone2" size = "4" maxlangth ="4"> - <input type = "text" name = "phone3" size = "4" maxlangth ="4"> </td> </tr> <tr colspan = 2> <td align = "center"> <input type = "submit" value = "전송"> <input type = "reset" value = "취소"> </td> </table> </form> </body> </html> |
출력화면 |
|
QueryString.java |
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class QueryString extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 요청 파라미터의 캐릭터 인코딩을 한글로 하기 위한것 request.setCharacterEncoding("utf-8"); // 서버 형태의 한글의 출력을 원활하게 해 주는 역할을 한다. response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); // 퀴리 스트링으로 넘어온 값들을 저장할 변수 선언 String id = "", name = "", mclass = "", phone1 = "", phone2 = "", phone3 = ""; // 요청객체(request)의 getParameter 메소드로 퀴리 스트링으로 넘어온 값을 얻어옴 id = request.getParameter("id"); name = request.getParameter("name"); mclass = request.getParameter("mclass"); phone1 = request.getParameter("phone1"); phone2 = request.getParameter("phone2"); phone3 = request.getParameter("phone3"); // PrintWriter out = response.getWriter(); 에서 얻어온 출력 객체를 사용하여 웹 브라우저에 html 문서에서 입력한 내용을 출력한다. out.println("<html><head>입력식 태그와 퀴리 스트링 출력값</head><body>"); out.println("당신이 입력한 정보 입니다.<br/>"); out.println("아이디 : <b>"); out.println(id); out.println("</b><br/>이름 : <b>"); out.println(name); out.println("</b><br/>구분 : <b>"); out.println(mclass); out.println("</b><br/>전화번호 : <b>"); out.println(phone1); out.println("-"); out.println(phone2); out.println("-"); out.println(phone3); out.println("</b><br/><a href = 'javascript:history.go(-1)'>다시</a>"); out.println("</body></html>"); out.close(); } } |
출력화면 |
|
■ getParameterValues 메소드
입력 양식을 설계하다 보면 이름을 동일하게 주어서 여러 개의 입력 양식들을 만들어 놓고 동일한 이름의 입력 양식에서값을 동시에 받아 오게 될 경우가 있다.
동일한 이름의 체크 박스가 여러개 있는 HTML 문서에서 여러개의 항목을 선택한 후 이름 서블릿 파일로 전송하면 다음과 같이 쿼리 스트링에 동일한 이름으로 여러 개의 값들이 여러차례 전송되는 것을 확인할 수 있다.
이럴 경우 요청(request)객체의 파라미터 관련 메소드 중에서 getParameterValues 메소드를 사용해야 한다. getParameterValues 메소드는 지정한 이름을 가진 파라미터의 모든 값을 배열 형태로 얻어오기 때문에 동일한 이름으로 여러 번 값이 전송되어도 처리가 가능하게 된다.
※ 선택된 항목이 없더라도 서블릿에서 이에 대한 적당한 메시지를 출력하도록 프로그래밍 해야 한다.
multPara.html |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>이름을 동일하게 주어 체크 박스 여러 개 만들기</title> </head> <body> <form method = "get" action = "servlet/multiPara"> <h2>악세사리</h2><br/> 관심항목을 선택하세요...<br/> <hr/> <input type = "checkbox" name = "item" value = "신발"> 신발 <input type = "checkbox" name = "item" value = "가방"> 가방 <input type = "checkbox" name = "item" value = "벨트"> 벨트<br/> <input type = "checkbox" name = "item" value = "모자"> 모자 <input type = "checkbox" name = "item" value = "시계"> 시계 <input type = "checkbox" name = "item" value = "쥬얼리"> 쥬얼리<br/><br/> <input type = "submit" value = "전송"> <input type = "reset" value = "취소"> </form> </body> </html> |
출력화면 |
|
multiPara.java |
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class multiPara extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); String []item; // 여러개의 값을 저장하기 위한 배열 item = request.getParameterValues("item"); // item 퀴리스트링 값 얻어옴 out.println("선택된 항목이"); try { for (int i = 0; i < item.length; i++) { // 항목의 갯수만큼 들면서 out.println(" : " + item[i]); // 선택 항목 출력 } out.println("입니다."); } catch (Exception e) { // 예외가 발생하면 out.println("없습니다."); // 선택된 항목이 없다는 것이다. } } } |
풀이
|
체크박스 중에서 선택된 항목이 없는 경우에는 item에 널값이 저장된다. 널값을 저장하는 item에 대해서 length 속성을 사용하면 예외가 발생하고 catch 구문으로 가게 되므로 "선택된 항목이 없습니다." 라고 출력된다. |
출력화면 (신발, 가방, 시계를 체크한 경우) |
|
출력화면 (선택 항목이 없는경우) |
|