JSP/Servlet – 응답 메시지의 본체 내용을 변형하는 래퍼 클래스 만들기
2016/04/04 - [프로그래밍/JSP/Servlet] - JSP/Servlet – 응답 래퍼 클래스를 작성하는 방법 참고
HTTP 응답 메시지의 내용을 변형하는 방법입니다. 약간 복잡하기는 하지만
래퍼 클래스 필터 클래스 순으로 코드를 보면 이해가 되실 겁니다.
핵심은 StringWriter 클래스인데 다른 Writer클래스와는 달리 파일이나 브라우저에 출력하는 것이 아닌
객체 내부에 버퍼로 출력하는 것을 알아야합니다. 즉 버퍼에 먼저 데이터를 저장 후 버퍼의 값을 바꾼 다음에
화면에 출력하는 순서가 되겠습니다.
위와 같이 필터 클래스, 래퍼 클래스, 그리고 테스트 JSP 파일을 구성합니다.
ContentWordReplaceResponseWrapper.java
package myfilter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class ContentWordReplaceResponseWrapper extends HttpServletResponseWrapper{
HttpServletResponse response;
PrintWriter newWriter;
StringWriter strWriter;
public ContentWordReplaceResponseWrapper(HttpServletResponse response) {
super(response);
this.response = response;
}
public PrintWriter getWriter() throws IOException{
if(newWriter == null){
strWriter = new StringWriter();
newWriter = new PrintWriter(strWriter);
}
return newWriter;
}
public void modifyAndSend() throws IOException{
String content = strWriter.toString();//버퍼에 있는 데이터를 가져옴
String newContent = content.replaceAll("GaKaRi", "가카리");//값을 바꿈
PrintWriter writer = response.getWriter();//변형된 값을 웹브라우저로 전송하기 위해.
writer.print(newContent);//여기서 웹브라우저에 전송함
}
}
ContentWordReplaceFilter.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 ContentWordReplaceFilter 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
ContentWordReplaceResponseWrapper responseWrapper =
new ContentWordReplaceResponseWrapper((HttpServletResponse) response);
chain.doFilter(request, responseWrapper);
//필터가 끝난 뒤에 아래 메소드를 실행해야 StringWriter 객체의
//내부 버퍼에 값들이 저장됩니다.
responseWrapper.modifyAndSend();
}
@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_wrapper3</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>word-replace-filter</filter-name>
<filter-class>myfilter.ContentWordReplaceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>word-replace-filter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
</web-app>
test.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>
GaKaRi 님이 입장하셨습니다. <BR>
</body>
</html>
실행 화면
원래 GaKaRi였는데 가카리로 변했음을 알 수 있습니다.
'프로그래밍 > JSP Servlet' 카테고리의 다른 글
JSP/Servlet – 모델 1로 웹애플리케이션 설계하기 (0) | 2016.04.21 |
---|---|
JSP/Servlet – 데이터베이스에 있는 데이터 수정하기 (0) | 2016.04.17 |
JSP/Servlet – 데이터베이스에 데이터 입력하기 (0) | 2016.04.10 |
JSP/Servlet – 데이터베이스에서 값 읽어오기 (0) | 2016.04.10 |
JSP/Servlet – 응답 래퍼 클래스를 작성하는 방법 (0) | 2016.04.04 |
JSP/Servlet – 요청 래퍼 클래스 작성하기 (0) | 2016.03.21 |
JSP/Servlet – 필터 체인의 방향 바꾸기 (0) | 2016.03.17 |
JSP/Servlet - 필터 클래스의 init 메소드와 destroy 메소드 활용 (0) | 2016.03.16 |