티스토리 뷰

Servlet JSP

Get요청, 쿼리스트링 QueryString

Programmers 2021. 4. 22. 09:28
반응형

Get요청, 쿼리 스트링(QueryString)의 개념
http://localhost/hello
-> 서버에 어떠하 문서를 요청하는 것 : Get 요청
http://localhost/hello? cnt=3
-> Get요청을 하면서 추가적인 요청을 할 경우

자, 이제 어떻게 하면 이 Get요청과 QueryString을 서버에서 처리할 수 있을까?
코드를 보면서 알아보자.

package com.newlecture.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		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++)
		{
			out.println((i+1)+": 안녕 Servlet!!<br>");
		}
		
	
	}
	
}

 

int cnt = Integer.parseInt(request.getParameter("cnt")); 코드를 분석해보자
먼저 request.getParameter는 QueryString을 받아오는 코드
Integet.parseInt는 받아온 문자열을 Int형식으로 변환
int cnt는 cnt에 값을 저장

그리고 아래에 있는 for문에 cnt를 대입! 하면 한번 실행해보자!

QueryString 값이 없을 경우 출력 화면

코드 내에서는 무조건 QueryString값을 받아오게 되어있다. 그래서 localhost:8080/hello에서는 QueryString값이 없어서 이러한 오류가 발생한다.

QueryString값 입력 화면 출력

QueryString값을 localhost:8080/hello? cnt=2를 입력할 경우 정상적인 화면이 출력되는 것을 확인할 수 있다.
그러면 이 문제를 해결하려면 어떻게 해야 할까??????

기본 값을 설정해서 해결해야 한다.
먼저 오류에 대해서 다시 분석하고 넘어가자!

localhost:/8080/hello? cnt=2 -> 문자열: 2
localhost:/8080/hello? cnt=   -> 문자열:        빈 문자열, null도 아니고 값도 아니다.
localhost:/8080/hello?         -> 문자열: null
localhost:/8080/hello?         -> 문자열: null

자 그럼 코드로 만들어보자!

package com.newlecture.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class Nana extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		
		String cnt_ = request.getParameter("cnt"); //cnt를 받아와서 String 값으로 cnt_에 저장.
		
		int cnt = 10; //기본값
		if(cnt_ != null && cnt_.equals("")) //입력받은 cnt_ 값이 null이거나 ""빈문자열이 아닐 경우 cnt값을 받아온다.
			cnt = Integer.parseInt(cnt_);
			
		for(int i=0; i<cnt; i++)
		{
			out.println((i+1)+": 안녕 Servlet!!<br>");
		}
		}
	
	}
	

 주석으로 설명 해 놓은 부분들을 읽어보면 쉽게 이해가 가능하다.
일단 cnt_ 는 임시로 저장해둔 값이다. 그리고 request.getParameter("cnt");로 받아온 값이 null이거나 빈 문자열이 아니면 cnt값에 대입해 출력한다.

기본값 설정 후 실행 화면
cnt=5 설정 후 실행 화면

정상적으로 잘 작동됨을 확인할 수 있다.

추가적으로 사용자가 주소창에 값을 입력할 경우는 없을 것이다.
index. html파일을 수정해서 출력할수있는 코드를 만들어보자.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	안녕하세요.<br>
	<a href="/hello">인사하기 기본</a><br>
	<a href="/hello?cnt=4">인사하기 4번</a><br>
</body>
</html>

<a>태그를 이용해서 두개의 링크를 연결한다.
자, 출력해보자!

index.html로 사용자 화면 출력

됐다. 완벽! 이로써 get요청과 querystring에 대해서 알아보았다.

반응형
댓글
공지사항