web.xml
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
version="3.1">
<!-- <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-list> -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>_ch16.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>EUC-KR</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>test2</servlet-name>
<servlet-class>test2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test2</servlet-name>
<url-pattern>/test2</url-pattern>
</servlet-mapping>
</web-app>
|
|
FilterForm.jsp
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%--실행되기 전에 요청해야하는 것... EUC-KR / UTF-8 설정 후 들어감 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>필터예제</title>
</head>
<body>
한글이름 : <input type = "text" name = "name">
<input type = "submit" value = "확인">
</form>
</body>
</html>
|
|
FilterProcess.jsp
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
이름은 ${param.name}입니다.
</body>
</html>
|
|
post 요청인 경우 서버로 보내는 데이터는 메시지 바디에 있는데 서블릿에서 이 데이터를 꺼내려면 getParameter()를 호출해야 한다.
이 경우 한글이 깨지는 현상이 나타나서 해결하기 위해 request.setCharacterEncoding("euc-kr");을 사용했다.
각 서블릿 마다 위의 코드를 작성하는 것이 매우 번거러워 서블릿 필터를 이용해서 간단히 처리해 보자
* 필터 만들기
1. javax.servlet.Filter 인터페이스를 구련해야 한다
2. init()
필터 객체가 생성되고 나서 주비 작업을 위해 딱 한 번 호출된다.
Servlet 인터페이스의 init()와 같은 용도이다.
이 메서드의 매개변수는 FilterConfig 객체다
이 객체르 통해서 필터 초기화 매개 변수의 값을 꺼낼 수 있다.
3. doFilter()
필터와 연결된 URL에 대해 요청이 들어오면 doFilter()가 호출된다.
이 메서드에 필터가 할 일을 작성하면 됩니다.
public void doFilter(ServletRequest request, ServletResponse response, FilterChain nextFilter) throws IOException, ServletException)
//서블릿이 실행되기 전에 해야 할 작업
다음 필터를 호출한다. 더 이상 필터가 없다면 서블릿의 service가 호출된다.
nextFilter.doFilter(request, response);
// 서블릿을 실행한 후 , 클라이언트에게 응답하기 전에 해야할 작업
1) 매개변수 nextFilter는 다음을 가리킨다.
2) nextFilter.doFilter(request, response);는 다음 필터를 호출한다. 더 이상 필터가 없다면 내부적으로 서블릿의 service()를 호출한다.
3) 만약 서블릿이 실행되기 전에 처리할 작업이 있다면 nextFilter.doFilter(request, response);전에 작성하자
4) 만약 서블릿이 실행된 후에 처리할 작업이 있다면 nextFilter.doFilter(request, response);후에 작성하자
4. destroy()
서블릿 컨테이너는 우베 애플리케이션을 종료하기 전에 필터들에 대해 destroy()를 호출하여 마무리 작업을 할 수 있는 기회를 준다.
필터 배치
1. web.xml
2. 애노테이션 사용
@WebFilter(urlPattern="/*", initParams = {@WebInitParam(name="encoding", value="euc-kr")})
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package _ch16;
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;
@WebFilter("/CharacterEncodingFilter")
public class CharacterEncodingFilter implements Filter {
FilterConfig config;
public CharacterEncodingFilter() {
}
public void destroy() {
System.out.println("필터의 destroy()");
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
/*
서블릿이 실행되기 전에 메시지 바디의 문자 집합을 먼저 설정하기 위해
nextFilter.doFilter(request, response);호출 전에
request.setCharacterEncoding(config.getInitParameter("encoding"));을
먼저 호출
*/
System.out.println("필터의 doFilter()");
request.setCharacterEncoding(config.getInitParameter("encoding"));
chain.doFilter(request,response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("필터의 init()");
this.config = fConfig;
}
}
|
|
필터 init() 실행
config : web.xml 정보를 다 가지고 있음
-> dofilter 실행 chain 실행

reloading 시 destroy
'IT > JSP' 카테고리의 다른 글
| [JSP] MVC 패턴으로 만든 게시판 01 - net.board.action 패키지 (0) | 2019.05.28 |
|---|---|
| [JSP] 게시판 (0) | 2019.05.28 |
| [JSP]파일 업로드(미완성) (0) | 2019.05.24 |
| [AJAX] 에이잭스 (0) | 2019.05.21 |
| [JSP] core ex 01 (0) | 2019.05.20 |