본문 바로가기
☕ Java 웹 프로그래밍/Servlet & JSP

[Servlet&JSP] 사용자 입력: GET 요청과 쿼리스트링

by 일단연 2023. 5. 24.

* 본 글은 [뉴렉처]의 Servlet&JSP 프로그래밍 강의를 듣고 정리한 글입니다.

 

2020 Servlet&JSP 프로그래밍

 

www.youtube.com

 

 사용자 입력: GET 요청과 쿼리스트링 

GET 요청

  • 무엇을 달라고 하는 요청에는 옵션이 있을 수 있음 > 옵션을 읽어 그에 맞는 문서를 만들어줘야 함
    • 예: http://localhost/hello?cnt=3 를 브라우저 URL 입력창에 넣으면, hello를 3번 반복하는 웹문서 결과를 보여줌
  • 이때 그 옵션을 ‘쿼리스트링(QueryString)’이라고 함

쿼리스트링(QueryStirng) (참고)

  • 사용자가 입력한 데이터를 서버로 전달하는 가장 단순하고 널리 사용되는 방법
  • URL 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것
  • 웹 프로그램에서는 현재 페이지의 정보를 바로 다음 페이지에서는 전혀 알 수 없으며, 페이지가 이동되면 이전 페이지의 값들은 모두 잃음
    • But, 프로그램을 제작 시 페이지 사이에 정보 교환이 필요할 떄가 있는데 이를 위해 사용하는 게 ‘쿼리스트링
  • get방식으로 요청할 때 URL 주소 뒤에 입력 데이터를 함께 제공
  • 브라우저 URL의 주소 입력란에서 확인 가능
  • 형태: 리소스?이름=값
    • ? 기호로 시작하며, = 기호를 중심으로 앞부분은 이름, 뒷부분은 값
    • 쿼리스트링이 2개 이상: & 기호로 연결
    • 같은 키가 중복될 경우, 가장 나중에 선언된 값을 취함
  • 쿼리스트링 형태로 데이터가 전송되는 것은 <form>태그에 전송방식을 get으로 해 서버로 데이터를 보낼 때 관찰됨
  • 서버로 데이터를 전송하기 위해서는 데이터를 입력할 수 있는 텍스트박스(<input type=”text”>)가 필요
    • 텍스트박스: <input>태그에 type 속성값을 ‘text’로 설정
    • 텍스트박스에 입력된 내용이 서버로 전달될 때 name 속성 값에 넣은 텍스트박스의 이름이 실려감
      • <input type=”text” name=”이름”/>

요청객체(request)와 파라미터 관련 메소드(getParameter)

  • 사용자가 폼에 입력한 값을 서블릿에서는 request객체의 getParameter( )메소드를 호출해 <input>태그를 통해 입력된 값을 읽어올 수 있음
    • getParameter( )메소드: 쿼리스트링의 쿼리 키워드를 읽음. 클라이언트로 해당 키워드를 보낼 것을 서버가 알고 있게 함
    • 서버는 키워드대로 값을 읽어서 맞는 결과를 만들어냄
  • 원하는 값을 얻기 위해 <input>태그의 name 속성 값을 getParameter( )의 매개변수로 입력
  • 예시: name 속성 값을 getParameter( )의 매개변수로 얻어 String 변수 id에 저장
//클라이언트에서 입력
<input type="text" name="id"/>

//서버
String id=request.getParameter("id");
  • getParameter( )는 파라미터 값을 항상 String으로만 얻어옴
  • 입력받은 문자열 값을 int형으로 변환하려면 Integer 클래스의 parseInt( )메소드 사용
int id = Integer.parseInt(request.getParameter("id");

쿼리스트링 값을 이용한 반복문 작성

  • 1) 쿼리스트링을 int형 변수로 선언 및 초기화
    • 입력도구 request객체의 getParameter( )메소드를 이용
      • getParameter( )메소드: 쿼리스트링의 쿼리 키워드를 읽음. 클라이언트로 해당 키워드를 보낼 것을 서버가 알고 있게 함
      • 서버는 키워드대로 값을 읽어서 맞는 결과를 만들어냄
    • request.getParameter("cnt") 는 무조건 문자열로 전달되니까 String>int로 변환하는 Integer 클래스의 parseInt( )메소드 사용
  • 2) 반복문 작성
    • 반복문에 해당 키워드(cnt)를 삽입
protected void service(HttpServletRequest request
                      , HttpServletResponse response)
                      throws ServletException, IOException
{
  response.setContentType("text/html; charset=UTF-8");
  response.setCharacterEncoding("UTF-8");
  PrintWriter out = response.getWriter();
		
  **int cnt = Integer.parseInt(request.getParameter("cnt"));
		
  for(int i = 0; i < cnt; i++) {
    out.println((i+1) + ": 안녕 Servlet<br />");
  }**
}
  • 결과

    • URL 작성할 때 쿼리스트링 값을 넣지 않으면 500 에러 발생
    • 쿼리 값이 없어도 정상적으로 작동할 수 있게 기본 값을 사용