Dynamic Web Project 생성한다.
Spring Suite 실행 후 File(단축키 : Shift + Alt + N) - Dynamic Web Project
Servers 탭에서 마우스 오른쪽 버튼 클릭 -> Open을 하면 아래와 같은 창이 나온다.
bio.http.port가 포트이고 8080이 기본 포트번호이다.
WEB-INF폴더의 하위에 web.xml을 생성한다.
단축키 : ctrl + N을 누르면 XML폴더 밑에 있다.
아래와 같은 기본 내용을 작성한다.
사용자가 <url-pattern>에 정해져있는 url을 입력하면 서블릿은 <servlet - mapping>과 <servlet> 사이에서 <servlet-name>이 동일한 지점으로 간다.
그리고 해당 <servlet-name>아래의 <servlet-class>에 있는 위치의 클래스를 실행한다.
서블릿 클래스를 작성하는 방법은 2가지가 있다.
doGet, doPost메소드가 잘 실행되는지 확인하기 위하여 print문을 추가한다.
console창에 doGetFirstTest가 실행되는 것을 볼 수 있다.
doGet은 form에서 method에 get방식으로 호출했을때 실행된다.
하지만 아무것도 하지 않았을때 기본적으로 doGet메소드가 실행되기도 한다.
그렇기 때문에 html 문서를 만들지 않고 실행했을때도 doGet메소드가 실행된 것이다
그렇다면 doPost방식은 어떻게 실행시킬까?
doPost메소드를 실행시키기 전에 분석부터 해 보자
doGet메소드는 기본적으로 실행되기도 하지만 <form>태그의 method="get"으로 데이터를 전송했을때 실행된다고 했다.
즉, <form>의 method속성값에 따라 서블릿 클래스에서 doGet메소드를 실행시킬지, doPost메소드를 실행시킬지가 결정되는 것이다.
doPost메소드를 실행시키려면 <form>의 method속성에 post라는 값을 넣어줘야 한다.
따라서 html문서를 하나 생성한다.
WebContent - New(단축키 : ctrl + N) - HTML파일 생성
그리고 아래와 같은 예시 <form>을 작성한다.
<form>의 action속성은 값을 전송할 서블릿 클래스의 <url-pattern>명이다.
이메일과 이름을 입력하고 submit버튼을 누르면
FirstTest에 매치되는 서블릿 클래스에 값을 post방식으로 전송한다.
testPost.html을 실행한다.
아래와 같은 입력창이 나온다.
submit type은 form에 있는 데이터를 전송하기 위한 버튼이다. 클릭 시 form에 있는 정보가 전송된다.
빈칸을 채우고 submit버튼을 누른다.
doPost메소드에 있는 내용이 그대로 출력되었다.
doPost메소드가 실행되었음을 알 수 있다.
doPost가 실행된 상태의 브라우저 화면은 아래와 같다.
그런데 현재 URL주소인 http://localhost:8080/TestProject/FirstTest을 그대로 다시 입력하면 아래와 같은 화면이 나온다.
분명히 URL 주소는 일치하는데 왜 다른 페이지를 출력하는 것일까?
그 답은 전송 방식의 차이에 있다.
위에도 설명했다시피 doPost메소드를 실행시키려면 <form>에서 post로 전송하는 과정이 필요하다.
그러면 form의 action속성에 있는 FirstTest와 일치하는 url pattern을 찾아 servlet-name과 매핑시켜서 FirstTest.java 서블릿을 실행시키는 것이다.
하지만 URL창에다가 바로 http://localhost:8080/TestProject/FirstTest 을 입력하면 어떻게 될까?
<form>을 거치지 않기 때문에 post가 실행이 되지 않고 기본값인 get으로 넘어오게 된다.
따라서 동일한 주소를 입력해도 doGet메소드에 있는 내용이 실행되는 것이다.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hostname은 자신의 컴퓨터가 서버인 경우에 localhost로 대체 가능하다.
하지만 아래와 같이 한글은 인코딩이 제대로 되지 않음을 확인할 수 있다.
찾아본 바로는 HTML의 기본 인코딩은 ISO-8859-1이다.
따라서 한글 인코딩을 지원하기 위한 UTF-8로 인코딩을 해준다.
UTF-8은 모든 문자를 지원한다. 하지만 3바이트를 차지한다. (한글은 2바이트이므로 1바이트가 낭비된다)
이제 실행해도 한글이 잘 나온다.
웹 프로토콜 동작 원리 (0) | 2015.12.06 |
---|---|
URL 구조 분석 (0) | 2015.12.06 |
[리팩토링] 레거시 코드 리팩토링 예제 (1) | 2015.12.01 |
[TDD] TDD로 SoundEX개발하기 첫번째 (0) | 2015.12.01 |
BBD란 무엇인가 (0) | 2015.12.01 |
댓글 영역