📌 서버 > context.xml
DataBase Connection Pool(DBCP)
:미리 DB와 연결되어 있는 Connection을 일정 개수 만들어 두고 클라이언트 요청 시 만들어 둔 Connection을 빌려주고
요청 처리 완료 시 다시 반환 받는 기법
! url name pw만 변경하면 사용 가능하다.
<!-- DBCP 세팅 -->
<Resource
name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
username="community_pja"
password="community1234"
maxTotal="50"
maxIdle="10"
maxWaitMillis="-1"
/>
<!--
name : JNDI 이름 Context의 lookup()을 사용하여 자원을 찾을때 사용한다. java:comp/env 디렉터리에서 찾을 수 있다.
auth : 자원 관리 주체 지정(Application 또는 Container)
type : Resource의 타입 지정
driverClassName : JDBC 드라이버 클래스 이름.
maxTotal : DataSource 에서 유지할 수 있는 최대 커넥션 수 (요청이 많을때는 최대로 50개까지 만들거야!)
maxIdle : 사용되지 않고 풀에 저장될 수 있는 최대 커넥션의 개수. 음수일 경우 제한이 없음 (평소에는 몇개 만들거야?)
maxWaitMillis : 커넥션 반납을 기다리는 시간(-1은 반환될 때 까지 기다림) -1은 무제한으로! 기다린다는 뜻
-->
📌 JDBCTemplate
Context initContext = new InitialContext();
// servers -> context.xml 파일 찾기 //자바에 연결된 모두 정보
Context envContext = (Context)initContext.lookup("java:/comp/env");
// DBCP 세팅의 <Resource> 태그를 찾아 DataSource 형식의 객체로 얻어오기
// DataSource : Connection pool을 구현하는 객체(Connection)얻어 오기가 가능하다.
DataSource ds =(DataSource)envContext.lookup("jdbc/oracle");
conn =ds.getConnection();
conn.setAutoCommit(false);
📌 Servlet
기존에는 req.setCharacterEncoding("UTF-8"); 하나하나 작성해야하는데,
이렇게 하면 귀찮아! 그럼 우리 필터를 만들어보자 !
package edu.kh.community.member.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/member/login")
public class LoginServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//POST 방식 요청 시 문자 인코딩이 서버 기본값으로 지정
// -> 한글이 깨짐 -> 문자 인코딩 변경 필요
//req.setCharacterEncoding("UTF-8");
//모든 dopost()메소드에 인코딩 변경 코드를 작성해야함..매우 귀찮.. 필터를 만들거야!
// * 모든요청 (전달 방식 가리지 않음) 시 req, resp의 문자 인코딩을 UTF-8 변경
// -> 필터(Filter)
// 전달 된 파라미터 변수에 저장
String inputEmail= req.getParameter("inputEmail");
String inputPw= req.getParameter("inputPw");
System.out.println(inputEmail);
}
}
📌 filter 만들기
: 클라이언트 요청 시 생성되는 HttpServletRequest, HttpServletResponse가 요청을 처리하는 Servlet에 도달하기 전에 특정 코드를 수행하는 클래스
: 기본 세팅 하기
[요청흐름]
클라이언트 -> 요청 -> HttpServletRequest -> 필터 -> 요청처리 Servlet
HttpServletResponse
생성
@WebFilter("url패턴")
해당 클래스를 필터 클래스로 등록 url 패턴에 일치하는 요청이 있을 경우 해당 요청을 필터링함
@WebFilter(filterName = "encodingFilter", urlPatterns="/*")
- filterName 속성 : 필터의 이름 지정, 필터 순서 지정 시 사용
- urlPatterns 속성 : 요청 주소 패턴
- /* == 최상위 주소 하위 모든 == 모든 요청
package edu.kh.community.common.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;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
// @WebFilter("url패턴")
@WebFilter(filterName = "encodingFilter", urlPatterns="/*")
public class EncodingFilter extends HttpFilter implements Filter {
// 서버 실행 시 또는 필터 코드 변경 시 필터 객체가 자동 생성되는데
// 그 때, 필터에 필요한 내용을 초기화 하는 메소드
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("문자 인코딩 필터 초기화");
}
// 서버 실행 중 필터 코드가 변경되어
// 기존 필터를 없애야 할 때 수행되는 메소드
public void destroy() {
System.out.println("문자 인코딩 필터 파괴");
}
// 필터 역할을 수행하는 메소드
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// ServletRequest == HttpServletRequest의 부모 타입
// ServletResponse == HttpServletResponse의 부모 타입
// -> 필요 시 다운캐스팅
// 모든 요청의 문자 인코딩은 UTF-8로 설정
request.setCharacterEncoding("UTF-8");
// 모든 응답의 문자 인코딩을 UTF-8로 설정
response.setCharacterEncoding("UTF-8");
// 연결된 다음 필터 수행(없으면 Servlet 수행)
chain.doFilter(request, response);
}
}
DB가서 해당 테이블 만들기 !
이클립스로 와 MEMBER 만들기
Lombok 라이브러리 다운로드 받기
- VO(Value Object) 또는 DTO(Date Transfer Object) 작성되는 공통코드 (getter/setter/생성자)를 추가해주는 라이브러리
다운 받는 방법은 다른 블로그에 많이 나오니 생략 하겠다!
사용하기 위해 li 폴더에 Lombok 넣어주고 아래와 같이 어노테이션 진행하면 더이상 getter/setter/생성자을 안써도 된다!
매우 편리 해졌다.
'ON > Servlet' 카테고리의 다른 글
Cookie / forward / Redirect 정리 (0) | 2023.07.10 |
---|---|
[Servlet] 회원가입 만들기 (0) | 2023.07.09 |
통합연결 실습하기 (0) | 2023.07.05 |
[Servlet] JSTL (0) | 2023.07.04 |
[Servlet] Serlvet/JSP 내장 객체와 범위 (0) | 2023.07.04 |