JDBC 와 MYSQL 연동하기 5) FrontController 패턴 적용하기

작성: 2021.04.16

수정: 2021.04.16

읽는시간: 00 분

Programming/JPA ⁄ Spring

반응형

@Controller

@RequestMapping 어노테이션을 이용한 FrontController 패턴을 적용해 보았습니다.

1
  1. 적용하기 앞서 FrontController 패키지가 준비 되어 있어야 합니다.

github.com/Shane-Park/jspClass/tree/master/alba/alba/src/main/java/kr/or/ddit/mvc

위의 링크에서 해당 패키지 코드들을 다운받을 수 있습니다.

  1. web.xml에 해당 컨트롤러를 등록해주어야 합니다.
    <servlet>
        <servlet-name>FrontController</servlet-name>
        <servlet-class>kr.or.ddit.mvc.FrontController</servlet-class>
        <init-param>
            <param-name>basePackages</param-name>
            <param-value>kr.or.ddit</param-value>
        </init-param>
        <init-param>
            <param-name>prefix</param-name>
            <param-value>/WEB-INF/views/</param-value>
        </init-param>
        <init-param>
            <param-name>suffix</param-name>
            <param-value>.jsp</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <multipart-config/>
    </servlet>
    <servlet-mapping>
        <servlet-name>FrontController</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

url-pattern에 등록된 url들만 프론트 컨트롤러에서 요청을 받습니다. 방금전까지 url 맵핑을

@RequestMapping("/test05")로 걸어두고 왜 자꾸 404가 뜨나 고민했었습니다.

  1. POJO에 어노테이션을 걸어 각각 컨트롤러로 만들고, 맵핑도 걸어줍니다.
package kr.or.ddit.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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

import kr.or.ddit.mvc.annotation.Controller;
import kr.or.ddit.mvc.annotation.RequestMapping;
import kr.or.ddit.utils.db.ConnectionFactory;

@Controller
public class Test05Annotation extends HttpServlet{
    private static final long serialVersionUID = 1L;

    @RequestMapping("/test05.do")
    public String test05(HttpServletResponse resp) throws IOException{
        resp.setContentType("text/html; charset=utf-8");
        try(
                Connection conn = ConnectionFactory.getConnection();
                PrintWriter out = resp.getWriter();
            ){
                String sql = "select * from alba";
                Statement statement = conn.createStatement();
                ResultSet result = statement.executeQuery(sql);

                while(result.next()) {
                    String al_id = result.getString(1);
                    String al_name = result.getString(2);
                    int al_age = result.getInt(3);
                    String al_zip = result.getString(4);
                    String al_addr1 = result.getString("al_addr1");
                    String al_addr2 = result.getString("al_addr2");
                    String al_hp = result.getString("al_hp");
                    String gr_code = result.getString("gr_code");
                    String al_gen = result.getString("al_gen");
                    String al_mail =result.getString("al_mail");
                    String al_career = result.getString("al_career");
                    String al_spec = result.getString("al_spec");
                    String al_desc = result.getString("al_desc");
                    String al_img = result.getString("al_img");

                    String resultString = String.format("%s %s %d %s %s %s %s %s %s %s %s %s %s %s",al_id,al_name,al_age,al_zip,al_addr1,al_addr2,al_hp,gr_code,al_gen,al_mail,al_career,al_spec,al_desc,al_img);
                    out.write(resultString);
                    out.write("<br>");
                }

            } catch (SQLException e) {
                e.printStackTrace();
            }
        return null;
    }

}

위의 코드 또한 아래 4번에서 했던 코드와 크게 다르진 않습니만, 더이상 서블릿이 아닙니다. Return 타입도 String으로 바뀌어서 논리적인 view 네임을 반환하는 구조입니다.

PrintWriter를 try with resource 부분에 넣지 않아서 리소스를 클로즈 하지 않았더니, isCommitted에서 false가 반환되며 논리적 view name을 요구해서 또 잠시 헤맸었습니다. 다행히도 선생님께 컨트롤러에서 어떻게 커밋여부를 판단하는지 질문했을때, Writer가 clsoe 될때 commit 된걸로 간주한다고 말씀해주셨던게 기억나서 PrintWriter 선언부를 try with resource 안에 넣는 것으로 해결 할 수 있었습니다.

shanepark.tistory.com/79

JDBC 와 MYSQL 연동하기 4) 서블릿으로 출력하기

이번에는 서블릿을 만들어서 MYSQL에서 읽어온 데이터를 브라우저에서 출력해보도록 하겠습니다. shanepark.tistory.com/78 JDBC 와 MYSQL 연동하기 3) 커넥션 팩토리 패턴 적용하기 이제부터는 2) 번에서

shanepark.tistory.com

img

정상적으로 잘 접속되는것을 확인 할 수 있습니다. 아직은 log4jdbc 연결에서는 애를 먹고 있는데요, 이제 곧 Mybatis 연계까지 하고 나면 n Tier MVC 패턴을 적용시키고 본격적으로 코딩을 할 수 있지 않을까 싶습니다.

반응형