JSP_7강_1_서블릿 매핑으로 DB연동

열라뽕따히·2024년 3월 22일

JSP

목록 보기
35/43

이전 JSP를 실행할 시 여러 서블릿 파일을 생성했다면 이번에는 FrontController 라는 인터페이스를 선언하여

web.xml에 서블릿으로 매핑할 코드 작성


=============================코드=============================

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>09_Member_MVC2</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  
  
  <!-- 서블릿 매핑(N:1) -->
  <servlet>
  		<servlet-name>FrontController</servlet-name>
  		<servlet-class>com.member.controller.FrontController</servlet-class>
  </servlet>
  
  <servlet-mapping>
  		<servlet-name>FrontController</servlet-name>
  		<url-pattern>*.go</url-pattern>
  </servlet-mapping>
  
  
</web-app>



request와 response를 매개변수로 받을

인터페이스 Action 생성


=============================코드=============================

package com.member.action;

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

public interface Action {
	
	String execute(HttpServletRequest request, HttpServletResponse response);   // 추상메서드

}



서블릿을 담을 FrontController 클래스 생성

이전 JSP로 서블릿을 만들었던 틀과 똑같이 똑같이 만들면 됨!

  1. 한글 깨짐 방지
  2. 프로젝트명/파일명(*.go)라는 문자열을 반환해주는 메서드 생성
  3. 현 프로젝트명을 문자열로 반환해주는 메서드 생성
  4. mapping 해줄 서블릿 문자 값을 가져올 변수 생성
  5. 인터페이스 Action 생성

=============================코드=============================

package com.member.controller;

import java.io.IOException;

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

import com.member.action.Action;
import com.member.action.MemberListAction;

public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			// 한글 깨짐 방지 설정 작업 진행
			request.setCharacterEncoding("UTF-8");
			response.setContentType("text/html; charset = UTF-8");
			
			// getRequestURI() : "/프로젝트명/파일명(*.go)" 라는 문자열을 반환해주는 메서드
			String uri = request.getRequestURI();
			System.out.println("URI >>> " + uri);
			
			// getContextPath() : 현재 프로젝트명을 문자열로 반환해주는 메서드
			String path =  request.getContextPath();
			System.out.println("Path >>> " + path);
			
			String command = uri.substring(path.length() + 1);  
            // 09_Member_MVC2/select.go =>16자리 이후를 뽑아냄(select.go 로 이동!)
			System.out.println("Command >>> " + command);
			
         // Action은 인터페이스
			Action action = null;
            
            if(command.equals("select.go")) {
				action = new MemberListAction();  // MemberListAction은 생성자! => 클래스를 만들면 됨
			}



인터페이스 Action을 구현할

MemberListAction 클래스 생성

Action 인터페이스를 구현하기 위해서는 오버라이딩이 필요함!


=============================코드=============================

package com.member.action;

import java.util.List;

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

import com.member.model.MemberDAO;
import com.member.model.MemberDTO;

public class MemberListAction implements Action {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) {
		// 요청 : 회원 전체 리스트를 보여달라고 요청
		// 응답 : member 테이블에서 전체 회원 목록을 조회하여 view page로 이동시키는 비즈니스 로직
		
		MemberDAO dao = MemberDAO.getInstance();
		
		// 전체 회원 목록을 조회하는 메서드 호출
		List<MemberDTO> memberList = dao.getMemberList();
		
		// member 테이블에서 가져온 전체 회원 목록을 view page로 이동
		request.setAttribute("List", memberList);
		
		return "view/member_list.jsp";
	}

}

※ 주의점 : 이전 JSP에서는 서블릿에 request.getRequestDispatcher로 페이지 이동 경로를 설정하였으나
인터페이스를 구현할 클래스에서 생성할 경우 return 값인 "view/member_list.jsp"에 request와 response 매개변수를 담음



다시 FrontController 클래스로 가서

MemberListAction 클래스의 주소값을 action 변수명에 저장하자!


=============================코드=============================

package com.member.controller;

import java.io.IOException;

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

import com.member.action.Action;
import com.member.action.MemberListAction;

public class FrontController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			// 한글 깨짐 방지 설정 작업 진행
			request.setCharacterEncoding("UTF-8");
			response.setContentType("text/html; charset = UTF-8");
			
			// getRequestURI() : "/프로젝트명/파일명(*.go)" 라는 문자열을 반환해주는 메서드
			String uri = request.getRequestURI();
			System.out.println("URI >>> " + uri);
			
			// getContextPath() : 현재 프로젝트명을 문자열로 반환해주는 메서드
			String path =  request.getContextPath();
			System.out.println("Path >>> " + path);
			
			String command = uri.substring(path.length() + 1);  // 09_Member_MVC2/select.go =>16자리 이후를 뽑아냄(select.go 로 이동!)
			System.out.println("Command >>> " + command);
			
			Action action = null;
			
			if(command.equals("select.go")) {
				action = new MemberListAction();  // MemberListAction은 생성자! => 클래스를 만들면 됨
			}

// ---------------------여기서부터 작성--------------------- 
			String viewPage = action.execute(request, response);
			
			request.getRequestDispatcher(viewPage).forward(request, response);
	}
	
}



main.jsp에 실행해보자!


=============================실행=============================

전체 회원 목록 클릭

전체 회원이 출력됨

0개의 댓글