[필독][기초] / 서블릿 / servlet [part 5]

2016.01.05 14:54language/jsp

ServletConfig 초기화 파라미터를 이용하는 예제
위 예제에서 서블릿의 메소드 구현부에서 JDBC 코드가 있었다.
이번 예제는 JDBC 설정을 ServletConfig 초기화 파라미터를 이용하도록 만든다.
아래 서블릿을 /WEB-INF/src/example 폴더에 만든다.


InitParamServlet 서블릿


package example;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

public class InitParamServlet extends HttpServlet {
         
          private String url;
          private String user;
          private String passwd;
          private String driver;
         
          @Override
          public void init() throws ServletException {
                    url = this.getInitParameter("url");
                    user = this.getInitParameter("user");
                    passwd = this.getInitParameter("passwd");
                    driver = this.getInitParameter("driver");
                   
                    try {
                              Class.forName(driver);
                    } catch (ClassNotFoundException e) {
                              e.printStackTrace();
                    }
          }
         
          @Override
          public void doGet(HttpServletRequest req, HttpServletResponse resp)
                              throws IOException, ServletException {
                   
                    resp.setContentType("text/html; charset=UTF-8");
                    PrintWriter out = resp.getWriter();
                   
                    Connection con = null;
                    PreparedStatement stmt = null;
                    ResultSet rs = null;
                   
                    String sql = "SELECT * FROM emp";
                   
                    try {
                              con = DriverManager.getConnection(url, user, passwd);
                              stmt = con.prepareStatement(sql);
                              rs = stmt.executeQuery();
                             
                              while (rs.next()) {
                                        String empno = rs.getString(1);
                                        String ename = rs.getString(2);
                                        String job = rs.getString(3);
                                        String mgr = rs.getString(4);
                                        String hiredate = rs.getString(5);
                                        String sal = rs.getString(6);
                                        String comm = rs.getString(7);
                                        String depno = rs.getString(8);
                                       
                                        out.println(empno + " : " + ename + " : " + job + " : " + mgr +
                                          " : " + hiredate + " : " + sal + " : " + comm+" : " + depno + "<br />");
                              }
                    } catch (SQLException e) {
                              e.printStackTrace(out);
                    } finally {
                              if (rs != null) {
                                        try {
                                                  rs.close();
                                        } catch (SQLException e) {
                                                  e.printStackTrace();
                                        }
                              }
                              if (stmt != null) {
                                        try {
                                                  stmt.close();
                                        } catch (SQLException e) {
                                                  e.printStackTrace();
                                        }
                              }
                              if (con != null) {
                                        try {
                                                  con.close();
                                        } catch (SQLException e) {
                                                  e.printStackTrace();
                                        }
                              }
                    }
                   
          }
         
}


ServletConfig 초기화 파라미터 선언은 web.xml 파일에서 아래와 같이 servlet 엘리먼트의 자식 엘리먼트 init-param 를 이용한다.


web.xml


<servlet>
  <servlet-name>InitParamServlet</servlet-name>
  <servlet-class>example.InitParamServlet</servlet-class>

  <init-param>
    <param-name>driver</param-name>
    <param-value>oracle.jdbc.driver.OracleDriver</param-value>
  </init-param>
  <init-param>
    <param-name>url</param-name>
    <param-value>jdbc:oracle:thin:@127.0.0.1:1521:XE</param-value>
  </init-param>
  <init-param>
    <param-name>user</param-name>
    <param-value>scott</param-value>
  </init-param>
  <init-param>
    <param-name>passwd</param-name>
    <param-value>tiger</param-value>
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>InitParamServlet</servlet-name>
  <url-pattern>/initParam</url-pattern>
</servlet-mapping>


위에서 설정한 ServletConfig 의 초기화 파라미터의 값은 ServletConfig 의 getInitParameter(String name) 메소드를 이용하면 얻어진다. 톰캣을 재시작한 후에
http://localhost:8989/initParam을 방문하여 테스트한다.



ServletContext 초기화 파라미터를 이용하는 예제
위에서 ServletConfig 의 초기화 파라미터는 해당 서블릿에서만 참조 할 수 있다.
ServletContext 초기화 파라미터는 웹 애플리케이션 내 모든 서블릿과 JSP에서 참조할 수 있다.
ServletContext 초기화 파라미터는 context-param 엘리먼트를 이용한다.
엘리먼트의 위치는 web.xml 엘리먼트 순서를 참조한다.
기존의 servlet 선언부보다 먼저 있어야 한다.
web.xml 열고 아래 내용을 추가한다.


web.xml


<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:oracle:thin:@127.0.0.1:1521:XE</param-value>
</context-param>


ServletContext 객체의 레퍼런스는 서블릿에서 getServletContext() 메소드를 이용하면 얻을 수 있다.
위에서 선언한 ServletContext 의 초기화 파라미터 url 의 값은 ServletContext 의 getInitParameter(String name) 메소드를 이용하여 구한다.
따로 예제를 만들지 않고 위에서 작성한 SimpleSerlvet 에 다음과 같이 코드를 적당한 위치에 추가한 후 다시 컴파일한다.


SimpleServlet 서블릿 편집


ServletContext sc = getServletContext();
String url = sc.getInitParameter("url");
out.println(url);


톰캣을 재실행하고
http://localhost:8989/simple을 방문하여 테스트한다.
InitParamServlet 에서 url 을 이 ServletContext 초기화 파라미터를 이용해서 설정하도록 코드를 수정하고 테스트해 보자.

 

 

 

참고
http://docs.oracle.com/javaee/7/api/index.html?overview-summary.html
http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/
http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
http://commons.apache.org/proper/commons-io/download_io.cgi
http://commons.apache.org/proper/commons-fileupload/using.html
http://www.albumbang.com/board/board_view.jsp?board_name=free&no=292
http://www.docjar.com/docs/api/javax/servlet/GenericServlet.html
http://www.java-school.net/jsp/Servlet


 

 

도움이 되셨다면 공감을 부탁드립니다. ^^