본문 바로가기
Java Web Programming/6. Spring | MyBatis

[SerlvetConfig/SerlvetContext] 다시 한 번 공부해보자!

by 파프리카_ 2020. 11. 11.
728x90
반응형

SerlvetContext 설정 파일

/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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>webtest-serlvetconfig-servletcontext</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.kosta.DispatcherServlet</servlet-class>
  	<!-- init-param 태그 추가 
  		 : DispatcherSerlvet의 SerlvetConfig 객체에 정보 전달-->
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>/WEB-INF/spring-*.xml</param-value>
  	</init-param> 
  </servlet>
  
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/DispatcherServlet</url-pattern>
  </servlet-mapping>
  
  <context-param>
     <param-name>servletContextTest</param-name>
     <param-value>웹어플리케이션 전체공유정보</param-value>
  </context-param>
  
</web-app>

 

/DispatcherServlet.java <<Servlet>>

package org.kosta;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class DispatcherServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public DispatcherServlet() {
        super();
        System.out.println("DispatcherSerlvet 생성자 실행");
    }

    // 1. init()시 SerlvetConfig 정보 전달
    public void init(ServletConfig config) throws ServletException {
    	super.init(config);
    	System.out.println("init()");
    }

    // 2. service - doGet() or doPost()
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//Serlvet에서 html을 작성하기 어려워서, JSP(View)가 개발되었다.
		//Serlvet이든, JSP이든, 내부적으로는 I/O(입출력)이 실행된다.
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<h3>");
		String springConfig = getServletConfig().getInitParameter("contextConfigLocation");
		if (springConfig != null)
			out.println("스프링 설정 정보: " + springConfig);
		else
			out.println("스프링 설정 정보: " + getServletConfig().getServletName() + "-servlet.xml");
		out.println("<br>");
		out.println("서블릿 이름: " + getServletConfig().getServletName()+"-servlet.xml");
		out.println("</h3>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
	
	// 3. destroy()
	public void destroy() {
		super.destroy();
		System.out.println("destroy()");
	}
	

}

web.xml에서

 

1. <serlvet-name>에 springmvc를 할당해주면,

DispatcherServlet.java 실행 시, 서블릿 이름(getServletConfig().getServletName())이 springmvc로 반환된다.

(DispatcherServlet.java에서 이름 반환할 때 끝에 +"-serlvet.xml"을 반환한다.

이는 SpringMVC에서 FrontController의 이름을 찾는 방식이다.)

 


2. <serlvet>태그 내 <init-param>을 추가하여, serlvetConfig에 정보를 할당해준다.

param-name : contextConfigLocation

param-value : /WEB-INF/spring-*.xml

DispatcherServlet.java 실행 시, <init-param>을 추가한 경우는 /WEB-INF/spring-*.xml 로 설정정보를 찾는다.

없는 경우는 1번과 같이 <serlvet-name>인 springmvc-serlvet.xml을 찾는다.

 


3. <context-param> 태그 추가하여 SerlvetContext 정보 할당

param-name : serlvetContextTest

param-value : 웹 어플리케이션 전체 공유 정보

 

serlvetConfig가 있는 객체에만 SerlvetContext정보가 공유된다.

 


/test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	ServletConfig와 ServletContext Test
	<br>
	<%
	   String contextInfo = application.getInitParameter("servletContextTest");
	%>
	<br>
	<!-- 같은 웹 어플리케이션 내에 있는 jsp와 servlet에서는 
	     web.xml에서 지정한 servletContext정보를 공유할 수 있다.  -->
	web ServletContext -> <%=contextInfo%><br>
	
	<!-- application(어플리케이션)이 아닌, 
		 DispatcherSerlvet의 ServletConfig의 초기파라미터는 
		 다른 서블릿과 JSP에서는 사용이 불가능 하다. -->
	Dispatcher Servletconfig -> <%=getServletConfig().getInitParameter("contextConfigLocation")%>
</body>
</html>

 

  • 같은 웹 어플리케이션 내에 있는 jsp와 servlet에서는 web.xml에서 지정한 servletContext정보를 공유할 수 있다.
    : SerlvetContext는 웹 어플리케이션 환경 정보로서 모든 서블릿과 JSP가 접근 가능하다.
  • application(어플리케이션)이 아닌,
    DispatcherSerlvet의 ServletConfig의 초기파라미터는 다른 서블릿과 JSP에서는 사용이 불가능 하다.

728x90
반응형