자바 웹 어플리케이션(Java Web Application)
- WAS에 설치되어 동작하는 어플리케이션
- 자바 웹 어플리케이션에는 HTML, CSS, 이미지, 자바로 작성된 클래스(JSP, Servlet도 포함됨, package, 인터페이스 등), 각종 설정 파일 등이 포함된다.
- 예 : 쇼핑몰, 블로그, 카페
자바 웹 어플리케이션의 폴더 구조
- 자바 웹 어플리케이션은 혼자서 동작하는 게 아니라 WAS, 미들웨어 같은 거의 도움을 받는다. 그렇게 때문에 정해진 약속(이런 폴더 구조)을 반드시 지켜야한다.
WEB-INF
폴더 :web.xml
파일 : 배포 기술자(DeploymentDescriptor). 웹 어플리케이션에 대한 정보들을 다 가지고 있는 파일. Servlet 3.0 미만에서는 필수, 3.0 이상에서는 어노테이션을 사용lib
폴더 : library의 약자, 각종 자료 파일들을 넣는 곳classes
폴더 : java 패키지들, 실제 class들이 있는 곳, 내가 작성한 서블릿 파일들
- 내가 원하는 각종 폴더 : 프론트엔드에서 작성했던 파일들, 이미지 등 다양한 리소스 들
- 구조
- 도스 창으로 확인하는 방법
- 나의 workspace위치 >
.metadata
>.plugins
>org.eclipse.wst.server.core
>tmp0
: 톰캣이 설치 되어있는 디렉토리와 유사한 구조, 이클립스가 내부적으로 톰캣을 사용하니깐 비슷하게 만들어 놓고 이 안에서 요소들을 찾아서 사용한다. - 나의 workspace위치 >
.metadata
>.plugins
>org.eclipse.wst.server.core
>tmp0
>wtpwebapps
: 실습하면서 만들었던 웹 어플리케이션이 만들어져있는 것을 볼 수 있음. 이 안으로 들어가면 classes, 패키지명을 볼 수 있다.
Servlet이란?
- 자바 웹 어플리케이션의 구성요소 중 동적인 처리를 하는 프로그램의 역할
- 서블릿을 정의해보면
- 서블릿은 WAS에서 동작하는 Java클래스이다.
- 서블릿은 HttpServlet클래스를 상속받아야 한다.
- 서블릿과 JSP로부터 최상의 결과를 얻으려면, 웹 페이지를 개발할 때 이 두가지(JSP, Servlet)을 조화롭게 사용해야한다.
Servlet 작성 방법
버전확인 및 설정
Servlet 3.0 spec 이상에서 사용하는 방법
- web.xml 파일을 사용하지 않습니다.
- 자바 어노테이션(annotation)을 사용합니다.
- 앞에서 실습했던 first web에서 사용합니다.
Servlet 3.0 spec미만에서 사용하는 방법
- servlet을 등록할 때 web.xml 파일에 등록합니다.
- 버전확인하기
-
3.0이상이면 체크 안해줘도 됨(3.0이상이면 web.xml파일이 필요없음)
- 결과
소스코드(1부터 10까지 출력)
1.
1 |
|
- HttpServletRequest : 브라우저한테 요청
- HttpServletResponse : 브라우저한테 응답
2.
1-10까지 출력이니 응답 객체를 이용해야한다.
1 |
|
- 응답 결과에다가 이런 타입으로 보내줄께요라는 약속을 여기다가 넣어준다.
text/html
: text는 html이다.
3.
보낼 내용을 넣어줄 통로를 얻어야 한다.
response 객체에 getWriter()라고 하는 메서드가 있다.
이 메서드를 수행하면 PrintWriter라는 객체가 return 되는 것을 알 수 있다.
1 |
|
- 변수명은 out인데 아무거나 줘도 상관없다.
4.
1 |
|
- println을 쓸지 print를 쓸지 고민하지 말기
- 둘 다 똑같음 : HTML파일에다가 아무리 Enter을 쳐봐도 줄 안 바뀜 (줄은 반드시 br태그를 써야한다.)
System.out.println();
과out.print();
는 목적지가 다르다.System.out
하면 콘솔을 의미한다.
5.
1 |
|
- println을 써도 줄을 안 바뀌니깐
<br>
태그 사용해주기
6.
out객체를 다 사용했으니 close()해주기
1 |
|
7.
실행하면 Java Resources에 src에 exam이라는 폴더가 만들어짐
전체소스코드
1 |
|
Servlet 생명주기
WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인한다.
if (메모리에 없음) {
- 해당 서블릿 클래스를 메모리에 올림
- init() 메소드를 실행
}
- service()메소드를 실행
- was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행된다.
- was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행된다.
LifecycleServlet을 구현
HttpServlet의 3가지 메소드를 오버라이딩
- init()
- service(request, response)
- destroy()
소스코드
1 |
|
결과
JSP에 대한 힌트
- 서블릿에서 응답결과를 만들어낼 때 out.println에다가 HTML태그들을 막 넣었다.
- 그런 내용들을 다 서블릿에 out.print에다 넣으려면 너무 힘들다.
- 이런 부분을 해결하기 위해 만들어진 것이 JSP이다.