반응형
1. 필터 사용하기
1. 필터 사용하기
- 필터가 없는 경우
2. 필터 넣기
- 필터가 있는 경우 요청과 응답을 하기전에 필터를 거쳐서 진행
- 필터는 한 개 또는 여러 개 넣어줄 수 있음
3. 필터 실행
- 서블릿에서 필터를 거처 웹 페이지로 가게됨
- 추상객체에서 init(), doFilter(), destroy() 메소드를 상속받아서 구현하게됨
4. 필터 용도
예시) charset을 쓸때도 사용 가능
request.setCharacterEncoding("UTF-8");
5. 필터 만들기
6. 필터 만들기 실습
CharacterEncodingFilter.java
package spms.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 CharacterEncodingFilter implements Filter {
FilterConfig config;
@Override
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
@Override // 요청이 들어올 때마다 doFilter() 호출
public void doFilter(ServletRequest request, ServletResponse response, FilterChain nextFilter) throws ServletException, IOException {
//필터 처리 작업은 다음 필터로 전송 전에 작성
request.setCharacterEncoding(config.getInitParameter("encoding"));
//다음 필터로 전송하는 메소드
//다음 필터가 존재하지 않으면 서블릿의 service() 메소드 호출
nextFilter.doFilter(request, response);
}
@Override
public void destroy() {
}
}
7. 필터 적용하는 두 가지 방법
1) web.xml 이용
2) web.xml 방법 실습
MemberAddServlet.java 파일에서 48번째 라인 주석 처리
web.xml 파일에서 필터선언 부분과 필터 URL 매핑 부분 주석 처리
<?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_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>_06_JDBCServlet</display-name>
<!-- 컨텍스트 초기화 매개변수 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost/studydb?serverTimezone=UTC</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>study</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>study</param-value>
</context-param>
<!-- 필터 선언 -->
<!-- <filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>spms.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>-->
<!-- 필터 url 매핑 -->
<!-- /* : 모든 url 요청에 적용 -->
<!--<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>-->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
실행 화면 - 한글 깨져있음
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_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>_06_JDBCServlet</display-name>
<!-- 컨텍스트 초기화 매개변수 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost/studydb?serverTimezone=UTC</param-value>
</context-param>
<context-param>
<param-name>username</param-name>
<param-value>study</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>study</param-value>
</context-param>
<!-- 필터 선언 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>spms.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 필터 url 매핑 -->
<!-- /* : 모든 url 요청에 적용 -->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
실행 화면 - 한글이 잘 나오게됨
* 동일한 이름으로 회원을 추가하면 add화면에서 list 화면으로 이동이 안됨
3) 애노테이션으로 필터 지정 (자주 사용하지 않는 방법임)
4) 애노테이션 방법 실습
web.xml 파일 다시 주석 처리하고 CharacterEncodingFilter.java 파일에 애노테이션 추가
package spms.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.annotation.WebInitParam;
//애노테이션 방법
@WebFilter(
urlPatterns = "/*",
initParams = {
@WebInitParam(name = "encoding", value = "UTF-8")
}
)
public class CharacterEncodingFilter implements Filter {
FilterConfig config;
@Override
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain nextFilter) throws ServletException, IOException {
//필터 처리 작업은 다음 필터로 전송 전에 작성
request.setCharacterEncoding(config.getInitParameter("encoding"));
//다음 필터로 전송하는 메소드
//다음 필터가 존재하지 않으면 서블릿의 service() 메소드 호출
nextFilter.doFilter(request, response);
}
@Override
public void destroy() {}
}
실행 화면 - 한글이 잘 나오게됨
반응형
'👨💻 2. 웹개발_Back end > 2-4 JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] 5장 MVC 아키텍처 (2) - 뷰 분리 및 포워딩과 인클루딩 (0) | 2021.10.14 |
---|---|
[JSP & Servlet] 5장 MVC 아키텍처 (1) - MVC 이해하기 (0) | 2021.10.14 |
[JSP & Servlet] 4장 서블릿과 JDBC (3) - 리프래시와 서블릿 초기화 매개변수 (0) | 2021.10.14 |
[JSP & Servlet] 4장 서블릿과 JDBC (2) - HttpServlet으로 GET 요청 다루기 (0) | 2021.10.14 |
[JSP & Servlet] 4장 서블릿과 JDBC(1) - JDBC와 ODBC 구조 (0) | 2021.10.13 |
댓글