Java 프레임워크 만들기 - JSP

자바 서블릿으로 리퀘스트 매핑 (클래스 동적 로딩) 2 - Java Servlet(DispatcherServlet) Request Mapping, 이클립스(Eclipse)

carrotweb 2021. 4. 17. 21:29
728x90
반응형

6. "TestService1.java"에 "ITestService.java" 인터페이스가 구현(implements)되도록 코드를 수정합니다.

public class TestService1 implements ITestService {

"TestService1.java"에 "ITestService.java"의 "doProcess"메서드를 구현합니다.

@Override
public RequestDispatcher doProcess(HttpServletRequest request, HttpServletResponse response) {
	request.getSession().setMaxInactiveInterval(1000);	
	TestSessionCounter testSessionCounter = TestSessionCounter.getInstance();
	request.setAttribute("sessionTotalCount", testSessionCounter.getTotalCount());
	request.setAttribute("sessionCount", testSessionCounter.getCount());
	request.setAttribute("name", "철수");

	RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/testservlet.jsp");
	return requestDispatcher;
}

오버라이드(Override) 처리하는 방법(carrotweb.tistory.com/53)을 참고하시기 바랍니다.

 

"TestService1.java"에 "process"메서드의 내용과 "RequestDispatcher"를 추가합니다.

 

7. 읽어 들인 프로퍼티(properties)를 "Iterator(이터레이터)"를 이용하여 "Key"(Request URL) 값으로 "Value"(클래스가 속한 패키지와 클래스명)를 가져옵니다. 그리고 "Class.forName(String name)"메서드로 서비스(클래스)를 로드하고 인스턴스를 생성합니다. 그리고 인스턴스를 인터페이스("ITestService")로 형 변환하여 "RequestMappingMap"에 추가합니다.

Iterator<Object> keyIter = serviceHandlerMapping.keySet().iterator();
while (keyIter.hasNext()) {
	String url = (String) keyIter.next();
	String serviceClassName = serviceHandlerMapping.getProperty(url);
	try
	{
		Class<?> serviceClass = Class.forName(serviceClassName);
		Object serviceInstance = serviceClass.newInstance();
		ITestService service = (ITestService) serviceInstance;
		requestMappingMap.put(url, service);
		System.out.println("[RequestMapping] URL:" + url + "에 " + serviceClassName + "를 생성하여 매핑함");
	}
	catch (Exception e)
	{
		System.out.println("[RequestMapping] URL:" + url + "에 " + serviceClassName + "를 생성하지 못하여 매핑하지 못함");
		// InstantiationException, IllegalAccessException
		throw new ServletException(e);
	}
}

이전에 소개한 자바 클래스 동적 로딩하기(carrotweb.tistory.com/53)를 참고하시면 됩니다.

 

 

8. TestDispatcherServlet.java"에 "service"에서 "RequestMappingMap"에 매핑되어 있는 웹 요청(Request) URL이 있을 경우 매핑된 서비스(클래스)가 실행되도록 합니다.

ITestService service = (ITestService) requestMappingMap.get(requestURI);
if (null != service) {
	System.out.println("[RequestMapping] URL:" + requestURI + " 요청을 " + service + "로 실행함");
	requestDispatcher = service.doProcess(request, response);
} else {

 

9. "Servers"탭에서 "tomcat8"를 선택하고 "start"버튼(start the server)을 클릭합니다. 웹 브라우저에서 "http://localhost:8080/test2/test1.do"를 입력합니다.

 

"Console"탭을 클릭하면 프로퍼티를 읽어 맵에 추가되고 맵에서 찾아 실행한 것을 확인할 수 있습니다.

[Console]

TestDispatcherServlet init 실행
/com/home/project/test2/config/requestmapping.properties을 프로퍼티로 읽음
[RequestMapping] URL:/test1.do에 com.home.project.test2.service.TestService1를 생성하여 매핑함

[RequestMapping] URL:/test1.do 요청을 com.home.project.test2.service.TestService1@55246175로 실행함

 

728x90
반응형