반응형
- ServletContext
- 서블릿과 컨테이너 간의 연동을 위해 사용.
- 컨텍스트(웹 애플리케이션)마다 하나의 ServletContext가 생성됨
- 서블릿끼리 자원(데이터)을 공유하는데 사용
- 컨테이너 실행 시 생성되고 컨테이너 종료 시 소멸됨
- ServletContext에서 제공하는 메서드
메서드 | 기능 |
getAttribute(String name) | - 주어진 name을 이용해 바인딩된 value를 가져옴 - name이 존재하지 않으면 null 반환 |
getAttributeNames() | 바인딩된 속성들의 name을 반환 |
getContext(String uripath) | 지정한 uripath에 해당되는 객체를 반환 |
getInitParameter(String name) | - name에 해당되는 매개변수의 초기화 값을 반환 - name에 해당되는 매개변수가 존재하지 않으면 null을 반환 |
getInitParameterNames() | - 컨텍스트의 초기화 관련 매개변수들의 이름들을 String 객체가 저장된 Enumeration 타입으로 반환 - 매개변수가 존재하지 않으면 null을 반환 |
getMajorVersion() | 서블릿 컨테이너가 지원하는 주요 서블릿 API 버전을 반환 |
getRealPath(String path) | 지정한 path에 해당되는 실제 경로를 반환 |
getResource(String path) | 지정한 path에 해당되는 Resource를 반환 |
getServetInfo() | 현재 서블릿이 실행되고 있는 서블릿 컨테이너의 이름과 버전을 반환 |
getServletContextName() | 해당 애플리케이션의 배치 관리자가 지정한 ServletContext에 대한 해당 웹 애플리케이션의 이름을 반환 |
log(String msg) | 로그 파일에 로그를 기록 |
removerAttribute(String name) | 해당 name으로 ServletContext에 바인딩된 객체를 제거 |
setAttribute (String name, Object object) |
해당 name으로 객체를 ServletContext에 바인딩 |
setInitParameter (String name, String value) |
주어진 name으로 value를 컨텍스트 초기화 매개변수로 설정 |
setServletContext()
- getServletContext()
src/main/java에 서블릿 생성
- SetServletContext
package sec05.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
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;
@WebServlet("/cset")
public class SetServletContext extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 서블릿 컨텍스트 얻기 : 톰캣이 실행될 때 하나만 생성
ServletContext ctx = getServletContext();
List<String> list = new ArrayList<>();
list.add("이순신");
list.add("류성룡");
// 서블릿 컨텍스트에 데이터 바인딩
// 애플리케이션 어디서나 getAttribute를 통하여 참조할 수 있음
ctx.setAttribute("members", list);
out.print("<h1>서블릿 컨텍스트 데이터 바인딩</h1>");
out.print("이순신, 류성룡....");
}
}
- GetServletContext
package sec05.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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;
@WebServlet("/cget")
public class GetServletContext extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 서블릿 컨텍스트 얻기
ServletContext ctx = getServletContext();
List<String> memberList = (List<String>) ctx.getAttribute("members");
String member1 = memberList.get(0);
String member2 = memberList.get(1);
out.print(member1 + "<br>");
out.print(member2 + "<br>");
}
}
- GetServletContext를 복사해서 GetServletContext2들 만든다
맵핑은 /cget2로 수정
package sec05.ex01;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
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;
@WebServlet("/cget2")
public class GetServletContext2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 서블릿 컨텍스트 얻기
ServletContext ctx = getServletContext();
List<String> memberList = (List<String>) ctx.getAttribute("members");
String member1 = memberList.get(0);
String member2 = memberList.get(1);
out.print("cget2<br>");
out.print(member1 + "<br>");
out.print(member2 + "<br>");
}
}
- requst와 ServletContext 비교
package sec05.exam01;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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;
@WebServlet("/sample/first")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext ctx = getServletContext();// 서블릿 컨텍스트 객체 얻기
request.setAttribute("name", "charlee"); // 리퀘스트 객체에 데이터바인딩
ctx.setAttribute("subject", "java"); // 서블릿 컨텍스트 객체에 데이터바인딩
RequestDispatcher rd = request.getRequestDispatcher("/sample/second");
rd.forward(request, response);
}
}
package sec05.exam01;
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;
@WebServlet("/sample/second")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 리퀘스트에 바인딩 된 데이터 얻기
String name = (String) request.getAttribute("name");
// 서블릿 컨텍스트에 바인딩 된 데이터 얻기
ServletContext ctx = getServletContext();
String subject = (String) ctx.getAttribute("subject");
out.print("서블릿 컨텍스트 객체 데이터 : " + name + "<br>");
out.print("서블릿 컨텍스트 객체 데이터 : " + subject + "<br>");
}
}
request를 사용하려면 RequestDispatcher, forward 를 해줘야한다
- ServletContext 객체의 초기화 파라미터
WEB-INF안에 web.xml 수정
<?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">
<!-- ServletContext 객체의 초기화 파라미터 -->
<context-param>
<param-name>menu_member</param-name>
<param-value>회원등록 회원조회 회원수정</param-value>
</context-param>
</web-app>
- ContextParamServlet 서블릿 생성
package sec05.ex02;
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;
@WebServlet("/initMenu")
public class ContextParamServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext ctx = getServletContext();
String menu_member = ctx.getInitParameter("menu_member");
String menu_order = ctx.getInitParameter("menu_order");
String menu_goods = ctx.getInitParameter("menu_goods");
out.print("<html><body>");
out.print("<table border=1 cellspacing=0><tr>메뉴이름</tr>");
out.print("<tr><td>" + menu_member + "</td></tr>");
out.print("<tr><td>" + menu_order + "</td></tr>");
out.print("<tr><td>" + menu_goods + "</td></tr>");
out.print("</tr></table></body></html>");
}
}
- ServletContext의 파일 입출력 기능
- webapp \ WEB-INF \ bin \ init.txt 파일 생성
- src/main/java에 ContextFileServlet 서블릿 생성
- init.txt
회원등록 회원조회 회원수정, 주문조회 주문수정 주문최소, 상품조회 상품등록 상품수정 상품삭제
- ContextFileServlet
package sec05.ex03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;
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;
@WebServlet("/cfile")
public class ContextFileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
ServletContext ctx = getServletContext();
// 루트경로 : webapp
// 서블릿 컨텍스트는 리소스파일을 읽기 위해 getResourceAsStream 메소드를 제공한다.
// InputStream(입력스트림) : 데이터가 입력되는 통로
InputStream is = ctx.getResourceAsStream("/WEB-INF/bin/init.txt");
BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
String menu = null;
String menu_member = null;
String menu_order = null;
String menu_goods = null;
// 버퍼가 가득차거나 개행문자가 나타나면 버퍼의 내용을 전송
// 버퍼가 가득차지 않는 이상 한줄 씩 읽는다.
// readLine() 메소드는 init.txt 파일에 있는것을 한줄로 읽어온다.
while ((menu = buffer.readLine()) != null) {
StringTokenizer tokens = new StringTokenizer(menu, ",");
menu_member = tokens.nextToken();
menu_order = tokens.nextToken();
menu_goods = tokens.nextToken();
}
out.print(menu_member + "<br>");
out.print(menu_order + "<br>");
out.print(menu_goods + "<br>");
out.close();
buffer.close();
}
}
반응형
'학습 > JSP' 카테고리의 다른 글
13. <hidden>태그와 URL Rewriting 이용해 웹 페이지 연동 (0) | 2022.11.09 |
---|---|
12. ServletConfig (0) | 2022.11.09 |
10. JSP파일에 출력하기 (0) | 2022.11.08 |
9. 포워드 (0) | 2022.11.07 |
8. 데이터베이스 데이터 조회, 추가, 삭제 (0) | 2022.11.04 |
댓글