필터 실습 : 방법1. web.xml 이용
1. 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"
version="3.1">
<filter>
<filter-name>NullParameter</filter-name>
<filter-class>com.model.NullParameterFilter</filter-class>
<init-param>
<param-name>parameterNames</param-name>
<param-value>id,name</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>NullParameter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
</web-app>
2. nullParam.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Null Parameter 테스트</title>
</head>
<body>
<ul>
<li>id 파라미터 : <%= request.getParameter("id") %></li>
<li>name 파라미터 : <%= request.getParameter("name") %></li>
<li>member 파라미터 : <%= request.getParameter("member") %></li>
</ul>
</body>
</html>
3. NullParameterFilter.java
package com.model;
import java.io.IOException;
import java.util.StringTokenizer;
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.http.HttpServletRequest;
public class NullParameterFilter implements Filter {
private String[] parameterNames = null;
@Override
public void init(FilterConfig config) throws ServletException {
String names = config.getInitParameter("parameterNames");
StringTokenizer st = new StringTokenizer(names, ",");
parameterNames = new String[st.countTokens()];
for (int i = 0; st.hasMoreTokens(); i++) { // hasMoreTokens() : 데이터가 있으면 true값, 없으면 false값 반환하는 메서드
parameterNames[i] = st.nextToken();
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
NullParameterRequestWrapper requestWrapper =
new NullParameterRequestWrapper((HttpServletRequest) request);
requestWrapper.checkNull(parameterNames);
chain.doFilter(requestWrapper, response);
}
@Override
public void destroy() {
}
}
4. NullParameterRequestWrapper.java
package com.model;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class NullParameterRequestWrapper extends HttpServletRequestWrapper {
// HttpServletRequestWrapper를 상속하는 NullParameterRequestWrapper를 정의.
private Map<String, String[]> parameterMap = null;
public NullParameterRequestWrapper(HttpServletRequest request) {
super(request);
parameterMap =
new HashMap<String, String[]>(request.getParameterMap());
}
public void checkNull(String[] paramNames) {
for(int i=0; i < paramNames.length; i++) {
if(!parameterMap.containsKey(paramNames[i])) {
String[] values = new String[]{""}; // 파라미터가 없을 경우엔 ""를 담아줌
parameterMap.put(paramNames[i], values); // 업데이트된 값을 담음.
}
}
}
//checkNull을 통해서 파라미터들을 체크해서 값을 values에서 업데이트를 해준다.
// 업데이트 된 값을 해당 메서드가 호출했을 때 업데이트 된 값을 전달하도록 아래에서 오버라이드로 기능 구현
// 그냥 이렇게 전달한다고만 보자.
@Override
public String getParameter(String name) {
String[] values = getParameterValues(name); // getParameterValues
if(values != null && values.length > 0) {
return values[0]; // 첫번째 값을 리턴하게끔 일단 구현
}
return null;
}
@Override
public Map<String, String[]> getParameterMap() {
return parameterMap;
}
@Override
public Enumeration<String> getParameterNames() {
return Collections.enumeration(parameterMap.keySet());
}
@Override
public String[] getParameterValues(String name) {
return (String[]) parameterMap.get(name);
}
}
- id 파라미터 :
- name 파라미터 :
- member 파라미터 :
'JSP' 카테고리의 다른 글
ServletContextListener 구현 (0) | 2016.03.21 |
---|---|
필터 (0) | 2016.03.18 |
커스텀 태그 (0) | 2016.03.17 |
실습: 자바빈을 코어태그로 불러오기 (0) | 2016.03.16 |
JSTL (JSP Standard Tag Library) (0) | 2016.03.15 |