Package com.cawring.simple

Source Code of com.cawring.simple.Simple

package com.cawring.simple;

import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cawring.simple.route.RouteVO;
import com.cawring.simple.route.Routes;

/**
*
* <pre>
* 클래스명 : 심플 서블릿 시작
* 패키지명 : com.cawring.simple
* 파일명   : Simple.java
* 설명     :
* 서블릿 로드
* </pre>
* @Author    : 백승건
* @Date      : 2014. 3. 12.
* @Version   : v.1.0.0 - 2014. 3. 12. 최초작성
*/
public class Simple extends HttpServlet {

  private static final long serialVersionUID = 201403051911L;
 
  private static final Logger log = Logger.getLogger(Simple.class.getName());
 
  /**
   * GET
   */
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGenerator(req, resp);
  }

  /**
   * POST
   */
  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGenerator(req, resp);
  }
 
  /**
   *
   * <pre>
   * 메소드명     : 호출 및 응답을 대응한다.
   * 메소드작성일 : 2014. 3. 12.
   * 메소드설명   :
   * GET, POST method에 대한 url 정보가
   * </pre>
   * @param req   : request
   * @param resp  : response
   */
  public void doGenerator(HttpServletRequest req, HttpServletResponse resp)
  {
    try {
     
      /* 인코딩 선언 */
      resp.setContentType("text/html; charset=UTF-8");
     
      /* 변수선언 */
      String method = req.getMethod();
      String url    = req.getRequestURI();
     
      /* routes 정보를 가지고 온다. */
      Routes routes = Routes.getInstance();
      RouteVO vo    = routes.get(method, url);
     
      /* 해당 컨트롤러 접근 */
      Class<?> controller = Class.forName(vo.getController());
      Object instance = controller.newInstance();
     
      /* 컨트롤러 구조 */
      List<Class<?>> clazzes = new ArrayList<Class<?>>();
      clazzes.add(instance.getClass());          /* controller */
      clazzes.add(instance.getClass().getSuperclass())/* extend */
     
      /* request, response 인스턴스변수 호출 */
      Field requestField  = null/* request */
      Field responseField = null; /* response */
     
      /* 클래스 파일을 검사한다. */
      for(Class<?> clazz : clazzes)
      {
        /* 클래스에 인스턴스 변수를 모두 담는다. */
        Field[] fields = clazz.getDeclaredFields();
       
        /* 인스턴스변수를 검사한다. */
        for(Field field : fields)
        {
          /* 응답, 전송 필드를 찾는다. */
          if("request".equals(field.getName())) requestField = field;
          if("response".equals(field.getName())) responseField = field;
         
          /* 필드 정보의 값을 있는 경우 */
          if(requestField != null && responseField != null)
          {
            /* 해당 필드의 setter를 찾아 메소드 선언을 한다. */
            Method setRequest  = clazz.getDeclaredMethod("setRequest", HttpServletRequest.class);
            Method setResponse = clazz.getDeclaredMethod("setResponse", HttpServletResponse.class);
           
            /* 수정 권한을 얻는다. */
            setRequest.setAccessible(true);
            setResponse.setAccessible(true);
           
            /* 값을 넣는다. invoke */
            setRequest.invoke(instance,req);
            setResponse.invoke(instance,resp);
           
            /* 더이상 찾을 필요 없음 */
            break;
          }
        }
      }
     
      /* 메소드 실행 */
      Method def = instance.getClass().getMethod(vo.getDef());
      def.invoke(instance);
     
    } catch (Exception e) {
      log.severe("routes 정보에 문제가 발생했습니다.");
    }
  }

 
}
TOP

Related Classes of com.cawring.simple.Simple

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.