[jsp&sevlet] 동적 웹 프로젝트 생성 방법(JSP, servlet) 및 URL 매핑
이클립스에서 동적 웹 프로젝트 생성
서버 설정
- runtime – 톰켓 서버 8.5
옵션
web.xml 배치 서술자(Deployment Descriptor) 생성 체크
- web.xml은 프로젝트의 환경설정 파일
기본 동작
서버 스크립트 언어 생성
동적 웹 프로젝트는 클라이언트의 요청을 서버단에서 처리하기 위해 url 요청과 서버 스크립트 파일을 연결해준다.
톰캣에서는 서버 스크립트로 Servlet과 JSP를 주로 사용한다.
sevlet 생성하기
이클립스에서 servlet을 생성하면 src의 java 폴더 내에 생성되며 .java 형식을 가지고 있다.
클래스 내에는 HttpServletRequest와 HttpServletResponse가 인자로 있으며 각각 요청과 응답을 제어한다.
jsp 생성하기
JSP는 HTML파일에 java 코드를 삽입할 수 있는 형식이다.
이클립스에서 생성 시 webcontent. webapp 내 위치한다.
상단 부분은 페이지 지시어라 부르며, 웹 컨테이너에게 컴파일에 대한 지시 명세서 역할을 한다.
// 페이지 지시어
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
hello world
</body>
</html>
JSP는 웹 컨테이너 내에서 servlet 파일로 컴파일된다. 그 이후에는 servlet과 동일하게 클래스 파일로 컴파일되어서 클라이언트의 요청에 매핑된다.
프로젝트 실행하기
- run ctrl f11로 프로젝트 실행 => 서버 선택
- 프로젝트를 서버와 동기화하면 JSP파일은 추가하거나 삭제할 때 바로 반영이 되는데, servlet은 서버를 재시작해야 반영되는 것 같다.. 톰 캣 버전마다 좀 다르다던데, 이 부분은 잘 모르겠다.
- 실행 브라우저는 메뉴 탭의 window에서 변경가능하다. 이클립스 자체 브라우저도 있지만 거의 사용하지 않는다.
- 난 웹 컨테이너가 컴파일링 하는 파일의 경로를 톰켓 설치 폴더에 \work\Catalina\localhost\Test1\org\apache\jsp
URL 매핑
servlet, jsp 파일로 접근하기 위한 URl 설정 방법에 대해 알아보자.
참고로 매핑을 하고나면 서버에 설정을 동기화해줘야 한다.
Servlet의 url 매핑
서블릿 파일의 url 매핑은 두 가지 방법으로 가능하다.
1. 어노테이션(annotation)
서블릿 파일의 클래스 상단에 위치해있다. 아래 url을 설정하면
"프로토콜/호스트/포트//프로젝트명/매핑한url" 형식으로 접근가능하다.
예를 들어 아래 어노테이션은 로컬호스트 포트8090에서 열 시
다음 같이 접근한다.
http://localhost:8090/Test3/NewServlet
- Test3는 프로젝트명
- /NewServlet이 url 매핑 부분
package pack1;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// url 매핑
@WebServlet("/NewServlet")
public class NewServlet extends HttpServlet {
}
2. web.xml
프로젝트의 web.xml 파일에서 url을 설정해주는 방식이다.
이 방식은 어노테이션에 비해 덜 간단하지만, 파일 하나에서 모든 서블릿 파일의 url을 관리해줄 수 있다는 측면에서 대규모 프로젝트의 관리에 유용하다. 어노테이션 방식과 중복으로 url 설정이 가능하다.
web.wml 파일을 열고 탭에서 source를 선택해서 raw 형식으로 보거나 design 탭을 선택해서 보기 좋게 바꿀 수 있다.
그리고 아래처럼 작성한다.
<!-- // 매핑할 서블릿 파일을 정의함 -->
<servlet>
<!-- // xml 파일 상에서 서블릿을 구분하기 위한 이름이다. 아무거나 설정해도 괜찮다. -->
<servlet-name>foo</servlet-name>
<!-- // 서블릿 파일의 위치를 명시한다. 루트는 프로젝트 내에서 java 디렉토리 -->
<servlet-class>pack1.NewServlet</servlet-class>
</servlet>
<!-- // 서블릿파일의 url을 매핑해준다. -->
<servlet-mapping>
<!-- // 서블릿 파일의 이름을 적는다.서블릿파일 이름은 서로 일치해야 한다. -->
<servlet-name>foo</servlet-name>
<!-- // 매핑할 url이다. 앞에 슬래시(/) 붙이는 거 주의 -->
<url-pattern>/bye</url-pattern>
</servlet-mapping>
JSP의 url 매핑
기본 url
- 도메인/프로젝트명/webapp 내 jsp파일명.jsp
- 예시 | http://localhost:8090/Test3/NewFile.jsp
- 만약 폴더 내에 jsp 파일이 있다면, "도메인/프로젝트명/webapp 내 폴더명/jsp파일명.jsp "
web.xml에서의 매핑
- JSP는 어노테이션 방식이 안되므로 web.xml로만 url 매핑이 가능하다.
- 이때 주의할 점은 서블릿 파일은 자바 파일이므로 패키지 접근 방식인 마침표(.)로 접근하지만, JSP는 외부 파일이므로 일반 폴더의 접근 방식인 슬래시(/)를 사용해야 한다.
- 서블릿은 경로를 적을 때 <servlet-class> 태그를 사용했지만 jsp는 <jsp-file> 태그를 사용한다. 그리고 서블릿은 확장자명을 적지 않았지만, jsp는 확장자를 명시해야 한다.
아래 JSP는 로컬호스트8090 포트에서 다음같이 접근한다.
http://localhost:8090/Test3/hello
<servlet>
<servlet-name>bar</servlet-name>
<jsp-file>/NewFile.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>bar</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
프로젝트 URL 변경하기
기본적으로 jsp,servlet 파일에 접근하려면 중간에 프로젝트명을 url로 사용한다. 그렇지만 이를 바꿀 수 있다.
콘솔 - 서버 콘솔을 더블 클릭한 후 module 탭에 들어간다. 여기서 web module의 path를 변경해주면 된다.
그리고 서버의 server.xml의 Context 태그에서 path를 동일하게 변경해주면 된다. 마지막으로 서버를 재시작해주면 된다.
(원래는 한 쪽을 변경하면 다른 한쪽에도 반영되는 것 같은데, 안되는 이유를 모르겠다.)
참고