서블릿 속성(attribute)
ServletContext, HttpSession, HttpServletRequest 객체에 바인딩되어 저장된 객체(정보)
-각 서블릿 API의 setAttribute(String name, Object Value)로 바인딩함.
-각 서블릿 API의 getAttribute(String name)으로 접근함.
-각 서블릿 API의 removeAttribute(String name)으로 속성을 제거함.
서블릿 스코프(scope)
1)서블릿 API에 바인딩된 속성에 대한 접근 범위
2)ServletContext 속성은 애플리케이션 전체에서 접근 가능
3)HttpSession 속성은 사용자만 접근 가능
4)HttpServletRequest 속성은 해당 요청/응답에 대해서만 접근 가능
5)각 스코프를 이용해서 로그인 상태 유지, 장바구니, MVC의 Model과 View의 데이터 전달 기능 구현
스코프 종류 | 해당 서블릿 API | 속성의 스코프 |
애플리케이션 스코프 | ServletContext | 애플리케이션 전체에 대해 접근할 수 있음. |
세션 스코프 | HttpSession | 브라우저에서만 접근할 수 있음. |
리퀘스트 스코프 | HttpServletRequest | 해당 요청/응답 사이클에서만 접근할 수 있음. |
스코프(scope) 예제
getAttribute.java
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
31
32
|
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/get")
public class GetAttribute extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext ctx = getServletContext();
HttpSession session = request.getSession();
String ctxMesg = (String)ctx.getAttribute("context");
String sesMesg = (String)session.getAttribute("session");
String reqMesg = (String)request.getAttribute("request");
out.print("context 값 :" +ctxMesg +"<br>");
out.print("session 값 :"+sesMesg +"<br>");
out.print("request 값 :"+reqMesg+"<br>");
}
}
|
cs |
setAttribute.java
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
31
32
33
34
35
36
|
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/set")
public class SetAttribute extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String ctxMesg = "context에 바인딩합니다.";
String sesMesg = "session에 바인딩합니다.";
String reqMesg = "request에 바인딩합니다.";
//HttpSessionContext 객체, HttpSession 객체, HttpServletRequest 객체를 얻은 후 속성을 바인딩함.
ServletContext ctx = getServletContext();
HttpSession session = request.getSession();
ctx.setAttribute("context", ctxMesg);
session.setAttribute("session", sesMesg);
request.setAttribute("request", reqMesg);
out.print("바인딩을 수행합니다.");
}
}
|
cs |
<크롬에서 실행했을 때>
<다른 브라우저에서 실행했을 때>
URL-pattern (디렉토리 패턴, 확장자 패턴)
0)서블릿 매핑 시 사용되는 가상의 이름
-클라이언트가 브라우저에서 요청할 때 사용됨, 반드시 /(슬래시)로 시작해야함.
1)디렉토리 패턴
-디렉토리 형태로 서버의 해당 컴포넌트(서블릿, JSP)를 찾아서 실행하는 구조를 말함.
-http://localhost:8080/chap07_Servlet/get
==> /get으로 매핑된 Servlet을 찾아가서 실행됨.
2)확장자 패턴
-확장자 형태로 서버의 해당 컴포넌트(서블릿, JSP)를 찾아서 실행하는 구조를 말함.
-http://www.weather.go.kr/프로젝트명/*.do
==> .do로 끝나는 요청을 동일한 do 서블릿으로 찾아가게 매핑함.
종류 | URL Pattern | 매칭 URL 예 |
exact mapping | /login/hello.do | http://localhost:8080/chap07_Servlet/login/hello.do |
path mapping | /login/* (login/ 뒤에 아무거나 가능) |
http://localhost:8080/chap07_Servlet/login/ http://localhost:8080/chap07_Servlet/login/hello http://localhost:8080/chap07_Servlet/login/hello.do http://localhost:8080/chap07_Servlet/login/test |
extension mapping | *.do (아무거나 뒤에 .do 가능) |
http://localhost:8080/chap07_Servlet/hi.do http://localhost:8080/chap07_Servlet/login/hello.do |
default mapping | / | http://localhost:8080/chap07_Servlet/ http://localhost:8080/chap07_Servlet/hello.do http://localhost:8080/chap07_Servlet/login http://localhost:8080/chap07_Servlet/login/hello http://localhost:8080/chap07_Servlet/login/hello |
URL-pattern 예제
UrlTestServlet01.java
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
|
import java.io.IOException;
import java.io.PrintWriter;
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("first/test") */ //정확히 이름까지 알려주는 URL 패턴
public class UrlTestServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String context = request.getContextPath(); //컨텍스트 이름만 가져옴
String url = request.getRequestURL().toString(); //전체 URL을 가져옴
String mapping = request.getServletPath(); //서블릿 매핑 이름만 가져옴
String uri = request.getRequestURI(); //URI를 가져옴.
out.print("<html><body bgcolor ='yello'>");
out.print("<b>UrlTestServlet01입니다.</b><br>");
out.print("</body></html>");
}
}
|
cs |
UrlTestServlet02.java
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
31
32
33
34
|
import java.io.IOException;
import java.io.PrintWriter;
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("/first/*") //디렉토리 이름만 일치하는 URL 패턴
public class UrlTestServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String context = request.getContextPath(); //컨텍스트 이름만 가져옴
String url = request.getRequestURL().toString(); //전체 URL을 가져옴
String mapping = request.getServletPath(); //서블릿 매핑 이름만 가져옴
String uri = request.getRequestURI(); //URI를 가져옴.
out.print("<html><body bgcolor ='blue'>");
out.print("<b>UrlTestServlet01입니다.</b><br>");
out.print("<b>컨텍스트 이름 : "+context+"</b><br>");
out.print("<b>전체 경로 : "+url+"</b></br>");
out.print("<b>매핑 이름 : "+mapping + "</b></br>");
out.print("<b>uri : "+uri+"</b></br>");
out.print("</body></html>");
}
}
|
cs |
UrlTestServlet03.java
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
31
32
33
34
|
import java.io.IOException;
import java.io.PrintWriter;
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("*.do") */ //확장자만 일치하는 URL 패턴
/*@WebServlet("/*") */ //모든 요청 URL 패턴 -- 확장명은 지정하지 않을 수도 있고, do대신 자신이 원하는 이름으로 지정도 가능함.
public class UrlTestServlet03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String context = request.getContextPath(); //컨텍스트 이름만 가져옴
String url = request.getRequestURL().toString(); //전체 URL을 가져옴
String mapping = request.getServletPath(); //서블릿 매핑 이름만 가져옴
String uri = request.getRequestURI(); //URI를 가져옴.
out.print("<html><body bgcolor ='red'>");
out.print("<b>UrlTestServlet01입니다.</b><br>");
out.print("<b>컨텍스트 이름 : "+context+"</b><br>");
out.print("<b>전체 경로 : "+url+"</b></br>");
out.print("<b>매핑 이름 : "+mapping + "</b></br>");
out.print("<b>uri : "+uri+"</b></br>");
out.print("</body></html>");
}
}
|
cs |
.do 로 끝나면 아무거나 올 수 있다.
'📒 education archive > 📍Servlet, JSP' 카테고리의 다른 글
[국비학원 기록/Servlet] 서블릿 리스너(Listener), 로그인 접속자 수 카운트 (0) | 2021.12.07 |
---|---|
[국비학원 기록/Servlet] 서블릿 필터(Filter), 필터 한글(utf-8) 인코딩 (0) | 2021.12.06 |
[국비학원 기록/Servlet] 쿠키, 세션, HttpSession (0) | 2021.12.03 |
[국비학원 기록/Servlet] 서블릿 포워드, Redirect(리다이렉트), refresh, location (0) | 2021.12.02 |
[국비학원 기록/Servlet] 데이터베이스 연동 2, JNDI, 회원 정보 등록, 삭제하기 (0) | 2021.11.27 |