SOCO
get요청(쿼리스트링, 사용자 입력을 통한 get요청) 본문
지난 포스팅 => 출력방법 : 서블릿이라는 플랫폼 api를 이용해서 사용자에게 어떻게 출력할 것인가
-------------
이번 시간 내용 => 입력방법(get 요청)
사용자가 어떤 값을 입력하는 것을 어떻게 처리할 것인가
사용자의 입력 -> 나에게 요청할 때 입력이 이루어짐
입력과 요청은 맞닿아있다!
그럼 사용자가 요청을 원할 때 전달하는 값을 어떻게 받을 것인가
사용자의 요청은 get요청이 기본적임
---------------
기본적으로 웹이라고 하는 것은
브라우저를 사용하는 클라이언트가 뭔가를 요청하고
서버가 그에 대한 응답을 하게 됨
----------------
1. 쿼리스트링
클라이언트가 요청하는 것은 기본적으로 문서임
문서를 요청할 때 추가적인 인자를 전달할 수 있음.
키 값에 해당되는 값을 전달할 수 있음. 이것을 쿼리 스트링이라고 함
예를 들어, hello를 100번 반복하는 문서가 있는데, 3번만 반복해달라는 요청을 할 수 있는 것임http://localhost:8080/hello?cnt=3 라고 요청을 할 수 있음 (쿼리스트링 : ?cnt=3)
이렇게 추가적인 인자를 전달하면 서버쪽에서는 단순하게 일괄적인 정적인 문서를 돌려주는 것이 아니라
추가적인 옵션을 읽어서 추가적인 옵션에 맞는 문서를 만들어줘야함
http://localhost:8080/hello : 추가적인 옵션이 없으니, 100번 그대로 실행 (기본값)
http://localhost:8080/hello?cnt=3 : 추가적인 옵션에 따라 3번만 실행
------------------
/hello?cnt=3 이것 전체도 요청임
?cnt=3 이 부분은 쿼리스트링임
예상 가능한 요청 방식
/hello?cnt=3 => "3" => 사용자 입력대로 실행
/hello?cnt= => "" ->Integer.parseInt 불가능 => 기본값대로 실행
/hello? => null ->Integer.parseInt 불가능 => 기본값대로 실행
/hello => null ->Integer.parseInt 불가능 => 기본값대로 실행
@WebServlet("/hello")
public class Nana extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request : 입력도구, response : 출력도구
response.setCharacterEncoding("UTF-8"); //인코딩 방식 지정 (문제2 이유1 해결)
response.setContentType("text/html; charset=UTF-8"); //문제1,문제2 이유2 해결
PrintWriter out = response.getWriter();
String cnt_ = request.getParameter("cnt");
int cnt = 100; //기본값
if(cnt_!=null && !cnt_.equals("")) //문자열은 equals사용(자바의 정석)
cnt = Integer.parseInt(cnt_);
for(int i=0; i<cnt ; i++)
out.println((i+1)+ ": 안녕 Servlet!<br />") ;
}
}
2. 사용자 입력을 통한 get 요청
반복횟수를 사용자로부터 입력 받으려면 입력폼(form태그)을 준비해야한다. => html 파일 만들어야함(webapp 폴더에)
//html
<body>
<div>
<form action="hello"> //서블릿 매핑주소
<div>
<label>"안녕하세요를 몇 번 듣고 싶으세요?" </label>
</div>
<div>
<input type="text" name="cnt"/>
<input type="submit" value="출력" />
</div>
</form>
</div>
</body>
submit 버튼을 누르면
1. 브라우저는 form 태그에 입력된 action명을 보고 url을 작성함
http://localhost:8080/hello
(hello에 매핑된 서블릿에게 요청이 감)
2. input 태그에 사용자가 입력한 값이 있으면 name에 해당되는 key값으로 쿼리스트링을 만듦
왜 방향이 저럴까? 변수에 대입한다는 게 아니니까? 왜 value가 아니라 name일까?
입력된 input이 있으면 그 name값이 cnt키의 값이 됨
?cnt=name
'백 > Servlet,JSP(잠시 pause)' 카테고리의 다른 글
post요청 : 한글 입력 문제 (0) | 2021.07.01 |
---|---|
입력(요청)할 내용이 많은 경우 : post 요청 (0) | 2021.07.01 |
서블릿 출력 형식의 이해 : 문서형태지정&한글출력 (0) | 2021.07.01 |
매핑 (0) | 2021.07.01 |
이클립스 IDE 준비하기 (0) | 2021.07.01 |