2022.01.26 TIL

서승원·2022년 1월 27일
0

TIL

목록 보기
60/68

https://github.com/crimy/GuestbookTest
방명록 마이크로프젝트.
스스로 하나부터 열까지 만들어낸 첫 프로젝트. 오늘은 약간의 회고 + 작은 요점 정리 정도
정말 많이 쓰게 될 것 같은 java class안에서 javascript 활용을 통한 alert()등의 활용.
일단은 그냥 어디 한번 해보자 싶어서 반 정도는 오기로 검색도 안해보고 이리저리 시도한 parameter를 받아와 해당 parameter를 조건으로 alert 경고문 띄우기.
해봤던 시도들은 첫번째는 RequestMapping을 통한 함수 내에서 해당 함수의 return을 String에서 ModelAndView로 바꿔서 setObject로 파라미터 넘겨주기. 이건 아무래도 redirect 활용하기에 String을 유지하는 게 좋을 것 같아서 시도해보지 않았다. queryString 받아와서 jsp 파일 안에서 script 문 사용하기. 이건 아무래도 <script>태그의 위치가 관건이었던 것 같은데 마음이 조급해져서 해결하지 못했다. queryString 값을 받아오는 것 까지는 성공. alert 문은 어떻게해도 출력이 안돼서 포기.
그 다음 떠올린 게 PrintWriter. jsp문 없이 java만 활용해서 PrintWriter의 print 활용해서 javascript문 사용하면 되지 않을까 싶었다. 매개변수로 HttpServletRequest , HttpServletResponse 사용해서 PrintWriter 생성하고 alert문 print()에 입력하는 것 까지는 좋았는데, 작동이 안됐다. 파라미터 확인은 했는데 파라미터가 넘어가지 않는 문제는 아니었다. 검색 후 알게 된 결과는 @RequestBody 태그가 필요하다. 그런데 RequestBody 사용하는 것보다는 다른 방법을 택하는게 현재 구조 유지하면서 기능만 추가하는 데에는 나을 것 같았고, 찾아낸 방법은 alert 출력을 별도 Class로 분리해서 만들기. 결국 Util.java 클래스를 만들고 alert 함수로 분리해서 성공해냈다.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Util {
    public static void init(HttpServletResponse response) {                  
        response.setContentType("text/html; charset=utf-8");
        response.setCharacterEncoding("utf-8");
    }
    // 비밀번호 일치하지 않으면 경고문 출력
    public static void alert( HttpServletResponse response , String text ) throws IOException {
         init(response);
         PrintWriter out = response.getWriter();
         out.println("<script>alert('" + text + "');</script>");
         out.flush();
    }
}
cs

alert에 script문 따로 빼고,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// del.gb : 삭제를 위해 비밀번호 입력페이지 del_form 이동
    @RequestMapping("/del.gb")
    public ModelAndView del(@RequestParam("no"int no) throws Exception {
        ModelAndView mnv = new ModelAndView();
 
        mnv.setViewName("del_form");
        mnv.addObject("no", no);
        return mnv;
    }
 
    // del_form 에서 비밀번호 일치 시 해당 레코드 삭제
    @RequestMapping("/del2.gb")
    public String del(HttpServletRequest request, HttpServletResponse response, @RequestParam("no"int no,
            @RequestParam("password"String password) throws Exception {
        PreparedStatementCreator psc = new PreparedStatementCreator() {
            @Override
            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
                PreparedStatement stmt = conn.prepareStatement("DELETE FROM Guestbook WHERE no = ? && password = ?");
                stmt.setInt(1, no);
                stmt.setString(2, password);
                return stmt;
            }
 
        };
        int i = jdbcTemplate.update(psc);
 
        if (i != 1) {
            Util.alert(response, "잘못된 비밀번호입니다");
        }
        return "redirect:list.gb";
    }
cs

Controller에 함수 만들고, 아무래도 이런 방식 자주 사용하게 될 것 같다. java에서 활용하던 파라미터를 그대로 활용하기가 아주 좋다.
그리고 완성한 결과물
http://pukyung05.cafe24.com/list.gb



많이 부족하지만 정말 생각한만큼은 다 구현해서 만족스럽다.

본 프로젝트 시작전 마이크로 프로젝트로 만든 방명록 시스템을 완성하고 본 프로젝트에 대해 준비를 한 하루였다. 교육과정이 마무리 돼가고있고 프로젝트에 대한 고민이 많아진다
아이템은 어떤 걸 할지 어느정도 난이도가 적당할지 팀원을 찾아야할지

profile
2년차 백엔드 개발자, crimy

0개의 댓글