2020.12.29 일지

0후·2020년 12월 29일
0

비트캠프

목록 보기
51/112

filter

사용하는 이유

필터는 서블릿 실행 전, 후에 어떤 작업을 하고자 할 때 사용한다. 서블릿이 실행되기 전에 필요한 자원을 미리 준비하거나, 설정해둔 것들을 필터를 통해 처리할 수 있다. 필터의 또 좋은 점은 이런 코드들이 산발되어있으면 유지보수 시 모든 파일을 건드려야 하는데, 하나의 필터로 관리함으로써 관리하기가 쉬워진다. 그래서 필터를 사용하는 것이다.
필터의 실행

이클립스로 톰캣 설정 및 filter 설정하는 법

  1. 이클립스 사이트에서 Eclipse IDE for Enterprise Java Developers을 다운로드 받은 뒤 설치해준다. 설치 후 workspace 설정 후 Dynamic Web Project를 열어준다.
  2. 이름 지어주고, tomcat 웹서버와 연동해주기 위해 New Runtime을 눌러준다.
  3. New Runtime 눌러서 Apache Tomcat 9.0 누르고 Next 눌러준다.
  4. Browse 눌러 로컬 컴퓨터에 깔려있는 tomcat9을 연결해준다.
  5. 연결한 모습은 다음과 같다.
  6. 톰캣 웹서버를 연결시켜주면 이제 package를 생성해준다.
  7. 이클립스 하단 view에 Servers를 클릭해주면 창이 뜬다. 여기서 Next 해준다.
  8. 프로젝트 옮겨주고 Add 버튼 누른 후 finish하면 웹서버 등록 완성!
  9. 이제 filter 등록이다. peachy.util.filter로 이름 지어주고 finish 클릭한다.
  10. 만들어 준 패키지에 하단 파일(EncodingFilter.java)을 드래그해서 넣어준다.
package peachy.util.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class EncodingFilter implements Filter {
	
	private String encoding;
	protected FilterConfig filterConfig;
		
	
	public void init(FilterConfig filterConfig) 
		throws ServletException {
		this.filterConfig=filterConfig;
		this.encoding=filterConfig.getInitParameter("encoding");		
	}
	
	/*
	 * HttpServletRequest 객체에 web.xml에서 전달된 문자  인코딩을 설정하는 메소드.
	 */	 
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
		throws IOException,ServletException {
		if(request.getCharacterEncoding()==null) {
			if(encoding!=null) {
				request.setCharacterEncoding(encoding);
			}
		}
		chain.doFilter(request,response);		
	}
    
	/*
	 *  web.xml에서 전달된 인코딩 값을 초기화하는 메소드
	 */
	
	public void destroy() {
		this.encoding=null;
		this.filterConfig=null;		
	}	
	
	public FilterConfig getFilterConfig() {
		return filterConfig;
	}
	
	public void setFilterConfig(FilterConfig filterConfig) {
		this.filterConfig=filterConfig;
	}
}//end of class
  1. WEB-INF에서 마우스 우클릭하고 WEB-INF>New>Other를 눌러준다.
  2. other 누르고 XML File 누른 뒤 Next 클릭
  3. web.xml로 명명 후 Finish
  4. web.xml 내에는 하단 처럼 써주면 filter 적용은 끝!
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">

	<display-name>HelloPj</display-name>
	<description>Welcome to HelloPj</description>
  
	<filter>
		<filter-name>Encoding Filter</filter-name>
		<filter-class>peachy.util.filter.EncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>Encoding Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

DBCP

DBCP란?

DataBase Connection Pool의 약자로 DB와 커넥션을 맺고 있는 객체를 관리하는 역할

DBCP를 쓰는 이유?

커넥션 풀을 사용하면 커넥션을 생성하고 닫는 시간이 소모되지 않기 때문에 그만큼 어플리케이션의 실행 속도가 빨라지며, 또한 한 번에 생성될 수 있는 커넥션 수를 제어하기 때문에 동시 접속자 수가 몰려도 웹 어플리케이션이 쉽게 다운되지 않는다.

DBCP의 원리는?

DBCP는 WAS가 실행되면서 미리 일정량의 DB Connection 객체를 생성하고 Pool이라는 공간에 저장한다. 저장된 DB Connection 객체는 요청에 따라 필요할 때마다 Pool에서 가져다 쓰고 반환할 수 있다. 따라서 요청할 때마다 DB Driver에 로드하여 물리적인 Connection 객체를 생성하는 비용이 줄어들어 앞서 말한 문제를 해결할 수 있게 된다.

Pool과 DBCP의 차이점은?

pool과 dbcp는 같은 역할을 하지만 만드는 주체가 다른 것이다. pool은 개발자가 설계한 클래스로 하는 것이고, dbcp는 tomcat(각자 쓰는 서버에 따라 다름) container에 의해 만들어지는 것이다.

이클립스로 DBCP 설정하는 법

  1. 나는 tomcat 웹서버를 쓰고, oracle을 사용하기 때문에 tomcat에서 oracle DBCP를 사용하는 문서를 보면서 작업하도록 하겠다.
  2. server.xml Context를 보면 아무것도 건드리지 않는다는 가정 하에 하단 이미지처럼 되어있다.
  3. 이 상태에서 하단 내용을 context 사이에 넣어주어 이미지처럼 완성해준다.
<Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:JAVA"
              username="servlet" password="java" maxTotal="20" maxIdle="10"
              maxWaitMillis="-1"/>


4. web.xml 켜서 하단 내용을 넣어준다.

  	<resource-ref>
		<description>Oracle Datasource example</description>
		<res-ref-name>jdbc/myoracle</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>
  1. 이제 사용할 파일을 만들어줘야 하므로 New>JSP File로 불러준다.
  2. 이름을 아무거나 지정해주고, finish 눌러준다.
  3. 해당 파일에 하단 내용을 입력해준다.
<%@ page language="java" contentType="text/html; charset=utf-8"
      import="javax.naming.*, javax.sql.*, java.sql.*"%>
<div style="max-width:1024px;margin:0 auto;text-align:center;">
   <h2>Connection Obj from DBCP</h2>
<%
   Context initContext = new InitialContext();
   Context envContext  = (Context)initContext.lookup("java:/comp/env");
   DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
   Connection con = ds.getConnection();
%>
   생성된 con: <%=con.hashCode() %>
</div>
  1. lib 폴더에 jar파일도 넣어준다.
  2. index.jsp도 만들어준다.
<%@ page language="java" contentType="text/html; charset=utf-8" %>
<!doctype html>
<html>
	<head>
		<meta charset="UTF-8">
	    <title>HelloPj Index</title> 
	</head>
	<body>
		<div style="text-align:center">
		   <h1>HelloPj Index</h1>
		   <p>
			  <a href="hello_dbcp.jsp">DBCP 테스트</a><br>
		   </p>
		</div>
	</body>
</html>
  1. 127.0.0.1:8080/HelloPj/hello_dbcp.jsp로 들어가서 잘 되는 지 확인하면 끝!

JSP에서 사용되는 주석 3가지

profile
휘발방지

6개의 댓글

comment-user-thumbnail
2020년 12월 29일

피치님거 참고하면서 공부 많이 해요~ 감사합니다^^

1개의 답글
comment-user-thumbnail
2020년 12월 29일

알차네요 자주 들르겠습니다!

1개의 답글
comment-user-thumbnail
2020년 12월 30일

도움이 많이 됐어요 bb

1개의 답글