다이나믹 웹 프로젝트가 생성되면
server.xml파일에
contextPath가 자동으로 클래스이름으로 입력되고
프로젝트의 web.xml파일에
프로젝트 구동 시 메인 페이지가 위와 같이 기본으로 설정되어있다.
프로젝트를 만들때 자동으로 Context Root가 프로젝트 이름으로 기본 설정이 되고 아래의 체크박스에 체크해야 web.xml이 만들어진다.
web.xml 파일의 <welcome-file-list> 태그를 통해 첫 페이지가 기본으로 설정 되어있어 프로젝트를 통해 서버를 실행하면 무조건 index.jsp 혹은 default.jsp파일을 실행시켜준다.
(이때, index , default 두 파일중 해당되는 이름의 하나의 파일만 존재한다면 해당 파일을 실행시키지만 두 파일명이 모두 존재하지 않는다면 404Error페이지를 출력한다. 또한 만약 index , default 두 파일이 모두 존재할경우 index.jsp파일에 실행 우선순위가 부여된다.)
Servlet 3.0 버전의 @WebServlet 어노테이션을 사용하기위해 web.xml 파일을 만들지 않는다고 하더라도 프로젝트를 통해 서버를 실행하면 무조건 index.jsp 혹은 default.jsp파일을 실행시켜준다.
다만 index.jsp파일은 webContent라는 폴더의 하위에 있어야하며 그 하위폴더인 WEB-INF 폴더의 하위에 생성되어 관리된다면 서버를 통해 프로젝트 구동시 404error 페이지를 출력한다.
왜냐하면 webcontent가 실제 애플리케이션의 루트 디렉터리 이기 때문이다.
애플리케이션의 루트 디렉터리는 url에서 / 라는 기호로 접근하게된다.
프로젝트를 통해 서버를 구동하면
주소창은 http://localhost/ContextPath/ 로 실행이 되고
RootDirectory인 WebContent 폴더 하위의 JSP파일에서 직접 구동하게된다면
주소창은 http://localhost/ContextPath/index.jsp 로 실행이 된다.
contextPath 경로에 의해 루트 디렉터리의 파일명 /index.jsp 가 주소표시줄에서 감춰지는것이고
루트 디렉터리인 webContent 폴더에 있는 모든 jsp 애플리케이션들은 바로실행이 가능하다는것
이 둘의 차이점은 리소스 경로를 보여주느냐 보여주지 않느냐 인데, 학원 수업때는 리소스경로를 보여주기 위해 index.jsp로 계속 실행했었다.
하지만 프로젝트를 통해 실행하여야 한다.
리소스 경로가 노출된다면, 해커가 서버 컴퓨터의 로컬에 접근하여 메인페이지에 악성코드를 심어놓는다면
페이지에 접속하는 모든 클라이언트의 정보를 훔쳐갈 수 있다. (해당 정보로 해킹 뿐만아니라 클라이언트의 로컬 pc에도 접근할수도 있겠지..)
또 한가지 예외가 있는데 만약 WebContent 폴더의 하위폴더인 WEB-INF폴더에서 jsp파일을 직접 실행한다면 어떻게 될까?
페이지를 찾을 수 없다는 메시지와 함께 Error404 페이지를 출력한다.
이 경우는 IoC라는 개념이 따라온다.
IoC란 Inversion of Control이라 하여 '제어의 역전' 이라는 뜻으로써, 개발자가 아닌 제 3자가 프로그램의 실행 흐름을 제어하는 것으로 서블릿 컨테이너가 제어하게 되는것
한마디로 서블릿의 매핑주소와 web.xml 매핑설정을 통해 서블릿 객체가 생성이 된 후 객체에서 파일을 불러와 실행이 되어야한다.
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher(WEB-INF/index.jsp).forward(request, response);
}
서블릿의 service() 메서드를 통해 WEB-INF 폴더의 index.jsp 파일을 서블릿 컨테이너로 불러와 실행하는 코드
'JSP&Servlet > BASIC' 카테고리의 다른 글
input태그 Type속성 [hidden] (0) | 2020.09.05 |
---|---|
JSP 날짜 포맷팅 [ fmt:formating ]태그 라이브러리 (0) | 2020.09.05 |
html,css,img,js,scss 등 resource 동적자원 절대경로, 상대경로 매핑 지정하기 (0) | 2020.09.04 |
[커넥션풀] ConnectionPool이란? / 커네션풀 적용및 JdbcTemplate 에서의 활용 (0) | 2020.09.02 |
페이지출력, 페이지전환 및 특정 url로 재 요청 을 해주는 RequestDispatcher 의 request.getRequestDispatcher()/forward() / HttpServletResponse의 response.sendRedirect() (1) | 2020.08.30 |