BaseController : 자바에서의 DB 헬퍼와 같은 것
Mybatis 쓰면서 안쓰게됨 (preparestatement, resultset, connection)
스프링 쓸때 안쓰지만 동작 원리를 알기 위해 핵심적으로 알아야함.
JAVA는 각기 다른 DB에 대응하기 위해 JDBC를 만들어둠 (동일한 방법으로 쿼리 실행)
절차가 복잡하고 관련된 객체를 해제해줘야하는게 번거롭다.
외부 XML로 빼서 관리해주는 마이바티스를 사용.
마이바티스 안쓰는 곳도 있음 → 금융권. xml에 텍스트로 쿼리 노출되니까 안좋음.
basecontroller 목적 : 모든 서블릿 클래스에서 반복되는 코드를 재사용 가능한 형태로 묶어서 작업의 효율성을 높이기 위해 사용
package study.jsp.model2.helper;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
//import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// --> URL에 노출되는 @WebServlet은 자식 클래스에서 정의하도록 하고,
// 이 클래스는 추상클래스로 변경한다.
//@WebServlet("/BaseController")
public abstract class BaseController extends HttpServlet {
private static final long serialVersionUID = 2666361012404301949L;
public BaseController() {
// 실행되는 주체를 확인하기 위해서 클래스 이름을 콘솔에 출력한다.
String className = this.getClass().getName();
System.out.println(className);
}
/** Get 방식 요청이 들어오면 실행된다. */
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 공통 처리 메서드로 제어를 이동시킨다.
this.pageInit(request, response);
}
/** Post 방식 요청이 들어오면 실행된다. */
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 공통 처리 메서드로 제어를 이동시킨다.
this.pageInit(request, response);
}
/**
* Get, Post 방식에 상관 없이 공통 처리되는 메서드
* @param request - JSP request 내장 객체
* @param response - JSP response 내장 객체
*/
private void pageInit(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 페이지 형식 지정하기
response.setContentType("text/html; charset=utf-8");
// 파라미터 처리 형식 지정하기
request.setCharacterEncoding("utf-8");
// View의 이름
String view = doRun(request, response);
// 획득한 View가 존재한다면 화면 표시
if (view != null) {
// View를 생성한다.
view = "/WEB-INF/views/" + view + ".jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(view);
dispatcher.forward(request, response);
}
}
/** 웹 페이지 구성에 필요한 처리를 수행한 후, View의 이름을 리턴한다.
* 이 메서드를 추상화 한다.
* 이 클래스를 상속받는 자식 클래스는 반드시 이 메서드를 재정의 해야 한다.
*/
public abstract String doRun(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException;
}
package study.jsp.model2.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import study.jsp.model2.helper.BaseController;
@WebServlet("/hello")
public class Hello extends BaseController{
/**
*
*/
private static final long serialVersionUID = 6519981277847414078L;
@Override
public String doRun(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String view = "hello";
return view;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello JSP</title>
</head>
<body>
<h1>Hello Base Controller</h1>
</body>
</html>
모델 2의 기본패턴 = BaseController
모델2 ≠ spring