-
GET 요청과 쿼리 스트링Servlet-JSP 2022. 1. 8. 00:12
사용자의 요청으로 가장 기본적인것은 GET 요청이 있다.
보통 http://localhost/hello 라는 페이지를 줘 라고 ----GET---> 방식으로 서버에 요청하게 된다.
그런데 무엇을 달라고 하는 요청에는 옵션이 붙을 수 있다.
http://localhost/hello?cnt=3(쿼리스트링) 이런식으로 쿼리 스트링이 붙을 수 있다. 무언가 요청하면서 전달도 같이 할 수 있는 것이다.
예를 들자면 서브웨이에 가서 주문을 하는데 야채 중에 피클은 빼주세요 처럼 특정 요청 사항이 들어 갈 수 있는 것이다.
이렇게 전달하면 서버쪽에서는 옵션을 읽어서 옵션에 맞는 문서를 돌려 주는 것이다.
http://localhost/hello?cnt=3 이것은
우리가 100번 반복했던 문서가 있는데 100번 반응이 아니라 hello를 전달하면서 3번만 반복한 것을 반환하도록 요청 한 것이다. 전달하지 않으면 100번 전달하면 3번 반복하는 문서를 반환 할 수 있도록 해 줄 것이다.
*쿼리스트링을 서버를 구현하고 있는 쪽에서 활용하는 방법*
request = 입력도구
response = 출력도구
getParameter = 아까 쿼리스트링에 심어둔 키워드를 읽을 때에는 getParameter를 사용 해 줘야한다.
response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); int cnt = Integer.parseInt(request.getParameter("cnt")); //쿼리스트링키워드 //이건 문자열이라서 형변환 해줘야한다. for(int i=0; i<cnt; i++) { //cnt는 사용자가 전달하는 수만큼 반복 out.println((i+1)+":안녕 servlet<br />"); }이렇게 작성 해 주고 실행하면

에러가 발생한다.
그 이유는 무턱대로 cnt라는 값을 달라고 한 것이다. 전달 된 값이 없는데 달라고 했기 때문에 에러가 나는 것이다.

입력창에 cnt3을 입력해줬더니 3번 반복하는 반복문이 나타났다.
만약 쿼리값을 직접 심어주지 않는다면?
그럴 경우를 위해서 기본값이라는 것이 필요하다
기본값을 주기에 앞서서 사용자가 전달 했을때 각각 어떤 식으로 값이 반환이 되는지에 대한 이해하고 파라미터를 사용해줘야 한다.
http://../hello?cnt=3 ---> "3" 문자열 3 반환 http://../hello?cnt= ---> "" 빈 문자열 반환 http://../hello? ---> 카운터가 아예 없으니깐 null 반환 http://../hello ---> 카운터가 아예 없으니깐 null 반환각각 아래와 같이 반환이 된다. 사용자가 값을 전달했을떄 허용하기 위해서는 묵시적으로 약속 된 값이 있어야 하기 때문에
int cnt = 0; 이런식으로 값을 줘야한다.
그리고 카운트 값이 들어 왔는지 알아봐야하기 때문에
String temp = request.getParameter("cnt") 라는 임시 변수가 필요하고
임시변수에서 그 값이 null인지 null이 아닌지를 알아봐야하기 때문에 if문을 작성 해 준다.
response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); //사용자로부터 전달 받아야 한다. 이걸 무턱대고 반환하다가 null이 발생한다 //int cnt = Integer.parseInt(request.getParameter("cnt")); //null이 발생하지 않게 하기 위해서 위에 코드를 임시변수에 담아둔다. 임시변수로 담아 둘 때에는 String으로 담아둔다 String cnt_ = request.getParameter("cnt"); int cnt = 100; //기본값 if(cnt_ != null && !cnt_.equals("")) //cnt가 null이 아니거나 "" 일 경우 cnt = Integer.parseInt(cnt_); //사용자로 전달 받은 수 만큼 반복 해 준다. for(int i=0; i<cnt; i++) { out.println((i+1)+":안녕 servlet<br />"); } }처음에는 요청이 없기 떄문에 기본값 100번이 반복이 된다.

근데 입력값을 이용자가 주소창에 입력하는 일은 거의 없기 때문에 INDEX.XML 파일을 활용해 보도록 하자
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> //인코딩 설정 <title>Insert title here</title> </head> <body> 환영합니다. <br> <a hfre="">인사하기</a> <!-- 여기를 누르면 100번 반복 --> <a hfre="hi?cnt=3">인사하기</a> <!-- 카운트를 입력해줌 여기를 클릭하면 3번반복 --> </body> </html>
각각 버튼을 누르면

기본값 100번이랑 설정값 3번이 출력 되는 것을 확인 할 수 있다.
'Servlet-JSP' 카테고리의 다른 글
입력할 내용이 많은 경우는 POST 요청 (0) 2022.01.08 사용자 입력을 통한 GET 요청하기 (0) 2022.01.08 한글과 콘텐츠 형식 출력하기 (0) 2022.01.07 Annotation을 이용한 URL 매핑하기 (0) 2022.01.07 Eclipse로 Servlet 서버 만들기 (0) 2022.01.07