Undergoing

ServletContext 본문

개발/Web Development

ServletContext

Halkrine 2012. 5. 15. 10:42

ServletContext : 서블릿의 환경을 표현. JSP나 서블릿을 컨테이너 혹은 다른 웹 App와 연결해줌


Inferface of ServletContext 

 getInitParameter(String)

 getInitParameterNames()

 getAttribute(String)

 getAttributeNames()

 setAttribute(String)

 removeAttribute(String)

-----------------------

 getMajorVersion()

 getServerInfo()

-----------------------

 getRealPath(String)

 getResourceAsStream(String)

 getRequestDispatcher(String)

-----------------------

 log(String)

 // 기타 메소드


서블릿의 환경 정보는 다음과 같이 호출 가능

- ServletContext context = getServletContext();


ServletContext Interface는 다음 페이지에서 확인 가능

http://docs.oracle.com/javaee/1.3/api/javax/servlet/ServletContext.html



내장 변수 예시 - 현재 사용하는 서버 정보와 버전 표시


ServerInfo.java <==  Servlet

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;



public class ServerInfo extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


ServletContext context = getServletContext();

String serverInfo = context.getServerInfo();

int majorVersion = context.getMajorVersion();

int minorVersion = context.getMinorVersion();

request.setCharacterEncoding("euc-kr");

response.setCharacterEncoding("euc-kr");

PrintWriter out = response.getWriter();

out.println("<HTML>");

out.println("  <HEAD><TITLE>웹 서버 정보</TITLE></HEAD>");

out.println("  <BODY>");

out.printf("웹 서버의 종류 : %s <br>", serverInfo);

out.printf("지원하는 서블릿 버전 : %d.%d <br>", majorVersion, minorVersion);

out.println("  </BODY>");

out.println("</HTML>");

out.flush();

out.close();

}



* JSP 내장 변수를 이용하면 더 쉽게 구현 가능


ServerInfo.jsp <== JSP  

<%@ page contentType = "text/html; charset = euc-kr;" pageEncoding = "euc-kr"%>

<%@ page import = "java.io.*, java.util.*"%>


<html>

<head>

    <title>웹서버 정보</title>

</head>

<body>

     웹 서버의 종류 : <%= application.getServerInfo() %><br/>

     지원하는 서블릿 버전 : <%= application.getMajorVersion() %>.<%=application.getMinorVersion() %><br/>

</body>

</html> 


getInitParamater : 웹 어플리케이션의 초기화 파라미터 값을 불러옴


 <web-app>

<context-param>

<param-name>DB_NAME</param-name>

<param-value>malldb</param-value>

</context-param>

</web-app>

 String str = application.getInitParameter("DB_NAME");   //DB_NAME 은 초기화 파라미터의 이름


application.log를 활용하여 별도로 파일열람 코드를 작성하지 않고 바로 로그 기록 가능

- application.log("blahblah");

- tomcat의 서브 dir 중 log 폴더에 저장됨(localhost.yyyy-mm-dd.log)

- Eclips로 코딩할 경우 application.log를 통해 log가 생성되지 않으므로 다음 페이지에서 필요한 소스를 받아야 함

[http://www.hanb.co.kr/brain/board/view.html?id=jsp&ma_id=15068&pg=2]


LogTest.jsp

<%@ page contentType = "text/html; charset =euc-kr;" pageEncoding = "euc-kr" %>

<%@ page import = "java.io.*, java.util.*"%>

<HTML>

<HEAD>

<TITLE>로그 출력 테스트</TITLE>

</HEAD>

<BODY> 

로그가 정상적으로 호출되는지 출력하는 페이지입니다. <%= request.getParameter("NAME") %> 님<br/>

<% 

application.log("[로그 출력 테스트] JSP 페이지가 호출되었습니다."); 

%>

</BODY>

</HTML> 



같은 웹 어플리케이션에 속하는 웹 컴포넌트들끼리 데이터를 주고받는 방법

- application.setAttribute("데이터 이름", "데이터 값");

- String str = (String) application.getAttribute("데이터 이름");

- application.removeAttribute("데이터 이름");


 StoreName.jsp

<%@ page contentType = "text/html; charset = euc-kr;" pageEncoding = "euc-kr"%>

<%@ page import = "java.io.*, java.util.*"%>

<% String name = request.getParameter("NAME");

application.setAttribute("NAME", "김숙자");

%>


<HTML>

<HEAD>

<TITLE>웹 애플리케이션 데이터 저장하기</TITLE>

</HEAD>

<BODY>

NAME 데이터가 저장되었습니다.

</BODY>

</HTML> 

ReadName.jsp 

<%@ page contentType = "text/html; charset = euc-kr;" pageEncoding = "euc-kr"%>

<%@ page import = "java.io.*, java.util.*"%>


<HTML>

<HEAD>

<TITLE>웹 애플리케이션 데이터 조회하기</TITLE>

</HEAD>

<BODY>

이름 : <%= application.getAttribute("NAME") %>

</BODY>

</HTML> 
 ClearName.jsp

<%@ page contentType = "text/html; charset = euc-kr;" pageEncoding = "euc-kr"%>

<%@ page import = "java.io.*, java.util.*"%>

<% application.removeAttribute("NAME"); %>


<HTML>

<HEAD>

<TITLE>웹 애플리케이션 데이터 삭제하기</TITLE>

</HEAD>

<BODY>

NAME 데이터가 삭제되었습니다.

</BODY>

</HTML> 



각 메서드의 전송 범위와 용도


 메서드의 소속 

 데이터의 전송 범위  용도

 javax.servlet.jsp.JspContent

 현재 JSP 페이지 내 

 같은 JSP 페이지 안에 있는 스크립팅 요소와 익스프레션 언어 간의 데이터 교환

 javax.servlet.ServletRequest  현재 웹 컴포넌트 및 forward, include 메서드를 통해 호출되는 또다른 웹 컴포넌트

 forward, include 메서드를 통해 호출되는 웹 컴포넌트로의 데이터 전달

 javax.servlet.http.HttpSession

 같은 세션에 속하는 모든 웹 컴포넌트  여러 화면으로 구성되는 애플리케이션에서 웹 컴포넌트 간의 데이터 전달

 javax.servlet.ServletContext

 같은 웹 애플리케이션에 속하는 모든 웹 컴포넌트

 같은 웹 애플리케이션 폴더에 속하는 웹 컴포넌트들 간의 데이터 공유


웹 어플리케이션에 관련된 파일 경로명을 가져오는 메서드

- String appPath = application.getContextPath(); 

- getContextPath()는 웹 어플리케이션의 URL 경로명을 리턴함

* getRealPath : 웹 어플리케이션 Dir 내에 있는 파일의 경로명을 파일시스템 전체에 대한 절대 경로명으로 바꾸어서 리턴

 [String absolutePath = application.getRealPath("/sub1/aaaa.html");

'개발 > Web Development' 카테고리의 다른 글

Standard Action  (0) 2012.05.31
Expression Language  (0) 2012.05.18
서블릿의 Life Cycle  (0) 2012.05.14
쿠키 입력과 삭제  (0) 2012.05.10
쿠키와 세션  (0) 2012.05.10