2 분 소요

Servlet


Servlet 하나로 합치기

   기존에는 기능 하나당 서블릿 하나씩을 만들어야 해서 서블릿의 개수가 많아지는 문제가 있었다. 오늘은 서블릿 하나만으로 모든 요청을 처리하도록 설계하는 코드를 작성하는 시간을 가졌다.

MemberServlet

...

@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doHandle(req, resp);
}

@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doHandle(req, resp);
}

private void doHandle(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ...

    if (command != null && command.equals("addMember")) {
        String id = req.getParameter("id");
        String pwd = req.getParameter("pwd");
        String name = req.getParameter("name");
        String email = req.getParameter("email");
  
        AddMemberVO vo = new AddMemberVO(id, pwd, name, email);
        dao.addMember(vo);
    } else if (command != null && command.equals("delMember")) {
        String id = req.getParameter("id");
        dao.delMember(id);
    }

    ...
}

   가운데 if 구문에서 command를 통해 각 기능을 분리하는 것을 볼 수 있다. 서블릿 하나의 크기는 늘어났지만 서블릿의 개수를 확연히 줄일 수 있다.


DataSource

   기존에는 Connection을 얻어오기 위해 DriverManager를 이용하였는데 DataSource 인터페이스를 이용하여 간편하게 Connection을 얻어올 수 있었다.
   DataSource 인터페이스를 사용하여 Connection을 가져올 때는 매개변수를 따로 넣어줄 필요가 없었고, 기존에 넣어둔 URL, USERNAME, PASSWORD는 설정 파일에 적어두기만 하면 된다.

  • 변경 전

1. DriverManager

   @Slf4j
   @Component
   public class MemberDAO {
         
       private Connection con;
           
       private void connDB() {
           try {
               con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
               log.info("get connection={}, class={}", con, con.getClass());
           } catch (SQLException e) {
               throw new RuntimeException(e);
           }
       }
   }


  • 변경 후

1. DataSource

   @Slf4j
   @RequiredArgsConstructor
   @Component
   public class MemberDAO {
         
       private final DataSource dataSource;
       private Connection con;
         
       private void connDB() {
           try {
               con = dataSource.getConnection();
               log.info("get connection={}, class={}", con, con.getClass());
           } catch (SQLException e) {
               throw new RuntimeException(e);
           }
       }
   }

2. application.yaml

   spring:
     datasource:
       url: jdbc:h2:tcp://localhost/~/day24
       username: sa
       password:
       driver-class-name: org.h2.Driver


Form 태그 다루기

   form 태그 안에 이름을 설정한 후 js에서 쉽게 다루는 방법을 배웠다.

addMemberForm.html

...

<head>

    ...

    <script type="text/javascript">
        function fn_sendMember() {
            var frmMember = document.frmMember;
            var id = frmMember.id.value;
            var pwd = frmMember.pwd.value;
            var name = frmMember.name.value;
            var email = frmMember.email.value;

            if (id.length == 0 || id == "") {
                alert("아이디는 필수입니다.");
            } else if (pwd.length == 0 || pwd == "") {
                alert("비밀번호는 필수입니다.");
            } else if (name.length == 0 || name == "") {
                alert("이름은 필수입니다.");
            } else if (email.length == 0 || email == "") {
                alert("이메일은 필수입니다.");
            } else {
                frmMember.method="post";
                frmMember.action="/day24/memberV2";
                frmMember.submit();
            }
        }
    </script>
</head>

...

<form name="frmMember">
    <table>
        <th>회원 가입창</th>
        <tr>
            <td>아이디</td>
            <td><input type="text" name="id" /></td>
        </tr>
        <tr>
            <td>비밀번호</td>
            <td><input type="text" name="pwd" /></td>
        </tr>
        <tr>
            <td>이름</td>
            <td><input type="text" name="name" /></td>
        </tr>
        <tr>
            <td>이메일</td>
            <td><input type="email" name="email" /></td>
        </tr>
    </table>
    <input type="button" value="가입하기" onclick="fn_sendMember()" />
    <input type="reset" value="다시입력" />
    <input type="hidden" name="command" value="addMember" />
</form>

...

<== 부트캠프 23일차          부트캠프 25일차 ==>