디렉토리에 접근하는 데 사용하는 Java API
-> 애플리케이션(프로그램, 웹앱)은 JNDI를 이용해서 파일 또는 서버 Resource를 찾울 수 있음
미리 DB와 연결되어 있는 Connection을 일정 개수 만들어 두고 클라이언트 요청 시 만들어 둔 Connection을 빌려주고 요청 처리 완료 시 다시 반환받는 기법
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 로그인 기능 (23.07.04~05)
1) 미리 Connection을 만들어 두기 때문에 요청 시 속도가 빠름
(예전에는 그때 그때 만들어서 오래 걸림)
2) Connection 개수에 제한을 두어 DB에 과도하게 요청되는 경우를 방지할 수 있음
<!-- DBCP 세팅 -->
<Resource
name="jdbc/oracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe"
username="community_ash"
password="community1234"
maxTotal="50"
maxIdle="10"
maxWaitMillis="-1"
/>
클라이언트 요청 시 생성되는 HttpServletRequest, HttpServletResponse가 요청을 처리하는 Servlet에 도달하기 전에 특정 코드를 수행하는 클래스
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 로그인 기능 (23.07.04~05)
클라이언트
-> 요청 -> HttpServletRequest
HttpServletResponse
생성 -> 필터
-> 요청 처리 Servlet
서버 실행 시 또는 필터 코드 변경 시 필터 객체가 자동 생성되는데,
그때 필터에 필요한 내용을 초기화하는 메소드
public class EncodingFilter extends HttpFilter implements Filter {
public void init(FilterConfig fConfig) throws ServletException {
}
서버 실행 중 필터 코드가 변경되어 기존 필터를 없애야 할 때 수행되는 메소드
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);
}
}
VO(Value Object) 또는 DTO(Data Transfer Object)에 작성되는 공통 코드(getter/setter/생성자)를 자동 추가해 주는 라이브러리
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Getter // getter 자동 추가
@Setter // setter 자동 추가
@ToString // toString 자동 추가
@NoArgsConstructor // 기본 생성자
@AllArgsConstructor // 모든 필드 초기화하는 매개변수 생성자
클라이언트(브라우저)에서 관리하는 파일
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 로그아웃, 아이디 저장 기능 (23.07.06)
서버 구현 - 회원 탈퇴 기능 (23.07.11)
1) 서버가 요청에 대한 응답을 할 때 쿠키를 생성한 후 응답에 쿠키를 담아서 클라이언트에게 전달
2) 응답에 담긴 쿠키가 클라이언트에 파일 형태로 저장
3) 이후 특정 주소 요청 시 쿠키 파일을 브라우저가 찾아서 자동으로 요청에 실어서 보냄
4) 서버는 요청에 실려온 쿠키 파일을 사용함
// 쿠키 객체 생성
// Cookie c = new Cookie("클라이언트쪽에 저장될 쿠키 이름", "쿠키 내용");
Cookie c = new Cookie("saveId", inputEmail);
// 아이디 저장이 체크된 경우
if(req.getParameter("saveId") != null) {
// 쿠키 파일을 30일 동안 유지
c.setMaxAge(60 * 60 * 24 * 30); // 30일(1초 단위)
} else {
// 쿠키 파일을 0초 동안 유지
// -> 기존에 존재하던 쿠키 파일에 유지 시간을 0초로 덮어씌움
// == 삭제하겠다는 소리
c.setMaxAge(0);
}
// 해당 쿠키 파일이 적용될 주소를 지정
c.setPath( req.getContextPath() );
// req.getContextPath() : 최상위 주소(/community)
// -> /community로 시작하는 주소에서만 쿠키 적용
// 응답 객체를 이용해서 클라이언트로 전달
resp.addCookie(c); // 코드가 해석되는 순간 바로 전달
Cookie c = new Cookie("saveId", ""); // 쿠키 생성
c.setMaxAge(0); // 쿠키 수명
c.setPath(req.getContextPath()); // 쿠키 적용 경로
resp.addCookie(c); // 쿠키 클라이언트에 전송
클라이언트 요청
-> 서버 요청 처리(Servlet)
-> 응답 화면 만들어 줘!(JSP 위임)
요청 위임
- Servlet으로 응답 화면 만들기가 불편하기 때문에 JSP로 req, resp 객체를 위임하여 요청에 대한 응답 화면을 대신 만듦
- 화면이 변경되어도 요청 주소가 유지됨
ex) 아이스 아메리카노 주세요 -> 주문 받음 -> 바리스타가 만든 커피
클라이언트 캐셔(Servlet) 응답 결과(JSP)
재요청
- 현재 Servlet에서 응답 페이지를 만들지 않고 응답 페이지를 만들 수 있는 다른 요청의 주소로 클라이언트를 이동시킴(재요청)
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 로그인 기능 (23.07.04~05)
클라이언트 재요청
-> 기존 HttpServletRequest/Response 제거
-> 새로운 HttpServletRequest/Response 생성
---> 리다이렉트 시 request 객체가 유지되지 않기 때문에
특정 데이터를 전달하거나 유지하고 싶으면
Session 또는 application 범위에 세팅해야 한다!
[CGV 카페]
ex) 팝콘 주세요 -> 팝콘 파는 위치 알려 줌 -> (클) 팝콘 파는 곳으로 이동
클라이언트 캐셔(Servlet) 클라이언트의 다른 주소 재요청
세션 무효화
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 로그아웃, 아이디 저장 기능 (23.07.06)
클라이언트 요청 객체 HttpServletRequest를 오버라이딩 하는 방법을 제공하는 클래스
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 개인정보 암호화 (23.07.10)
-> Wrapper 클래스 생성 시 반드시 HttpServletRequest 객체를 매개변수로 전달해야 한다.
어떤 문자열이든 일정한 길이의 무작위 문자열로 변환하는 함수(중복X)
주소에 담겨져서 전달되는 파라미터를 나타내는 문자열
주소?name속성=값&name속성=값
/member/login?memberEmail=user01&memberPw=1234
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 목록으로 돌아가기 기능 (23.07.20)
뒤로 가기
주소 관련 정보를 나타내는 객체
현재 페이지 주소 + 쿼리스트링
location.href = "주소"; // 해당 주소로 이동
const pathname = location.pathname; // 주소상에서 요청 경로 반환
쿼리 스트링만 별도 객체로 반환
EL == JSTL -> HTML -> JS
input type="file" 요소는 파일이 선택될 때 change 이벤트가 발생한다.
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 프로필 수정 미리보기 기능 (23.07.24)
input type="file"
만 사용 가능한 속성으로 선택된 파일 목록(배열)을 반환
웹 애플리케이션이 비동기적으로 데이터를 읽기 위하여 사용하는 객체
form 태그가 데이터를 서버로 제출할 때 데이터의 인코딩 형식을 지정하는 속성
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 프로필 업로드/삭제 기능 (23.07.25)
제출할 때 인코딩을 하지 않음
multipart/form-data
형식의 요청을 처리할 수 있는 전용 request 객체가 필요하다!파일 업로드 라이브러리
http://www.servlets.com/ (cos.jar 라이브러리 이용)
요청 파라미터 중 모든 file 타입 태그의 name 속성 값을 얻어와 Enumeration
형태로 반환 (Iterator의 과거 버전)
-> 해당 객체에 여러 값이 담겨 있고 이를 순서대로 얻어오는 방법을 제공
(보통 순서가 없는 모음(Set과 같은 경우)에서 하나씩 꺼낼 때 사용)
input type="file" 에서 쓸 수 있는 속성
// 예시
<input type="file" name="profileImage" id="input-image" accept="image/*">
accept="image/*" : 이미지 파일 확장자만 선택 허용
accept="video/*" : 동영상 파일 확장자만 선택 허용
accept=".pdf" : pdf 파일 확장자만 선택 허용
유사배열 | 컬렉션을 배열로 변환해서 반환
⏬ 자세한 사용법 참조하기(링크) 👀 ⏬
서버 구현 - 게시글 수정 기능 (23.07.27)