구조설명 : A 와 Z사이에 여러가지 FILTER 와 WRAPPER CLASS 가 존재한다.
----------------------------------------------------------------------------------------------
A JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="<%=request.getContextPath()%>/wrapperTestServlet.do">
회원 ID : <input type="text" name="mem_id"><br><br>
회원이름 : <input type="text" name="mem_name"><br><br>
패스워드 : <input type="password" name="mem_pass"><br><br>
<input type="submit" value="전송">
<input type="reset" value="취소">
</form>
</body>
</html>
----------------------------------------------------------------------------------------------
package kr.or.ddit.wrapper;
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.HttpServletRequest;
public class RequestWrapperFilter 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 {
//servletRequest 가 부모고,
//HttpServletRequest가 자식이다.
// RequestWrapperTest객체를 생성한다.
//만들어놓은 Wrapper를 불러서 데이터를 수정등의 작업을 거기서한다.
RequestWrapperTest requestWrapper =
new RequestWrapperTest((HttpServletRequest)request);
// 만약에 ResponseWrapper 객체도 등록하려면
//이 곳에서 같이 생성한다.
//필터의 체이닝에서 원래의 Request객체 대신 RequestWrapper 객체를
//인수로 넣어준다.
//doPost 나 doGet 메서드를 호출할 때 request , response 를 넣어주는데,
//거기에 request대신 requestWrapper 를 넣어주는것이다.
//chain.doFilter(request, response);
chain.doFilter(requestWrapper , response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
package kr.or.ddit.wrapper;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/*
-Wrapper ==> 요청(Request) 객체나 응답(Response) 객체를 포장하는것
==> 요청객체나 응답객체의 메서드들을 재정의할 때 사용한다.
요청 객체 포장 ==> HttpServletRequestWrapper 클래스를 상속받아서 작성한다.
- 응답객체 포장 ==> HttpServletResponseWrapper 클래스를 상속 받아서 작성한다.
-Wrapper 클래스를 작성한 후 작성된 Wrapper 클래스를 사용하려면 Filter 를 이용해서 Wrapper 클래스를 등록한다. -> 위에 A에서 객체를 생성해줬던것처럼
*/
//요청객체를 포장하기 연습
public class RequestWrapperTest extends HttpServletRequestWrapper {
//반드시 생성자가 필요하다.
public RequestWrapperTest(HttpServletRequest request) {
//생성자에서는 HttpServletRequest객체를 매개변수로 받아서 조상클래스
//생성자를 호출할 때 넘겨 주어야 한다.
//new RequestWrapperTest((HttpServletRequest)request);
//super는 조상클래스의 생성자를 의미한다. 생성자를 호출할때 받은
//request를 넣어준다.
super(request);
}
// HttpServletRequest 객체의 메서드 중에서 작업에 필요한 메서드를 재정의 한다.
// 예) 사용자의 IP주소를 문자열로 반환하는 getRemoteAddr() 메서드 재정의 하기
@Override
public String getRemoteAddr() {
String ip = super.getRemoteAddr(); // 원래의 명령을 실행한다.
if("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) {
return "주인님 반가워요";
}
return ip;
}
//예 ) getParameter() 메서드 재정의
// 회원 ID admin 은 사용불가 ==> 사용자가 admin 을 입력하면 '사용불가' 를 반환시킨다.
// 회원이름은 없거나 null 이면 '아무개' 반환
// password 는 모두 대문자로 변환해서 반환
//request.getParameter("mem_id");
@Override
public String getParameter(String name) {
//매개변수 'name' 에서 request 객체에서 보내온 데이터의 '파라미터변수명'이 들어온다.
String value = super.getParameter(name);
if("mem_id".equals(name)) {
//회원 ID 에 대한 처리
if("admin".equals(value)) {
return "사용불가";
}
}else if("mem_name".equals(name)) {
//회원 이름에 대한 처리
if(value==null || "".equals(value.trim())) {
return "아무개";
}
}else if ("mem_pass".equals(name)) {
if(value != null) {
return value.toUpperCase();
}
}
return value;
}
}
----------------------------------------------------------------------------------------------
Z <form action="<%=request.getContextPath()%>/wrapperTestServlet.do">
A에서 이쪽으로 연결해준다.
package kr.or.ddit.wrapper;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class WrapperTstServlet
*/
@WebServlet("/wrapperTestServlet.do")
public class WrapperTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String remoteIp = request.getRemoteAddr(); // 접속자 IP 주소를 구한다.
System.out.println("접속한 ip : " + remoteIp);
String memId = request.getParameter("mem_id");
String memName = request.getParameter("mem_name");
String memPass = request.getParameter("mem_pass");
System.out.println("ID : " + memId );
System.out.println("Name : " + memName );
System.out.println("password : " + memPass);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
---------------------------------------------------------------------------------------------
<?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" 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>servletTest</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>IPCheckFilter</filter-name>
<filter-class>kr.or.ddit.filter.IPCheckFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>IPCheckFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Filter01</filter-name>
<filter-class>kr.or.ddit.filter.FilterTest01</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>Filter02</filter-name>
<filter-class>kr.or.ddit.filter.FilterTest02</filter-class>
<init-param>
<param-name>tester</param-name>
<param-value>홍길동</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter02</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> -->
<filter>
<filter-name>customEncoding</filter-name>
<filter-class>kr.or.ddit.filter.CustomEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>customEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>servletTest08</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest08</servlet-class>
<init-param>
<param-name>start</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>end</param-name>
<param-value>50</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletTest08</servlet-name>
<url-pattern>/servletTest08.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletTest01</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletTest01</servlet-name>
<url-pattern>/servletTest01.do </url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletTest05</servlet-name>
<servlet-class>kr.or.ddit.basic.ServletTest05</servlet-class>
<init-param>
<param-name>AdminEmail</param-name>
<param-value>admin@naver.com</param-value>
</init-param>
<init-param>
<param-name>userName</param-name>
<param-value>홍길동</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletTest05</servlet-name>
<url-pattern>/servletTest05.do</url-pattern>
</servlet-mapping>
<context-param>
<param-name>myContext</param-name>
<param-value>연습용 컨텍스트 파라미터 값</param-value>
</context-param>
<servlet>
<description></description>
<display-name>ResponseTest01</display-name>
<servlet-name>ResponseTest01</servlet-name>
<servlet-class>kr.or.ddit.reqres.copy.RequestTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResponseTest01</servlet-name>
<url-pattern>/responseTest01.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>wrapperFilter</filter-name>
<filter-class>kr.or.ddit.wrapper.RequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>wrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
댓글
댓글 쓰기