JSP/Servlet – 응답 래퍼 클래스를 작성하는 방법

 

요청 래퍼 클래스가 HttpServletRequestWrapper 클래스를 상속했다면 응답 래퍼 클래스는 HttpServletResponseWrapper클래스를

 

상속해야 합니다. 그리고 응답 래퍼 클래스는 응답 객체(response 객체)를 포장해야 합니다.

 

한번 응답 래퍼 클래스를 작성하는 예제를 만들어 봅시다.

 

 

위와 같이 예제를 구성합니다.

 

CookieLowerCaseResponseWrapper.java

 

package myfilter;

 

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServletResponseWrapper;

 

public class CookieLowerCaseResponseWrapper extends HttpServletResponseWrapper{

    private HttpServletResponse response;

    

    public CookieLowerCaseResponseWrapper(HttpServletResponse response) {

        super(response);//부모 클래스 생성자 호출

        this.response = response;//응답 객체를 멤버 변수에 저장

    }

    //실제 래퍼 클래스가 하는 부분

    //단순히 모든 글자를 소문자로 바꿔준다.

    public void addCookie(Cookie cookie){

        String value = cookie.getValue();

        String newValue = value.toLowerCase();

        cookie.setValue(newValue);

        response.addCookie(cookie);

    }

    

}

 

 

CookieLowerCaseFilter.java

 

package myfilter;

 

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.http.HttpServletResponse;

 

public class CookieLowerCaseFilter implements Filter{

 

    

    @Override

    public void init(FilterConfig arg0) throws ServletException {

        // TODO Auto-generated method stub

        

    }

 

    @Override

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException {

        // TODO Auto-generated method stub

        CookieLowerCaseResponseWrapper responseWrapper =

                new CookieLowerCaseResponseWrapper((HttpServletResponse)response);

        chain.doFilter(request, responseWrapper);//응답 래퍼 클래스를 넘겨줌        

    }

 

    @Override

    public void destroy() {

        // TODO Auto-generated method stub

        

    }

 

}

 

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<display-name>ch11_jsp_wrapper2</display-name>

<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>

<filter>

<filter-name>cookie-lower-filter</filter-name>

<filter-class>myfilter.CookieLowerCaseFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>cookie-lower-filter</filter-name>

<url-pattern>*</url-pattern>

</filter-mapping>

</web-app>

 

test1.jsp

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%

    Cookie cookie = new Cookie("CART", "Lemon, Apple, Chocolate");

    response.addCookie(cookie);

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

    쿠키가 저장되었습니다.

</body>

</html>

 

test2.jsp

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

    쿠키 가져오기<BR>

    CART = ${cookie.CART.value }

</body>

</html>

 

 

실행 화면

첫 번째 화면입니다. 쿠키가 정상적으로 저장되었다고 나오네요.

주소를 test2.jsp로 바꾸면 쿠키값을 가져오게됩니다.

하지만 응답 래퍼 클래스에 의해서 모든 값이 소문자로 변하게 됩니다.

블로그 이미지

가카리

프로그래밍, 취업 및 직장생활, 주식 부동산 재테크 전문 블로그

댓글을 달아 주세요