728x90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package sec01.ex01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FirstServlet extends HttpServlet{
@Override
public void init() throws ServletException {
System.out.println("init 메소드 호출");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메소드 호출");
}
@Override
public void destroy() {
System.out.println("destroy 메소드 호출");
}
}
|
cs |
- FirstServelt.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<servlet> <!-- 브라우저에서 요청하는 매핑 이름에 대해 실제로 실행하는 서블릿 클래스를 설정 -->
<servlet-name>aaa</servlet-name>
<!-- <servlet-mapping>태그의 <servlet-name> 태그와 값이 동일 -->
<servlet-class>sec01.ex01.FirstServlet</servlet-class>
<!-- 브라우저에서 요청하는 매핑 이름에 대해 실제로 기능을 수행하는 서블릿 클래스 설정-->
</servlet>
<servlet-mapping> <!-- 브라우저에서 요청하는 논리적인 서블릿 설정-->
<servlet-name>aaa</servlet-name>
<!-- 매핑 이름으로 요청 시 값이 같은 <servlet>태그 안의 <servlet-name>과 연결 -->
<url-pattern>/first</url-pattern>
<!-- 브라우저에서 sec01.ex01.FirstServlet을 요청하는 논리적인 서블릿 이름 --> </servlet-mapping>
</web-app>
|
cs |
- web.xml
http://ip주소:포트번호/프로젝트이름/서브릿매핑 이름
(http://localhost:8090/pro05_1/first) - 로컬 pc에 설치된 경우 포트 번호만 입력해도 상관 없음
실행하면 콘솔창에 위와 같이 출력됨
다수의 서블릿 매핑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package sec01.ex01;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SecondServlet extends HttpServlet{
@Override
public void init() throws ServletException {
System.out.println("init 메소드 호출>>");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메소드 호출>>");
}
@Override
public void destroy() {
System.out.println("destroy 메소드 호출>>");
}
}
|
cs |
- SecondServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>sec01.ex01.FirstServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>bbb</servlet-name>
<servlet-class>sec01.ex01.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>bbb</servlet-name>
<url-pattern>/second</url-pattern>
</servlet-mapping>
</web-app>
|
cs |
- web.xml 수정
위의 예제처럼 다수의 서블릿을 web.xml에 매핑하기 위해서는 <servlet>태그와 <servlet-mapping>를 분리한 뒤 <servlet-name>태그의 값을 다른 값으로 설정해야 함
출력 결과를 보면 최초 요청에만 init메소드가 실행되었고, 이후부터는 doGet메소드만 실행됨
애너테이션을 이용한 서블릿 매핑
web.xml에 여러 서블릿을 설정할 경우 복잡해진다는 단점이 있다. 따라서 각 서블릿 클래스에 @를 사용해서 서블릿 표시를 해주면 가독성이 훨씬 좋아진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package sec01.ex01;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Third")
public class ThirdServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
System.out.println("ThirdServlet init 메소드 호출");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ThirdServlet doGet 메소드 호출");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ThirdServlet doPost 메소드 호출");
}
public void destroy() {
System.out.println("ThirdServlet destroy 메소드 호출");
}
}
|
cs |
728x90
'자바 웹 > 서블릿' 카테고리의 다른 글
쿠키와 세션 (0) | 2022.05.08 |
---|---|
load-on-startup 기능 (0) | 2022.05.08 |
바인딩 (0) | 2022.04.11 |
서블릿 비즈니스 로직 처리 (0) | 2022.03.27 |
서블릿 기초 (0) | 2022.03.22 |