JSP/Servlet을 이용하여 웹 프로그램을 개발하다보면 DB를 사용하는 일은 통상적으로 있는 일이다. DB의 성격상 보안이 잘 유지되어야 할텐데 이때 Java 소스 코드 안에 DB 접속 정보를 그대로 코딩하는 경우가 있다. 이는 보안상 결코 바람직 하지 않은 일이다.

물론 Java(Servlet)을 컴파일한 class 파일만 서버에 올리면 일단 해당 정보가 막바로 보이지는 않겠지만 좀더 보안을 생각한다면 Servlet의 초기화 파라미터를 이용하는 것이 더 좋은 방법일 것이다.

Servlet 초기화 파라미터는 모든 Servlet에서 사용할수 있는 것이 아니라 특정 Servlet에 국한되어 사용하는 경우이다. 

해당 프로젝트의 web.xml 안에 해당 Servlet이 생성될 때 사용할 데이터들을 작성해 두면 된다. 


<?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">

  <display-name>ExServlet</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

  <servlet>

  <servlet-name>OhServlet</servlet-name>

  <servlet-class>com.joe.myservlet.HelloServlet</servlet-class>

  </servlet>

  <servlet-mapping>

  <servlet-name>OhServlet</servlet-name>

  <url-pattern>/OhSRLT</url-pattern>

  </servlet-mapping>

</web-app>


이때 초기화 파라미터를 작성하는 위치는 이 초기화 데이터를 사용할 Servlet의 태그 안에 작성해야 한다. 이 경우에는 com.joe.myservlet.HelloServlet에서 초기화 데이터를 사용하고자 한다고 가정하면 아래와 같이 작성을 하면 된다.


  <servlet>

  <servlet-name>OhServlet</servlet-name>

  <servlet-class>com.joe.myservlet.HelloServlet</servlet-class>

  <init-param>

  <param-name>myDB</param-name>

  <param-value>jdbc:mysql://①:3306/②?autoReconnect=true</param-value>

  </init-param>

  <init-param>

  <param-name>dbUser</param-name>

  <param-value>hisUser</param-value>

  </init-param>

  <init-param>

  <param-name>dbPW</param-name>

  <param-value>qwerty1</param-value>

  </init-param>

  </servlet>

  <servlet-mapping>

  <servlet-name>OhServlet</servlet-name>

  <url-pattern>/OhSRLT</url-pattern>

  </servlet-mapping>


여기에서 위 ①에는 MySQL이 설치되어 있는 서버의 IP 주속 혹은 도메인 이름을, ②에는 사용할 Database 이름을 명기하면된다.

다음과 같은 형태가 될 것이다.


<param-value>jdbc:mysql://118.277.xxx.x:3306/theDB?autoReconnect=true</param-value>

혹은

<param-value>jdbc:mysql://myblog.or.kr:3306/theDB?autoReconnect=true</param-value>


그러면 이렇게 작성된 초기화 값을 Servlet에서 사용할려면 ServletConfig 인터페이스의 getInitParameter() 메소드를 이용해서 초기화 파라미터의 값을 가져올수 있다.

ServletConfig 인터페이스에 대한 Oralce의 API 문서에는 다음과 같이 설명되어 있다.


public interface ServletConfig

A servlet configuration object used by a servlet container to pass information to a servlet during initialization.


All Known Implementing Classes:

GenericServlet, HttpServlet


package com.joe.myservlet;


public class HelloServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

       

... 중 략 ...


private void doAction(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException 

{


... 중 략 ...

//아래에서 getInitParameter() 메소드를 막바로 사용할수 있는 이유는 본 클래스가 HttpServlet을 

//상속받았는데 HttpServlet이 ServletConfig라는 interface을 implement했기 때문이다.

//즉 getInitParameter()는 ServletConfig 인터페이스의 메소드인데 HttpServlet이

//이 ServletConfig를 구현했기 때문에 아래에서 막바로 사용가능한 것이다.

String db = getInitParameter("myDB");

String dbUser = getInitParameter("dbUser");

String dbPw = getInitParameter("dbPW");

... 중 략 ...

     PrintWriter out = response.getWriter();

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

out.println("db : " + db+"<br/>");

out.println("user : " + dbUser+"<br/>");

out.println("dbPassword : " + dbPw+"<br/>");

out.close();

}



+ Recent posts