2020.12.04 고급자바 (정리하기) wrapper 기초

구조설명 : 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;

}

}

----------------------------------------------------------------------------------------------


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

댓글