본문 바로가기

JSP/JSP Programming

[JSP] 요청(request) 객체의 파라미터 관련 메소드

반응형

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 = "전송">&nbsp;&nbsp;
    <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 구문으로 가게 되므로 "선택된 항목이 없습니다." 라고 출력된다.

 출력화면 (신발, 가방, 시계를 체크한 경우)

 출력화면 (선택 항목이 없는경우)



반응형

'JSP > JSP Programming' 카테고리의 다른 글

[JSP] JSP 동작 원리  (0) 2012.05.30
[JSP] JSP 기본 태그의 종류  (0) 2012.05.30
[JSP] 서블릿의 동작 원리  (0) 2012.05.30
[JSP] GET방식과 POST방식  (0) 2012.05.22
[JSP] 자바의 Web 기술  (0) 2012.05.22