sitelink1 http://blog.naver.com/daehyunee/50008407486 
sitelink2 http://www.dlab.kr/tomcat-docs/servletap...Utils.html 
sitelink3  
sitelink4  
sitelink5  
sitelink6  
HttpUtils는 HttpServlet을 사용하는데 있어서 유용한 3가지 메소드를 정의하고 있다.
 
이 메소드들은 각각..
 
    getRequestURL() 
 
    getQueryString()
 
    getPostData()
 
이다. 
 
 
 1. getRequestURL()
 
 
 
  Request된 서버내의 URL을 되돌려준다.
 
  여기서 URL이 뭔지 잠깐 짚고 넘어가도록 하겠다.
 
 
 
  URL("Uniform Resource Locators)은 WWW 상에서..
 
  Object나 Resource의 이름과 주소, 지시어따위를 일관된 방식으로 나타내기 위한 규약이다.
 
 
 
  이것은 원래 URI(Uniform Resource Identifier) 라는 것이 WWW에 특화되어서 나온 것인데..
 
  다음과 같은 형식을 갖추고 있다. 
 
  http://localhost:8080/servlet/URLTestServlet 
 
  위에서 http 는 그 자원에 접근하기 위한 프로토콜을 나타내며..
 
  많이 쓰이는 것은 http, ftp등이 있다. 
 
 
 
  localhost는 인터넷상에서 그 자원을 가지고 있는 서버를 가리키는 것이며..
 
  :8080은 서버에 접근할 때 필요한 포트번호이다. 
 
  /servlet/URLTestServlet은 서버상의 어떠한 부분을 가리키는 것이다.
 
 
 
  URL은 일관된 방식으로 인터넷상에서 자원을 가리킬 수 있다는 장점 때문에..
 
  WWW의 발전과 더불어 아주 널리 쓰이게 되었다.
 
 
 
  getRequestURL() 메소드는 이런 URL을 돌려주는데..
 
  여기 예문에서는 Servlet을 호출했으므로 그 Servlet의 URL을 돌려준다.   
 
 
 
  이 메소드는 인자로 HttpServletRequest 객체를 필요로 하는데..
 
  HttpServletRequest의 getRequestURI() 메소드를 통해서 URI를 얻기 위함이다.
 
 
 
  URI는 앞서 설명한대로 인터넷에서 자원의 위치를 나타내는 방법인데..
 
  위의 예에서는 URI 부분은 다음과 같다.
 
 
 
  /servlet/URLTestServlet
 
  여기에..
 
  "http"는 HttpServletRequest의 getScheme()에서..
 
  "localhost"는 HttpServletRequest의 getServerName()에서..
 
  ":8080"은 HttpServletRequest의 getPort()에서(?) 얻어서..
 
 
 
  이들을 모두 조합하면 위에서 보았던 URL이 만들어진다.
 
 
 
  단, http는 기본포트번호가 80번이고..
 
  https(보안기능이 있는 http, .shtml의 확장자를 가짐)은 443번이기 때문에..
 
  이 경우에는 URL에 포트번호가 포함되지 않는다. 
 
 
 
 
2.  getQueryString()
 
 
 
  이 메소드는 GET으로 http의 메소드로 넘어온 데이터를..
 
  다루기 쉬운 형태로 바꿔주는 메소드이다.
 
  http에서는 데이터들이 서버로 넘어올 때 다음과 같은 형식을 갖는다. 
 
  http://localhost:8080/servlet/ParameterServlet?p1=자바&p2=%C0%DA%B9%D9 
 
  위와 같은 형식은 아마 웹 검색엔진에서 많이 보았으리라 생각되는데..
 
 
 
  앞에서도 잠깐 설명을 했지만 http가 활동하는 인터넷은..
 
  7비트 ASCII에 속하는 일부 문자만 돌아다닐 수 있다.
 
 
 
  그러므로, 8비트를 쓰는 확장문자나 16비트를 쓰는 한글같은 문자는..
 
  특별한 방법으로 나타내어져야만 한다..
 
 
 
  그 특별한 방법이 바로 위에서 p2의 값으로 쓰인 "%C0%DA%B9%D9" 같은 경우이다.
 
  이는 한글로 "자바" 를 뜻하지만..
 
  한글로 그냥 보낸다면 인터넷을 돌아다니다가 1비트씩 잘리 게 된다.
 
 
 
  그런데, 문제는 이런 데이터를 받아서 제대로 쓸 수 없다는 데에 있다.
 
  그래서 제공되는 메소드가 getQueryString() 메소드이다.
 
 
 
  HttpServletRequest 객체의 getQueryString() 메소드를 호출하면..
 
  위 예문의 ? 뒷부분이 넘어온다.
 
 
 
  이를 HttpUtils.getQuestString() 메소드의 인자로 넘겨주면..
 
  java.util.Hashtable 객체로 만들어서 준다.
 
 
 
  Hashtable 객체의 key 값으로 p1, p2가 생기고 이에 대한 값으로 둘다 "자바"가 만들어진다.
 
  다만, 입력되는 값들은 앞서 얘기했듯이..
 
  전부 ISO-8859-1의 인코딩을 가지기 때문에 EUC-KR로 다시 바꿔줘야만 한다.
 
 
 
  여기서 만약 프로그래머가 "자바"라는 한글을 "%C0%DA%B9%D9"로 만들 필요가 있을때이다.
 
  그럴 때는 ava.net.URLEncoder.encode() 라는 메소드를 활용하면 간단하게 만들 수 있다. 
 
 
 
 
3. parsePostData()
 
 
 
  HTTP의 메소드중에는 여러 가지가 있는데..
 
  HTTP/1.0에서 기본적으로 지원되는 것은 GET, HEAD, POST가 있다.
 
 
 
  이중 데이터를 서버로 전송하는데 프로그래 머에 의해 직접 사용되는 것은 GET과 POST인데..
 
  GET은 URL의 뒤에 붙여서 서버로 전송하는 방식이고..
 
  POST는 데이터를 전송하기 위한 연결을 따로 만들어서 전송한다..
 
 
 
  GET은 이제까지 예문으로 제시했던..
 
  "?param1=value1¶m2=value2" 하는 식의 방식이라고 생각하면 되며..
 
  주로 작은 데이터를 전송할 때 사용된다.
 
 
 
  그리고 POST는..
 
  어떤 내용의 그룹이라던가 블록등과 같은 좀 덩치가 큰 내용을 전송할 때 사용된다.
 
 
 
  URL 에 데이터가 담겨가는 GET의 경우 보안에 문제가 있기 때문에..
 
  중요한 데 이터는 POST를 이용해서 보낸다.
 
 
 
  또, GET은 그 길이에 제한을 갖기 때문에 큰 데이터를 취급하는 데에는 적당하지 않다.
 
  물론, POST도 웹서버의 메모리용량에 따른 제한은 있다.
 
  하지만, GET보다는 훨씬 큰 데이터를 다룰 수 있다. 
 
  이렇게 POST는 GET과 차이점이 있는데..
 
  POST로 넘어온 데이터들을 다루기 위해서 getPostData()라는 메소드가 쓰인다.
 
 
 
  이 메소드에 인자로 HttpServletRequest 객체에서 얻어온 ServletInputStream 객체와..
 
  POST 메소드로 넘어오는 데이터의 크기를 넘겨주면 된다.
 
 
 
  그러면 리턴값으로 hava.util.Hashtable 객체가 넘어오는데..
 
  parsePostData() 메소드 내부에서 parseQueryString() 메소드를 호출하기 때문에..
 
 
 
  이후 리턴되는 Hashtable 객체를 사용하는 방법은..
 
  위에 parseQueryString() 메소드를 호출했을때와 같다. 
 
  이처럼, GET 메소드는 getQueryString()으로 데이터를 전송받을 수 있고..
 
  POST 메소드는 getInputStream() 메소드로 얻을 수 있는 ServletInputStream 객체로..
 
  데이터를 전송받는다는 차이점이 있다. 
번호 제목 글쓴이 날짜 조회 수
55 [Gemini] HttpURLConnection 클래스를 이용한 데이터 전송 방식 비교 황제낙엽 2024.03.14 7
54 servlet name 에 camel case 를 사용해서는 안되는 이유 황제낙엽 2023.10.24 2
53 org.apache.commons.fileupload.servlet.ServletFileUpload 이용 예시 황제낙엽 2023.08.25 2
52 ServletFileUpload.parseRequest() 실행 결과 리스트가 비어있는 오류 황제낙엽 2023.08.25 18
51 어떤 multi-part 설정도 제공되지 않았기 때문에, part들을 처리할 수 없습니다. file 황제낙엽 2023.08.23 99
50 (Bard) the request was rejected because no multipart boundary was found file 황제낙엽 2023.08.23 9
49 (Bard) multipart/form-data 요청 처리를 위한 MultipartHttpServletRequest file 황제낙엽 2023.08.21 4
48 ajax 로 post 데이터를 servlet 으로 전달 받기 (with nexacro) [1] secret 황제낙엽 2023.02.26 0
47 HttpServletRequest, HttpServletResponse, JSONObject, POST 황제낙엽 2022.01.12 31
46 [JSP] 파일 다운로드 테스트 file 황제낙엽 2021.04.12 123
45 [HttpURLConnection] Authorization 헤더를 넣어 GET Request 황제낙엽 2020.08.12 376
44 [AWS, 웹 프로젝트] AWS+MySQL+SpringFrameWork5+JAVA8+ React+Gradle+Webpack+GIT+Jenkins file 황제낙엽 2020.04.08 48
43 세션의 timeout 설정 >> HttpSession.setMaxInactiveInterval() 황제낙엽 2019.07.03 8311
42 jQuery JSON 데이터 통신의 특성 (HttpServletRequest) 황제낙엽 2019.06.23 103
41 [HttpURLConnection] 서버와의 통신 시도 시점 관련 황제낙엽 2019.06.23 116
40 응답 헤더의 Content-disposition 속성 황제낙엽 2019.04.16 534
39 Java에서 User-Agent 파써 사용하기 황제낙엽 2017.11.20 418
38 서버구동시 주기적으로 동작을 수행하는 스레드를 함께 실행하는 서블릿 황제낙엽 2017.08.02 131
37 JSP 파일에서 getOutputStream() has already been called for this response 에러 황제낙엽 2013.04.24 11479
» [The type HttpUtils is deprecated] javax.servlet.http.HttpUtils 황제낙엽 2013.03.20 276