실습:필터 (web.xml 이용)

JSP 2016. 3. 18. 16:36

필터 실습 : 방법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);

    }

}


null이 출력되던 jsp를 위와 같이 필터를 만든 뒤 실행시키면 아래와 같이 아무것도 출력되지 않는다.

  • 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
Posted by netyhobby
,