Pom xml Web xml DB Rootcontext data Source
프로젝트 진행 순서 프로젝트 생성 Pom. xml 구성 Web. xml 구성 DB 테이블 구성 Root-context data. Source 작성 Model 작성 테이블과 일치 Mapper 작성 : xxx. Mapper. java xxx. Mapper. xml Root-context Sql. Session. Factory 등록 xxx. Service. java xxx. Conroller. java xxx. jsp
Maven project 구성 File > new> other > Spring project > next >
Maven project 구성 Spring MVC project > next > 1. 입력 Jaubbs 2. 클릭
Maven project 구성 1. 입력 com. jang. bbs
POM 구성-158 p
Web. xml 구성-165 p
로그인 MVC 처리흐름- -98 p http: // login 4 mvn/login. html Handler. Mapping 컨트롤러 선택 요청 2 3 Dispa tcher Servlet 처리위임 Model. And. View 5 뷰 선택요청 View. Resolver Model. And. View 6 Login. Controller 결과물 출력 <form action=“login. html”> login. jsp login. Success. jsp Controller 4 Model User. Servise User. Dao Model jdbc. Template Data. Source
My. Batis Mapper를 이용한 Service (Business)클래스와 DAO 객체 구현 <<Interface>> DAO Service 사용 Controller User. Service Business Logic Object Service Logic Object. User. Service. Impl Service Controller User. Service. java 사용 User. Dao DAO Object User. Dao. Impl. java jdbc. Templat e 직접생성(data. Source) <<Interface>> User. Mapper sql. Session. Factory User. Mapper. xml get. All get add Update delete data. Source
root-context에서 data. Source와 Tx 작성 160, 175 p
Servlet-Context 확인
Model 의 생성 -173 p
Model 클래스 작성 -173 p User. java Board. java Reply. java
Board. Mapper. xml 작성
Board. Mapper. xml 작성
Board. Mapper. xml작성
Sql. Session. Factory 등록(root-context)176 p
Service 클래스 Paging 처리-184 p
목록 페이지 나누기 end. Row total. Page page. Size(10) =total. Row/page. Size+1 23페이지=223행/10+1 start. Row [이전] [11][12][13] [14][15] [16] [ 7][18][19][20] [다음] [1][2[3][4][5][6][7][8][9][10] [11][12][13][14][15] [16] [17][18][19][20] [21][22][23] …. . [30] block. Size=10 [다음] [이전 ] start. Page last. Pag e current. Block=2
현재 페이지에서 블록, 시작, 끝행 연산 list. do? page=16 : 현재 페이지 16 , Listbbs 2. jsp : 현재 페이지 1 page. Size=10, block. Size=10인 경우 current. Page = page start. Row = (current. Page - 1) * page. Size + 1; = 151 end. Row = current. Page * page. Size; current. Block = current. Page/block. Size + 1; 블록 start. Page = (current. Block-1) * block. Size + 1; 11 page last. Page page [1][2[3][4][5][6][7][8][9][10] [11][12][13][14][15] [16] [17][18][19][20] [21][22][23] …. . [30] total. Page = total. Row/page. Size+1 : //전체행을 db에서 읽어와 전체 페이지 계산 total. Block = current. Block * block. Size; // 시작 행번호 16 page 경우= (16 -1)*10 +1 // 끝 행번호계산 16 page 경우= 16*10 = 160 //현재블록 현재 페이지16 경우: 16/10+1= 2 //현재 블럭의 시작 페이지 (2블록-1)*10+1 = //현재 블럭의 끝 페이지 (2블록)*10 = total. Page/block. Size=10 + 1; //전체 블럭 수 total. Page 3 블록=23페이지/10+1 last. Page current. Block=1 start. Page current. Block=2 current. Block=3 total. Block =3 start. Page = 20
부질의 와 엘리어스(alius) SELECT * FROM ( SELECT ROWNUM AS RNUM, A. * FROM ( SELECT num, title, name, wdate, cnt, email FROM bbs 100 order by num desc ) A WHERE ROWNUM <= 13 ) WHERE RNUM > 3;
Page. Helper 클래스 구성-266 p
Page. Helper 클래스 구성
Board. Controller 작성(list. do)-189 p /board/list. do? page=16 C: Androidworkspace. Newjaubbssrcmainwebappresource sfiles\
list. jsp
list. jsp(2)
list. jsp (3)
Login 작성 1. Dao(Mapper) Interface 작성 – Login. Mapper. java 2. Mapper. XML 작성 – Login. Mapper. XML 3. Service 작성 - Login. Service. java 4. Controller 작성 - Login. Service. java 5. View 작성 - Login. jsp
Login. Mapper. xml 작성
Login. Controller 다음페이지 코드 삽입
Login. Controller (Model. And. View 사용)
Login. Controller (model map 사용 버전 )
Interceptor 생성
Servlet-Context. xml 에 interceptors 등 록 <interceptors> <interceptor> <mapping path="/**/*" /> <exclude-mapping path="/board/list*" /> <exclude-mapping path="/board/view*" /> <beans: bean class="com. jang. bbs. interceptor. Session. Interceptor"></beans: bean> </interceptors> List 와 글보기(view. do)는 누구나 볼수 있어야 하므로 interceptor 제외
Login. jsp // <c: if test="조건식">실행문</c: if>
글쓰기 : 파일 Upload 1. Pom에 fileupload <dependency> 추가 2. Servlet에 multipart. Resolver 추가 3. jsp form 수정 4. Controller – Write-modify 수정 <!-- Apache Commons File. Upload --> <dependency> <group. Id>commons-fileupload</group. Id> <artifact. Id>commons-fileupload</artifact. Id> <version>1. 3. 1</version> </dependency> <!-- Apache Commons IO --> <dependency> <group. Id>commons-io</group. Id> <artifact. Id>commons-io</artifact. Id> <version>2. 4</version> </dependency> 1. Pom 추가
글쓰기 : multipart. Resolver추가(servlet – context. xml) <beans: bean id="multipart. Resolver" 2. class="org. springframework. web. multipart. commons. Commons. Multipart. Resolver"> <beans: property name="max. Upload. Size" value="10000" /> </beans: bean> 3. Write. jsp
글쓰기 : multipart. Resolver추가(write. jsp) 3. Write. jsp
글보기 Board. Service Board. Mapper. XML(: : Mapper. Java public Board get. One. Article(int bno){ return this. board. Mapper. get. One. Article(bno); } public List<Reply> get. Reply. List(int bno) { return this. board. Mapper. get. Reply. List(bno); } public int update. View. Cnt(int bno){ return this. board. Mapper. update. View. Cnt(bno); <update id="update. View. Cnt"> } UPDATE tbl_board SET viewcnt=viewcnt+1 WHERE bno = #{bno} </update> <select id="get. One. Article" result. Type="Board"> SELECT bno , title , content , writer )확인 , to_char(regdate, 'YYYY-MM-DD') regdate , viewcnt , writerid , filename , refgrp , refseq , replycnt , recommendcnt FROM tbl_board WHERE bno = #{bno} </select> <select id="get. Reply. List" result. Type="Reply" > SELECT rno , bno , content , writer , to_char(regdate, 'YYYY-MM-DD') regdate , writerid FROM tbl_reply WHERE bno = #{bno} </select> Board. Controller에 @Request. Mapping("/view. do") 관련 메서드 추가 view. jsp 작성 Run As
글보기: Board. Controller에 추가 (view. do) @Request. Mapping("/view. do") public String board. View(@Request. Param(value = "bno", required = false, default. Value="0") int bno, Model model) throws Exception { //int bno = Integer. parse. Int(request. get. Parameter("bno")); Board board = board. Service. get. One. Article(bno); // 글내용 조회 board. Service. update. View. Cnt(bno); // 조회수 갱신 List<Reply> reply = board. Service. get. Reply. List(bno); // 답변 읽어 오기 - list model. add. Attribute("board", board); //Model. And. View mav = new Model. And. View(); model. add. Attribute("reply. List", reply); //model. set. View. Name("/board/view"); return "board/view"; }
글수정 Board. Service Board. Mapper. XML(: : Mapper. Java )확인 public int modify. Article(Board board) { return this. board. Mapper. modify. Article(board); } <update id="modify. Article"> UPDATE tbl_board SET title = #{title} , content = #{content} , writer = #{writer} , viewcnt =#{viewcnt} , filename = #{filename} WHERE bno = #{bno} </update> Board. Controller에 @Request. Mapping("/modify. do", method="get" ) 관련 메서 드 추가 views/board 에 modify. jsp 작성 Board. Controller에 @Request. Mapping("/modify. do", method="post" ) 관련 메서 드 추가 Run As
글수정: Board. Controller에 추가 (modify. do 수정 화면 ) @Request. Mapping("/modify. do") public Model. And. View board. Modify( Http. Servlet. Request request, Http. Session session){ String user. Id = (String) session. get. Attribute("user. Id"); int bno = Integer. parse. Int(request. get. Parameter("bno")); Board board = board. Service. get. One. Article(bno); String content = board. get. Content(). replace. All(" ", "₩r₩n"); board. set. Content(content); Model. And. View model = new Model. And. View(); if(!user. Id. equals(board. get. Writerid())){ model. add. Object("err. Code", "1"); // forbidden connection model. add. Object("bno", bno); model. set. View. Name("redirect: view. do"); } else { model. add. Object("board", board); model. set. View. Name("/board/modify"); } return model; } //줄바꾸기 코드변경
글수정: Board. Controller 추가 (modify. do 수정 저장후 view로)
글수정 Board. Service Board. Mapper. XML(: : Mapper. Java )확인 public void delete. Article(int bno){ this. board. Mapper. delete. Article(bno); return ; } <delete id="delete. Article"> DELETE FROM tbl_board WHERE bno = #{bno} </delete> Board. Controller에 @Request. Mapping("/delete. do", method="get" ) 관련 메서 드 추가 Run As
글삭제: Board. Controller에 추가 (delete. do)
추천 Board. Service Board. Mapper. XML(: : Mapper. Java )확인 public int update. Recommend. Cnt(int bno){ return this. board. Mapper. update. Recommend. Cnt(bno); } <update id="update. Recommend. Cnt"> UPDATE tbl_board SET recommendcnt=recommendcnt+1 WHERE bno = #{bno} </update> Board. Controller에 @Request. Mapping("/recommend. do") 관련 메서드 추가 Run As
추천: Board. Controller 추가 (recommend. do) @Request. Mapping("/recommend. do") public Model. And. View update. Recommend. Cnt(Http. Servlet. Request request, Http. Session session){ int bno = Integer. parse. Int(request. get. Parameter("bno")); String user. Id = (String) session. get. Attribute("user. Id"); Board board = board. Service. get. One. Article(bno); Model. And. View model = new Model. And. View(); if(user. Id. equals(board. get. Writerid())){ model. add. Object("err. Code", "1"); } else { board. Service. update. Recommend. Cnt(bno); } model. add. Object("bno", bno); model. set. View. Name("redirect: /board/view. do"); return model; }
댓글 쓰기 Board. Service Board. Mapper. XML(: : Mapper. Java )확인 public int write. Reply(Reply reply){ int bno = reply. get. Bno(); this. board. Mapper. update. Reply. Cnt(b no); return this. board. Mapper. write. Reply(reply); } Board. Controller에 @Request. Mapping ("/reply. Write. do") Run As <update id="update. Reply. Cnt"> UPDATE tbl_board SET replycnt = replycnt + 1 WHERE bno = #{bno} </update> <insert id="write. Reply" key. Property="rno"> <select. Key key. Property="rno" result. Type="int" order="BEFORE"> SELECT COALESCE(MAX(rno), 0) + 1 AS rno FROM tbl_reply </select. Key> INSERT INTO tbl_reply ( rno , bno , content , writerid ) VALUES ( #{rno} , #{bno} , #{content} , #{writerid} ) </insert>
댓글쓰기: Board. Controller에 추가 (reply. Write. do: ) @Request. Mapping("/reply. Write. do") public Model. And. View reply. Write. Proc(@Model. Attribute("reply") Reply reply){ // new line code change to tag String content = reply. get. Content(). replace. All("₩r₩n", " "); reply. set. Content(content); board. Service. write. Reply(reply); Model. And. View model = new Model. And. View(); model. add. Object("bno", reply. get. Bno()); model. set. View. Name("redirect: view. do"); return model; }
댓글 지우기 Board. Service Board. Mapper. XML(: : Mapper. Java )확인 public void delete. Reply(int rno){ this. board. Mapper. delete. Reply(rno); return ; } <delete id="delete. Reply"> DELETE FROM tbl_reply WHERE rno = #{rno} </delete> Board. Controller에 @Request. Mapping("/reply. Delete. do") 관련 메서드 추가 Run As
댓글지우기: Board. Controller 추가 (reply. Delete. do: ) @Request. Mapping("/reply. Delete. do") public Model. And. View commend. Delete(Http. Servlet. Request request, Http. Session session){ int rno = Integer. parse. Int(request. get. Parameter("rno")); int bno = Integer. parse. Int(request. get. Parameter("bno")); String user. Id = (String) session. get. Attribute("user. Id"); Reply reply = board. Service. get. One. Reply(rno); Model. And. View model = new Model. And. View(); if(!user. Id. equals(reply. get. Writerid())){ model. add. Object("err. Code", "1"); } else { board. Service. delete. Reply(rno); } model. add. Object("bno", bno); // move back to the article model. set. View. Name("redirect: view. do"); return model; }
Json 개요 JSON (Java. Script Object Notation)은 경량의 DATA-교환 형식 속성: 값 쌍 형식으로 사람과 기계가 분석하고 생성하기 용이. JSON 포맷은 더글라스 크록포드가 규정, RFC 7159와 ECMA-404 두 개의 표준존재 JSON은 프로그래밍 언어로 부터 독립적 JSON의 공식 인터넷 미디어 타입은 application/json이며, JSON의 파일 확장자는. json이다. JSON의 기본 구조: Map 등으로 구현 {"msg": "SUCCESS", "education": "1234", "name": "jjin"} Allay list 로 실현 [ {"msg": "SUCCESS", "education": "1234", "name": " jjin"}, {"msg": “FAIL", "education": “ 1111", "name": “ki m"} ] Hash Map : {education=1234, name=jjin, status=SUCCESS}
Ajax 기본 예제 Post 서버 Name – jjin "education -1234 {"msg": "SUCCESS", "education": "1234", "nam e": "jjin"} n jso XML json {"msg": "SUCCESS", "education": "1234", "nam e": "jjin"} <login> <msg>SUCCES</msg> <education>1234</education > <name>jjin</name> </login>
ajax 예
Ajax 실습 File >new> Dynamic Web Project 생성 (ajax. First) Web. Content>WEB-INF>lib에 JSON 객체 생성을 위한 라이브러 리 복사(json_simple-1. 1. jar) Web. Content에 ajax. Client. jsp 파일 생성 Web. Content에 ajax. Server. jsp 파일 작성 ajax. Client. jsp Run As 결과 확인
Ajax와 HTML요소 조작 function do. Ajax. Post() { $. ajax({ type: "POST", url: “ajax. Server. jsp", data: $("#ajaxform"). serialize(), data. Type: 'json', success: function(response){ alert('success==>' + response ); if(response. msg == "SUCCESS"){ user. Info = "<ul>"; user. Info += " <li><b>Name</b> : " + response. name + "; <b> Education</b> : " + response. education; user. Info += "</li>"; $('#info'). append(user. Info); $('#name'). val(''); $('#education'). val(''); $('#error'). hide('slow'); $('#info'). show('slow'); }else{ error. Info = ""; for(i =0 ; i < response. result. length ; i++){ error. Info += " " + (i + 1) +". " + response. result[i]. code; } $('#error'). html("Please correct following errors: " + error. Info); } }, error: function(e){ alert('Error: ' + e); } }); } </script>
서버 사이드(JSP, HTML 경우-ajax. Server. jsp )
서버사이드 spring 인 경우 -게시판 Login 예 제 로그인 폼 5개 다운로드 http: //tympanus. net/codrops/2012/10/16/custom-login-formstyling/ Dynamic Web Project 인 경우 Webcontent에 복사 HTML에서 배경 제거 스프링 Peoject 경우 경로변경 Webapp/resource에 복사 view/board/에 복사 New>jsp ajaxlogin. jsp 생성 Index 2. html 파일 내용 전체 복사 ajaxlogin. jsp 파일에 추가
서버사이드 spring 인 경우 -게시판 Login 예 제 Ressource 경로 수정 ="${page. Context. request. context. Path}/resources/ HTML과 demo. css 에서 (background: ) 제거 <div class="codrops-top"> ~ <div>, <header>~<header> 제거 폼변경
Ajaxlogin. jsp 처리 <head>~</head>에 Ajax 스크립트 삽입 <script> function form. Submit() { alert('여기!!!'); var params = j. Query("#form-2"). serialize(); // serialize() : 입력된 모든Element(을)를 문자열의 데이터 에 serialize 한다. j. Query. ajax({ url: 'ajaxlogin. do', type: 'POST', data: params, data. Type: 'json', success: function (result) { alert('success!!!! '+result); $("#ajax"). remove(); alert('success 111 '+ result. msg); if (result. msg=="Success"){ alert('환영합니다! ' + result. id+' 님'); location. href("http: //localhost: 8080/bbs/board/list. do"); } else { alert('ID 또는 패스워드가 잘못 입력되었습니다'); location. href("http: //localhost: 8080/bbs/ajaxlogin. do"); } } }); } </script>
Login. Controller 수정 //Json Map==>{msg=Success, id=jjin}
Interceptor 수정
- Slides: 95