ServletContext
톰캣 실행시 각 컨텍스트를 웹 앱 마다 한개씩 생성, 그리고 종료하면 다시 하나씩 소멸
실행되면서 어플리케이션 전체의 공통 자원이나 정보를 미리 바인딩해서 서블릿들이 공유하면서 사용
해당 ServletContext로 바인딩 된 경우에는 모든 사용자들이 접근 가능
1. 다른 URL을 통해서 ServletContext.setAttribute를 이용해 값을 지정했다고 한다면
2. 또다른 URL에서 해당 Servlet에 접근해 getAttribute로 값을 가져올 수 있다
SetServletContext.java
//1, member설정 후 get으로 받을 예정
@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 context = getServletContext();
List member = new ArrayList();
member.add("julie");
member.add(30);
context.setAttribute("member", member);
out.print("<html><body>");
out.print("i am julie and 30 years old");
out.print("</body></html>");
}
}
GetServletContext.java
@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 context = getServletContext();
List member = (ArrayList)context.getAttribute("member");
String name = (String)member.get(0);
int age = (Integer)member.get(1);
out.print("<html><body>");
out.print(name +"<br>");
out.print(age + "<br>");
out.print("</body></html>");
}
}
매개변수 설정
하단의 항목을 설정하여 공통적으로 이용할 수 있다
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<context-param>
<param-name>menu_member</param-name>
<param-value>회원등록 회원조회 회원수정 </param-value>
</context-param>
</web-app>
설정된 매개변수는 getInitParameter()을 이용하여 요청가능
파일입출력
- java.io 패키지 : 데이터 입출력 관련 패키지(File 관련등을 읽고 사용한다)
출처 https://coding-factory.tistory.com/281
InputStream
말그대로 입력 프로그램이 키보드나 마우스를 통해 데이터를 입력 받을 때 사용
getResourceAsStream
public InputStream getResourceAsStream(String name)Returns an input stream for reading the specified resource. If this loader is closed, then any resources opened by this method will be closed.
The search order is described in the documentation for ClassLoader.getResource(String).
Overrides:getResourceAsStream in class ClassLoaderParameters:name - The resource nameReturns:An input stream for reading the resource, or null if the resource could not be foundSince:1.7
BufferedReader
- 문자단위 입출력을 위한 하위 스트림 중 하나 (그림등은 바이트 입출력 하위 스트림을 사용한다)
@WebServlet("/cfile")
public class ContextFileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=euc-kr");
PrintWriter out = response.getWriter();
ServletContext context = getServletContext();
InputStream is = context.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;
while ((menu = buffer.readLine()) != null) {
StringTokenizer tokens = new StringTokenizer(menu, ",");
menu_member = tokens.nextToken();
menu_order = tokens.nextToken();
menu_goods = tokens.nextToken();
}
out.print("<html><body>");
out.print(menu_member + "<br>");
out.print(menu_order + "<br>");
out.print(menu_goods + "<br>");
out.print("</body></html>");
out.close();
}
}
Stringtokenizer?
- Split와 차이점? 메소드이냐 아니면 자체 클래스이냐
- 사용방법이 다르기 때문에 클래스 자체에서 가지고 있는 메소드를 이용해서 문자열들을 자를 수 있어 편리
ex, nextToken();
⭐️하단의 개념 정리 필요
컨텍스트
서블릿
컨테이너
'개발' 카테고리의 다른 글
쿠키를 이용한 웹페이지 연동 (0) | 2020.06.05 |
---|---|
세션트레킹 (0) | 2020.06.05 |
[Servlet] 바인딩이란? (0) | 2020.05.29 |
서블릿의 포워드 방법 (0) | 2020.05.29 |
면접자료 이해한만큼 정리하기 (0) | 2020.05.26 |