Java web 기본구조
1. Java web 기본구조
- Java Resouces
- src : 개발자가 작성한 Servlet 코드가 저장된다.
- Libraries
- Servlet이나 JSP에서 추가로 사용하는 라이브러리.
- jar로 압축되어 있음
- WebContent
- Deploy할 때 WebContent 디렉터리 전체가 .war로 묶어서 보내진다.
- WEB-INF
- lib: 추가한 모든 라이브러리 또는 드라이버가 이곳에 모두 저장된다.
- classes: 작성한 Java Servlet 파일이 나중에 .class로 이곳에 모두 저장된다.
- web.xml: SUN의 규칙에 맞게 작성해야 하며 모든 WAS에 대한 작성 방법이 동일하다.
- html 파일들 : 관련된 HTML 소스를 저장한다.
WebContent - views Directory - index.html
(1) WEB-INF 란?
- WEB-INF WEB INFormation의 약자로 웹 애플리케이션에서 필요한 설정 파일을 가지고 있다. (class 파일, 라이브러리, 기타 리소스 등)
WEB-INF는 중요한 파일들이 노출되지 않도록 만든 폴더, META-INF는 웹 설정과 관련된 파일을 저장하는 폴더
웹 클라이언트(브라우저)에서 Context Root 하위의 정보에 대해 접근할 수 있지만 WEB-INF에는 접근할 수 없다. 웹 클라이언트(브라우저)에서 URL을 통해 jsp 파일을 직접 요청하는 것을 제한하는 구조로 설계되었기 때문에 jsp 파일은 WEB-INF 폴더에 두게 된다.
반면에, 웹 클라이언트가 참조해는 css, img(이미지파일), js(jQuery 등)은 참조할 수 있도록 Context Root의 바로 하위에 static 폴더를 만들어 관리한다. (src/main/webapp/static/css,ims,js,…)
(2) web.xml 기본 설정
역할 : web application을 Deploy할 때 Servlet의 정보를 설정해준다. 브라우저가 Java Servlet에 접근하기 위해서는 WAS(Tomcat과 같은 WAS)에 필요한 정보를 전달하여 해당하는 Servlet을 호출할 수 있다.
필요한 정보 (1) 배포할 Servlet이 무엇인지
필요한 정보 (2) 해당 Servlet이 어떤 URL에 매핑되는지
① aliases 설정
서블릿 이름을 실제 서블릿 클래스에 연결
<servlet-name>Hello</servlet-name>
servlet-name은 반드시 같아야 한다.(아래 매핑과 동일해야됨.)
<servlet-class>servlets.HelloServlet</servlet-class>
사용자에 의해 작성된 실제 클래스 이름으로 설정해야 한다. (예 : 패키지 이름.서블릿 클래스 이름)
② 매핑
<url-pattern>/Hello</url-pattern>
URL을 서블릿 이름에 연결한다. 클라이언트(browser)의 요청 URL에서 Project 이름 뒤에 오는 부분이다. 슬래시(“/”)로 시작한다.
- (참고) 클라이언트 요청 URL
형식 : 요청 서버의 IP 주소 : Port 번호 / 어플리케이션 이름 / 요청하는 HTML
예시 : localhost:8080/FormHandlingServlet/HelloForm.html
Spring MVC에서의 web.xml 구체적인 설정 내용
DispatcherServlet, ContextLoaderListener, encodingFilter
DispatcherServlet
- Spring Container를 생성한다. (Spring Container: Controller의 lifecycle 관리)
- 클라이언트의 요청을 처음으로 받는 클래스 (Spring에서 제공)
- 클라이언트의 요청을 Handler(Controller)에 보낸다.
- 그 외에 필요한 것 HadlerMapping : 어떤 url을 받을지 결정 ViewResolver : logical view name — prefix, suffix —> pysical view object
특정 요청에 대한 처리를 할 수 있다.
-
생략 가능 -
에 설정한 이름 + -servlet.xml 형식으로 설정 파일 이름을 만들고, web.xml과 같은 위치(/WEB-INF 하위)에 있어야 contextLoader가 해당 파일을 찾아서 읽을 수 있다. - 위와 같이 설정하면 init-param으로 dispatcher xml 파일의 이름 설정하지 않아도 자동으로 로드된다.(예 : eatServlet-servlet.xml)
추가 Maven 웹 프로젝트 구조
workspce/[Project Name]
├ src
│ ├ main
│ │ ├─ java
│ │ ├─ resources
│ │ └─ webapp
│ │ ├── static
│ │ └── WEB-INF
│ └ test
│ ├─ java
│ └─ resources
│
├ target
└ pom.xml
댓글남기기