반응형
01. filter클래스 만드는법 - 서블릿 클래스 만드는 방법과 동일
EncodingFilter.java
package xyz.itwill.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;
//필터 클래스 :
//=> 특정 웹프로그램 요청에 대한 웹프로그램 실행 전 또는 후에 동작될 명령을 작성하기 위한 클래스
//=> 웹프로그램 실행 전 동작될 명령으로 리퀘스트 메세지
//(요청 관련 정보 - HttpServletRequest 객체)의 정보를 변경하는 명령 작성
//=> 웹프로그램 실행 후 동작될 명령으로 리스폰즈 메세지
//(응답 관련 정보 - HttpServletResponse 객체)의 정보를 변경하는 명령 작성
//Header는 건들이지만,
//Body는 HTML(응답결과)가 있기 때문에 왠만해선 잘 건들이지 않음
//필터클래스 만드는 방법
//=>순서1. 반드시 Filter 인터페이스를 상속받아 작성
//=>순서2. @WebFilter 어노테이션 또는 [web.xml] 파일에서 필터 클래스를
//필터로 등록하고 필터가 동작되기 위한 URL 패턴 정보를 매핑 처리
//클라이언트가 요청하는 "모든" 웹프로그램에 대해 실행 "전" 리퀘스트 메세지의 몸체부에 저장되어
//전달되는 문자값에 대한 문자형태(캐릭터셋)를 변경하는 필터 클래스 - 인코딩 필터
public class EncodingFilter implements Filter {
//변경할 캐릭터셋을 저장하기 위한 필드
private String encoding;
//필터 클래스로 객체가 생성된 후 가장 먼저 1번만 호출되는 메소드 - 필터 객체의 초기화 작업
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//encoding="utf-8";
//FilterConfig.getInitParameter(String name) :
//=>[web.xml] 파일의 init-param 엘리먼트로 제공되는 값을 얻어와 반환하는 메소드
encoding = filterConfig.getInitParameter("encoding");
}
//요청 웹프로그램 실행 전 또는 후에 동작될 명령을 작성하는 메소드
//=> 등록된 URL 패턴의 웹프로그램 실핸 전에 자동 호출되는 메소드
//실행 전에 동작될 ServletRequest객체와 ServletResponse객체를 WAS에게 제공받음
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//작성순서1.
//웸프로그램 실행 전에 동작될 명령 작성 - 리퀘스트 메시지의 정보 변경
//=> "utf-8"라고 직접 작성하면 확장성이 떨어지므로 [web-xml]의 init-param 엘리먼트 이용하기
if(request.getCharacterEncoding()==null || !request.getCharacterEncoding().equalsIgnoreCase(encoding)){
request.setCharacterEncoding(encoding);
}
//작성순서2.
//FilterChain.doFilter(ServletRequest request, ServletResponse response):
//=> 요청 웹프로그램과 연결하여 실행되도록 설정하는 메소드
chain.doFilter(request, response); //요청 웹프로그램 실행
////작성순서3.
//웸프로그램 실행 후에 동작될 명령 작성 - 리스폰즈 메시지의 정보 변경
//response.setCharacterEncoding("text/html; charset=utf-8");
//응답결과가 xml, json 다양하게 제공할 수 있으므로 위의 명령은 작성 안함
}
}
02. web.xml - 매핑처리
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>" xmlns="<http://xmlns.jcp.org/xml/ns/javaee>" xsi:schemaLocation="<http://xmlns.jcp.org/xml/ns/javaee> <http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd>" id="WebApp_ID" version="4.0">
<display-name>mvc</display-name>
🔥<!-- context-param : 모든 웹프로그램에게 값을 제공하기 위한 엘리먼트
(특정 누구 하나의 프로그램만 제공하는 것이 아님!!) -->
🔥<!-- 즉, JSP이든 서블릿이든 모두에게 전달!!! -->
🔥<!-- vs init-param : 특정 웹프로그램에게 필요한 값을 제공하기 위한 엘리먼트로 사용
filter안에 넣어 사용 or
servlet안에 넣어 사용 ..등등 -->
<context-param>
<param-name>name</param-name>
<param-value>홍길동</param-value>
</context-param>
<!-- filter : 필터 클래스를 필터로 등록하기 위한 엘리먼트 -->
<!-- => servlet 엘리먼트 선언 전에 작성하는 것을 권장 -->
<filter>
<filter-name>encoding filter</filter-name>
<filter-class>xyz.itwill.filter.EncodingFilter</filter-class>
🔥<!-- init-param : 특정 웹프로그램(EncodingFilter클래스)에게
필요한 값을 제공하기 위한 엘리먼트로 사용 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<!-- filter-mapping-mapping : 필터가 실행되기 위한 요청 웹프로그램의 URL 패턴을 등록하기 위한 엘리먼트 -->
<filter-mapping>
<filter-name>encoding filter</filter-name>
<!-- 클라이언트의 모든 웹프로그램 요청에 대한 필터가 실행되도록 URL 패턴 등록 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- servlet : 서블릿 클래스를 웹프로그램(서블릿)으로 등록하기 위한 엘리먼트 -->
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>xyz.itwill.mvc.ControllerServlet</servlet-class>
🔥<!-- init-param : 서블릿 클래스에 필요한 값을 제공하기 위한 엘리먼트 -->
<init-param>
<param-name>configFile</param-name>
<param-value>/WEB-INF/model.properties</param-value>
</init-param>
<!-- load-on-startup : WAS 실행시 서블릿 클래스를 서블릿 객체로 생성하기 위한 엘리먼트 -->
<!-- => 클라이언트의 요청 없이 WAS 실행시 서블릿 객체를 미리 생성 - init() 메소드가 자동 호출되어 초기화 작업 -->
<!-- => 엘리먼트값은 0 이상의 정수값으로 설정하며 정수값이 작을수록 먼저 서블릿 객체로 생성 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet-mapping : 웹프로그램(서블릿)에 URL 패턴을 등록하기 위한 엘리먼트 -->
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
</welcome-file-list>
</web-app>
반응형
'jsp' 카테고리의 다른 글
[jsp] 28. JSTL(Java Standard Tag Library) (0) | 2024.07.18 |
---|---|
[jsp] 27. EL 커스텀태그 @taglib (0) | 2024.07.17 |
[jsp] 25. EL의 내장객체 (0) | 2024.07.16 |
[jsp] 24. EL(Expression Language)의 개념 (0) | 2024.07.15 |
[jsp] 23. 웹사이트 제작법9_ 회원 관리 페이지 제작 (feat. JSP) (0) | 2024.07.15 |