[spring security] 페이징 게시판 만들기 2) 고객센터 게시판 달기
1. 고객센터에 게시판(/board/main) 연결하기
프로젝트를 실행 시키고 브라우저로 접속하고 로그인하면 다음 화면이 보일겁니다. 고객센터를 클릭하면 게시판(/board/main)이 뜨도록 하려고 합니다.
1) web.xml에 /error url 선언하기
고객센터를 클릭합니다.
에러가 뜨네요 이클립스의 콘솔창에 맨 아래에는
2014-09-18 22:10:19,788 DEBUG [http-bio-8080-exec-5] controller.HomeController (HomeController.java:79) - /error ... http://127.0.0.1:8080/myhome/
로그가 찍혔습니다. 에러가 발생하면 /error 라는 url을 호출 하도록 web.xml에서 선언되어 있습니다.
2) conroller단에서 JSTL로 Data 넘겨서 JSP에서 코드 생성하기
파이어폭스에서 파이버그로 고객센터의 코드를 살펴보니 <a> 엘리먼트로 href에 /myhome/information/notice 라고 코드가 보입니다.
현재 접속한 메인페이지는 / 로 HomeController.java에 @RequestMapping(value = "/") 로 선언되어 return 값이 "/main/main"으로 되어 있습니다.
SpringFramework에서 @RequestMapping 이 선언되고 return이 String으로 되어 있으면 return 값이 servlet-context.xml에 선언된 Resolver의 위치의 jsp 파일을 웹브라우저로 전송해주게 됩니다.
home함수에 보면 Model model이란 변수가 있습니다. String으로 "/main/main"으로 리턴 될 때 Model에 값을 담아서 jsp파일로 같이 넘기면 jsp파일에서는 JSTL로 그 값을 받아서 jsp파일에서 코드를 생성해 주게 됩니다.
model.addAttribute("test", "테스트입니다.");
선언된 resolver 파일의 위치는 /WEB-INF/views/ 이고 리턴값은 /main/main 이므로, /WEB-INF/views/의 main 폴더에 main.jsp를 가리킵니다.
HomeController.java의 @RequestMapping(value = "/")의 home 함수에
model.addAttribute("test", "테스트입니다.");
추가해줍니다.
/main/main.jsp 파일에 JSTL 문법으로 Controller에서 넘겨받은 "test"란 값을 뿌려줄 수 있도록 ${test} 라고
<h3>${test} 메인화면입니다.</h3>
추가해 줍니다.
프로젝트를 재시작하고 /에 접속해 봅니다. "테스트입니다. 메인화면입니다." 라는 문구가 찍힌 것을 볼 수 있습니다.
Controller단에서 Model에 test란 변수명으로 저장한 "테스트입니다"를 jsp 파일에서 JSTL로 값을 받아서 코드를 생성한 것입니다.
3) 고객센터와 게시판 연결하기
고객센터에 게시판을 연결해 보도록 하겠습니다. 단순히 /include/header_sample.jspf 파일에서 고객센터의 <a> 엘리먼트의 href값만 /board/main으로 바꾸어주기만 하면 끝납니다.
너무 간단히 끝나버리니 조금 어렵게하면 /include/header_sample.jspf 파일은 건드리지 말고 하도록 하겠습니다.
jsp에서 <%@ include는 외부의 파일을 로딩하여 합칠 때 자주 사용합니다. header_sample.jspf 에서 생성된 파일이 main.jsp 파일과 합쳐져서 main.jsp 파일에서 html코드가 생성되는 것입니다.
고객센터에 걸린 url은 /myhome/information/notice 입니다. 여기서 /myhome은 웹프로젝트명으로 JSTL에서 <c:url>에 의해서 생성된 것입니다.
url이 information이니까 Controller명을 information이 들어가도록 하겠습니다.
BoardController.java를 복사해서 InformationController.java를 만듭니다.
InformationController에서 @RequestMapping으로 선언된 곳에서
@RequestMapping(value="/board/main")
board를 모두다 information으로 변경합니다.
board게시판의 경우 jsp파일은 /board/main만 있습니다. data는 모두다 ajax으로 가져왔습니다.
information도 마찮가지로 똑같이 만듭니다. /information/main은
@RequestMapping(value="/information/main")
...
return "/information/main";
을 보면 return이 /information/main입니다. information 폴더를 만들고 /board/main.jsp파일도 복사합니다.
jsp 파일의 board를 모두다 information으로 변경합니다.
/information/main이란 url로 브라우저에서 웹서버로 접근이 가능하도록 spring security에 권한을 추가해줍니다.
웹서버를 재시작하고 /information/main으로 접속해 봅니다. 게시판의 메인페이지가 정상적으로 열렸습니다. data도 조회해서 가져왔고요
화면을 보면 url만 /board/main에서 /information/main으로 변경되었습니다. url만 바뀌고 기능은 모두다 똑같이 동작하는 것입니다.
이번에는 등록도 정상적으로 되는지 봅니다. 실패가 되었습니다.
왜 그런지 확인보도록 하겠습니다.
이클립스의 콘솔을 보면 다음처럼 에러가 발생했습니다.
insert error! 란 란인의 좌측편에 BoardServiceImpl.java:165 를 클릭합니다.
Spring Security가 섹션에 저장해둔 유저 로그인 아이디를 가져오는 부분에서 에러가 발생하면서 try {} catch{} 걸려서 log가 찍힌 것입니다.
로그인을 하지 않아서 섹션에는 아이디가 저장되어 있지 않으니까 브라우저에서 ajax으로 저장을 요청했지만 service단에서 오류를 발생하고 result=0을 리턴한 것입니다.
그러면 로그인 후에 등록해 보겠습니다. 정상적으로 등록되었습니다.
제목70으로 게시물 하나가 더 늘었습니다.
4) 메인 고객센터에 게시판 연결하기
현재 url은 /information/main입니다. main페이지의 고객센터 url은 /information/notice 입니다.
InformationContorller.java에서
@RequestMapping(value="/information/main")
을
@RequestMapping(value="/information/notice")
로 변경합니다. 웹서버를 재시작하고 main 화면에 접속한 후에 고객센터를 클릭합니다.
다음처럼 정상적으로 게시판이 보입니다. 제목도 조금 변경을 해 보겠습니다.
보통 대다수의 웹어플리케이션은 샘플로 게시판의 목록, 등록, 수정, 삭제만 잘 만들어두면 이름만 바꿔치기해서 똑같이 여러개를 복사해서 사용할 수 있습니다.
물론 웹이 바로 사용자가 직접 사용하는 것이다보니 변화가 많습니다.
대다수는 유저에 대한 요구분석이 정확하게 되지 않은 상태에서 기획서가 작성되고 설계에 반영되면서 수정작업이 일어나는 것입니다.
개발을 할 때 fornt단 개발보다는 관리단 쪽 개발이 훨씬 쉬울적이 많습니다.
가능하면 소스를 통일되게 작성을 하면 나중에 유지보수하기가 쉬워집니다.
개발 할 때마다 다른 로직과 다른 방식으로 개발하게되면 협업하기도 어려울 뿐더러 오류 발생시에 바로 대처하기도 어려워집니다.
자신만의 새로운 기술과 기법을 적용하는 것도 좋긴 하지만 확인된 코드를 사용하는 것과 코드를 공유해서 협업하는 것은 오류사항을 하나라도 줄일 수 있는 방법중에 하나입니다.
다음에는 게시판 소스에 대해서 분석을 해보도록 하겠습니다.
[spring security] 페이징 게시판 만들기 2) 고객센터 게시판 달기
'programming > spring_security' 카테고리의 다른 글
[spring security] 파일 다운로드 (0) | 2014.11.17 |
---|---|
[spring security] 이용자 정보 가져오기 설정하기 (0) | 2014.10.30 |
[spring security] jquery li 클릭시 자바스크립트 push 이용하기 (0) | 2014.09.16 |
[spring security] mybatis Map으로 요청해서 List Map으로 가져오기 (0) | 2014.09.16 |
[spring security] 페이징 게시판 만들기 1) data 가져와서 뿌리기 (0) | 2014.09.14 |