본문 바로가기

JSP

(부록) java.lang.reflect

자바의 리플렉트 기능을 알아보자.

주로 메서드명이나 생성자명 등 에 접근할때 사용한다.

아래 예제를 통해 간단히 알아보자.


[ex] 해당클래스의 메서드명을 출력해보기
예제)     http://localhost:8282/프로젝트명/test.jsp?id=11&pw=22&addr=33&tel=44
예제)     http://localhost:8282/프로젝트명/test.jsp?id=11&pw=22&addr=33&tel=44

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ page import="com.joo.member.model.*" %>  
<%@ page import="java.util.*" %>
<%@ page import="java.lang.reflect.*" %>
<%
     Class c=Class.forName("com.joo.member.model.Member");
     Member member=(Member)c.newInstance();
    
     member.setId(request.getParameter("id"));
    
     for (Enumeration<String> names=request.getParameterNames() ; names.hasMoreElements() ;  ) {
          String paramName=names.nextElement();
         
          for( Method method : c.getDeclaredMethods()){
               String methodName=method.getName().toLowerCase();
         
               if(methodName.equals("set"+paramName)){
                    method.invoke(member,request.getParameter(paramName));    
                     // 메서드객체.invoke( 해당메서드가있는클래스객체, 파라미터?? ) :  메서드를실행함
               }
          }
     }
%>

<%=member.getId()%>

<%=member.getPw()%>

<%=member.getAddr()%>

<%=member.getTel()%>



[ex] reflect 패키지 살펴보기

import java.lang.reflect.*;


class A{
     public static void main(String args[]) throws Exception{
          Class c=B.class;
          B o=(B)c.newInstance();
          Method method=c.getDeclaredMethod("a",int.class);    // a라는 메서드명을 가져온다
 // 오버로딩에의한 구분으로 매개변수 자료형까지 두번째 인자에 기입한다.
          method.invoke(o,100);
     }
}


class B{
     void a(int v){
          System.out.println(v);
     }
}



 1. newInstance() 메서드로 객체화 시켜 메모리에 올려준다.
 2. Method method=c.getDeclaredMethod(메서드명, 파라미터타입) 메서드를 통해 메서드를 가져온다.
 3. method.invoke(o, 100) 불러온 메서드 실행




'JSP' 카테고리의 다른 글

ajax( jQuery )  (0) 2019.03.28
서블릿에서의 화면 이동  (0) 2019.03.27
JSP 액션태그 ( <jsp:useBean> )  (0) 2019.03.27
JSP 에러 페이지 설정  (0) 2019.03.27
JSP 경로 / 파일관련  (0) 2019.03.09