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
32
<table class="table" style="text-align: center;">
        <thead>
            <tr>
                <td>번호</td>
                <td style="width: 50%;">제목</td>
                <td>작성자</td>
                <td>등록일</td>
                <td>수정일</td>                
                <td>조회수</td>                
            </tr>
        </thead>
        
        <tbody>
            <c:set var="num" value="${searchVo.totalCount - ((searchVo.curPage-1) * 10) }"/>
            <c:forEach var="rs" items="${visitorList }">
            <tr>
                <td>${num }</td>
                <td style="text-align: left; color: red;">
                    <c:url var="viewUrl" value="/board/visitorViewForm.do">
                        <c:param name="bdNum" value="${rs.bdNum }"></c:param>
                    </c:url>
                    <a href="${viewUrl }">${rs.bdTitle }</a> (${rs.cmtCnt })
                </td>
                <td>${rs.bdWriter }</td>
                <td>${rs.bdWDate }</td>
                <td>${rs.bdUDate }</td>
                <td>${rs.bdCnt }</td>
            </tr>
            <c:set var="num" value="${num-1 }"></c:set>
            </c:forEach>
        </tbody>
    </table>
cs




<c:set var="num" value="${searchVo.totalCount - ((searchVo.curPage-1) * 10) }"/>

* 핵심 : 현재 게시판 레코드의 토탈 갯수 - ((현재 페이지-1) * 한 화면에 보여질 레코드의 갯수)


forEach문이 모두 돌고 나서

<c:set var="num" value="${num-1 }"></c:set>

해주면 게시판의 번호가 역순으로 출력 됩니다.


출력 화면



이번 포스팅에서는 Datepicker를 활용하여 시작일과 종료일 제한을 주도록 하겠습니다.

활용 방법으로는 검색 조건으로 Datepicker를 사용하여 시작일/종료일로 검색이 가능해지겠네요.


1
2
3
<link rel="stylesheet" href="http://code.jquery.com/ui/1.8.18/themes/base/jquery-ui.css" type="text/css" />  
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>  
<script src="http://code.jquery.com/ui/1.8.18/jquery-ui.min.js"></script>
cs


가장 먼저, 위의 스크립트들을 JSP 위쪽에 붙여 넣어 줍니다.


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
32
33
34
35
36
37
38
39
40
41
<script type="text/javascript">
    $(document).ready(function () {
            $.datepicker.setDefaults($.datepicker.regional['ko']); 
            $( "#startDate" ).datepicker({
                 changeMonth: true
                 changeYear: true,
                 nextText: '다음 달',
                 prevText: '이전 달'
                 dayNames: ['일요일''월요일''화요일''수요일''목요일''금요일''토요일'],
                 dayNamesMin: ['일''월''화''수''목''금''토'], 
                 monthNamesShort: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
                 monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
                 dateFormat: "yymmdd",
                 maxDate: 0,                       // 선택할수있는 최소날짜, ( 0 : 오늘 이후 날짜 선택 불가)
                 onClose: function( selectedDate ) {    
                      //시작일(startDate) datepicker가 닫힐때
                      //종료일(endDate)의 선택할수있는 최소 날짜(minDate)를 선택한 시작일로 지정
                     $("#endDate").datepicker( "option""minDate", selectedDate );
                 }    
 
            });
            $( "#endDate" ).datepicker({
                 changeMonth: true
                 changeYear: true,
                 nextText: '다음 달',
                 prevText: '이전 달'
                 dayNames: ['일요일''월요일''화요일''수요일''목요일''금요일''토요일'],
                 dayNamesMin: ['일''월''화''수''목''금''토'], 
                 monthNamesShort: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
                 monthNames: ['1월','2월','3월','4월','5월','6월','7월','8월','9월','10월','11월','12월'],
                 dateFormat: "yymmdd",
                 maxDate: 0,                       // 선택할수있는 최대날짜, ( 0 : 오늘 이후 날짜 선택 불가)
                 onClose: function( selectedDate ) {    
                     // 종료일(endDate) datepicker가 닫힐때
                     // 시작일(startDate)의 선택할수있는 최대 날짜(maxDate)를 선택한 시작일로 지정
                     $("#startDate").datepicker( "option""maxDate", selectedDate );
                 }    
 
            });    
    });
</script>
cs


스크립트 추가 후 <head> </head> 사이에 위와 같은 스크립트를 붙여 넣어줍니다.


1
2
<input type="text" id="startDate">
<input type="text" id="endDate">
cs


마지막으로 <body> </body> 사이에 위와 같은 스크립트를 붙여 넣어주면 끝입니다.


실행화면



input 태그 디자인의 경우, 뭐 입맛에 맞게 변경해주시면 될 듯합니다.

datepicker 관련 옵션은 아래에 별도로 첨부합니다.





showOn: "button" 옵션을 추가 했을 때




참고 사이트

http://www.nextree.co.kr/p9887/

http://jqueryui.com/datepicker/


 

 

제작자의 요청으로 삭제된 맵입니다.


========================

 

발동어 : #JSOA

 

선택어 : #선택

 

도움말 : #도움말 (숫)

 

힐 : ㅎ

 

쿨 : ㅋ

 

올템 : #올템


* 알피지 수정 맵은 스텟을 -힘/-민/-지 이런 식으로 찍기 때문에 혹시라도 처음부터 플레이하는 사람이라면

#선택 을 다른 NPC에게 해두고 스텟을 찍으시길...

이렇게 안하면 정식맵에서 로드 불가능할거임.

 

========================

 

 

ZombieRisingEA1.38.a00

ZombieRisingEA1.38.alz

 

========================

 

발동어 : #JSOA

 

선택어 : #선택

 

도움말 : #도움말 (숫)

 

힐 : ㅎ

 

쿨 : ㅋ

========================

 

 

JFFX_2.13.a00

JFFX_2.13.a01

JFFX_2.13.a02

JFFX_2.13.alz

 

========================

 

* 도대체 어떻게 시작하는건지 모르겠음.

 

발동어 : #JSOA

 

선택어 : #선택

 

도움말 : #도움말 (숫)

 

힐 : ㅎ

 

쿨 : ㅋ

========================

이번 시간은 댓글 추가,삭제 기능을 기반으로 포스팅하겠습니다.

Spring MVC 패턴에 맞게 정의한 소스 코드이며, 댓글 관련 소스코드 모두 첨부합니다.


comment.jsp

ajax, javascript, jquery 형식으로 댓글을 추가,수정,삭제 하는 방법입니다.

줄 바꿈의 핵심 로직에는 빨간색으로 표시 해두었으니, 참고하시기 바랍니다.

각 게시글 번호에 맞는 댓글의 갯수와 댓글을 출력해주기 위해 아래 소스 코드에서는 qnaInfo로 조회했습니다.

가장 간단한 방법으로 줄바꿈 기능을 사용해보고자 작성한 소스코드입니다.

원래는 댓글 기능만 추가하려고 했었는데, 질문답변 게시판도 댓글 형식으로 답변을 남겨보자! 하고 시작한 작업입니다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<script type="text/javascript">
var bno = '${qnaInfo.bdNum}'; //게시글 번호 
//댓글 목록 
function commentList(){
    var upCheck = ${loginInfo.memNum}
    
    $.ajax({
        url : '/comment/list',
        type : 'get',
        data : {'bdNum':bno},
        success : function(data){
            var a =''; 
            $.each(data, function(key, value){ 
                if(upCheck == 1) {
                var contentV = value.cmtContent.replace(/(?:\r\n|\r|\n)/g, '<br>');
                a += '<div class="commentArea" style="border-bottom:1px solid darkgray; margin-bottom: 15px;">';
                a += '<div class="commentInfo'+value.cmtNum+'">'+' 작성자 : '+value.cmtWriter + '<a href="#" onclick="commentDelete('+value.cmtNum+');"> 삭제</a>' + '<a href="#" onclick="commentUpdate('+value.cmtNum+',\''+contentV+'\');"> 수정</a>'; 
                a += '<p class="card-subtitle mb-2 text-muted"><small> (' + value.cmtWDate + ')</small></p>';
                a += '</div>';
                a += '<div class="commentContent'+value.cmtNum+'"> <p id="comp">'+value.cmtContent +'</p>';
                a += '</div></div>';
                } else {
                  a += '<div class="commentArea" style="border-bottom:1px solid darkgray; margin-bottom: 15px;">';
                  a += '<div class="commentInfo'+value.cmtNum+'">'+' 작성자 : '+value.cmtWriter + '<p class="card-subtitle mb-2 text-muted"><small> (' + value.cmtWDate + ')</small></p>';
                  a += '<div class="commentContent'+value.cmtNum+'"> <p>'+value.cmtContent +'</p></div>';
                  a += '</div></div>';
                }
            });
            
            $(".commentList").html(a);
//            $("div[class=commentList]").html(a);
        }
    });
}
 
//댓글 수정 - 댓글 내용 출력을 input 폼으로 변경 
function commentUpdate(cmtNum, cmtContent){
    var a ='';
    var contentV = cmtContent.split('<br>').join("\r\n");
    var contentW = contentV.split('</a>').join("");
    a += '<div class="input-group">';
    //a += '<input type="text" class="form-control" name="cmtContent_'+cmtNum+'" value="'+cmtContent+'"/>';
    a += '<textarea name="cmtContent_'+cmtNum+'" class="form-control" rows="4" cols="70" placeholder="내용을 입력하세요.">'+ contentW +'</textarea>';
    a += '<span class="input-group-btn"><button class="btn btn-default" type="button" onclick="commentUpdateProc('+cmtNum+');">수정</button> </span>';
    a += '</div>';
    
    $('.commentContent'+cmtNum).html(a);
    
}
//댓글 수정
function commentUpdateProc(cmtNum){
    var updateContent = $('textarea[name=cmtContent_'+cmtNum+']').val();
    
    $.ajax({
        url : '/comment/update',
        type : 'post',
        data : {'cmtContent' : updateContent, 'cmtNum' : cmtNum},
        success : function(data){
            if(data) commentList(cmtNum); //댓글 수정후 목록 출력 
        }
    });
 
//댓글 삭제 
function commentDelete(cmtNum){
    $.ajax({
        url : '/comment/delete/'+cmtNum,
        type : 'post',
        success : function(data){
            if(data) commentList(cmtNum); //댓글 삭제후 목록 출력 
        }
    });
}
$(document).ready(function() {
    
    $('button[name=insertCommentBtn]').click(function(){ //댓글 등록 버튼 클릭시 
        //alert("등록 버튼");
        var insertData = $('form[name=insertCommentForm]').serialize(); //insertCommentForm의 내용을 가져옴
        //alert(JSON.stringify(insertData));
        
        commentInsert(insertData); //Insert 함수호출(아래)
    });
    
    //댓글 등록
    function commentInsert(insertData){
        $.ajax({
            url : '/comment/insertVisitor',
            type : 'post',
            data : insertData,
            success : function(data){
                if(data) {
                    commentList(); //댓글 작성 후 댓글 목록 reload
                    $('#cmtContent').val('');
                }
            }
        });
    }
    commentList(); //페이지 로딩시 댓글 목록 출력 
    
});
</script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="container">
        <label for="cmtContent">댓글(comments)</label>
                <form name="insertCommentForm">
                    <div class="input-group">
                        <input type="hidden" name="bdNum" value="${qnaInfo.bdNum }"/>
                        <textarea name="cmtContent" id="cmtContent" class="form-control" rows="4" cols="70" placeholder="내용을 입력하세요."></textarea>
                        <span class="input-group-btn">
                            <button class="btn btn-default" type="button" name="insertCommentBtn">등록</button>
                        </span>
                    </div>
                </form>
    </div>
    <br>
    <div class="container">
        <div class="commentList" style="white-space:pre;"></div>
    </div>
cs
cs



CommentVo.java


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package kr.or.infobee.comment.service;
 
import org.apache.commons.lang3.builder.ToStringBuilder;
 
public class CommentVo {
 
    private int cmtNum;
    private int bdNum;
    private String cmtWriter;
    private int memNum;
    private String cmtContent;
    private String cmtDel;
    private String cmtWDate;
 
    public int getCmtNum() {
        return cmtNum;
    }
 
    public void setCmtNum(int cmtNum) {
        this.cmtNum = cmtNum;
    }
 
    public int getBdNum() {
        return bdNum;
    }
 
    public void setBdNum(int bdNum) {
        this.bdNum = bdNum;
    }
 
    public String getCmtWriter() {
        return cmtWriter;
    }
 
    public void setCmtWriter(String cmtWriter) {
        this.cmtWriter = cmtWriter;
    }
 
    public int getEmpNum() {
        return memNum;
    }
 
    public void setEmpNum(int memNum) {
        this.memNum = memNum;
    }
 
    public String getCmtContent() {
        return cmtContent;
    }
 
    public void setCmtContent(String cmtContent) {
        this.cmtContent = cmtContent;
    }
 
    public String getCmtDel() {
        return cmtDel;
    }
 
    public void setCmtDel(String cmtDel) {
        this.cmtDel = cmtDel;
    }
 
    public String getCmtWDate() {
        return cmtWDate;
    }
 
    public void setCmtWDate(String cmtWDate) {
        this.cmtWDate = cmtWDate;
    }
 
    @Override
    public String toString() {
 
        return ToStringBuilder.reflectionToString(this);
    }
}
 
cs



CommentController.java


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package kr.or.infobee.comment.web;
 
import java.util.HashMap;
import java.util.List;
 
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpSession;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
 
import kr.or.infobee.comment.service.CommentService;
import kr.or.infobee.comment.service.CommentVo;
import kr.or.infobee.login.service.LoginVo;
 
@Controller
@RequestMapping(value = "/comment")
public class CommentController {
 
    private final Logger log = LoggerFactory.getLogger(this.getClass());
 
    @Autowired
    private CommentService commentService;
 
    @RequestMapping(value = "/list")
    public @ResponseBody List<CommentVo> getCommentList(Model model, @ModelAttribute CommentVo commentVo, HttpSession session)
            throws Exception {
        
        session.getAttribute("loginInfo");
        
        return commentService.getCommentList(commentVo);
    }
 
    @RequestMapping(value = "/insertVisitor")
    public @ResponseBody HashMap<String, Object> insertCommentVisitor(@RequestParam int bdNum, @RequestParam String cmtContent,
            HttpSession session) throws Exception {
 
        HashMap<String, Object> result = new HashMap<>();
        try {
 
            LoginVo loginInfo = (LoginVo) session.getAttribute("loginInfo");
 
            CommentVo comment = new CommentVo();
            comment.setBdNum(bdNum);
            comment.setCmtContent(cmtContent);
            
            StringBuilder builder = new StringBuilder(session.getId());
            String setWriter = builder.substring(0,2);
            
            if(loginInfo != null) {
                comment.setCmtWriter(loginInfo.getMemName());
                comment.setEmpNum(loginInfo.getMemNum());
            } else {
                comment.setCmtWriter("손님-" + setWriter);
                comment.setEmpNum(1);                
            }
 
            commentService.insertComment(comment);
            
            result.put("status"true);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            result.put("status"false);
            result.put("message", e.getMessage());
        }
 
        return result;
 
    }
 
    @RequestMapping(value = "/update")
    public @ResponseBody HashMap<String, Object> updateComment(@RequestParam int cmtNum,
            @RequestParam String cmtContent) throws Exception {
 
        HashMap<String, Object> result = new HashMap<>();
        
        try {
            CommentVo comment = new CommentVo();
            comment.setCmtNum(cmtNum);
            comment.setCmtContent(cmtContent);
 
            commentService.updateComment(comment);
            result.put("status"true);
        } catch (Exception e) {
            result.put("status"false);
            result.put("message", e.getMessage());
        }
        return result;
    }
 
    @RequestMapping(value = "/delete/{cmtNum}")
    private @ResponseBody HashMap<String, Object> deleteComment(@PathVariable int cmtNum) throws Exception {
 
        HashMap<String, Object> result = new HashMap<>();
 
        try {
            commentService.deleteComment(cmtNum);
            result.put("status"true);
        } catch (Exception e) {
            result.put("status"false);
            result.put("message", e.getMessage());
        }
        return result;
    }
 
}
 
cs



CommentService.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package kr.or.infobee.comment.service;
 
import java.util.List;
 
public interface CommentService {
 
    public List<CommentVo> getCommentList( CommentVo commentVo) throws Exception;
    
    public void insertComment(CommentVo commentVo) throws Exception;
    
    public void updateComment(CommentVo commentVo) throws Exception;
    
    public void deleteComment(int cmtNum) throws Exception;
}
 
cs



CommentServiceImpl.java


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
32
33
34
35
36
37
38
39
40
41
42
package kr.or.infobee.comment.service.impl;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import kr.or.infobee.comment.service.CommentService;
import kr.or.infobee.comment.service.CommentVo;
 
@Service("CommentService")
public class CommentServiceImpl implements CommentService{
 
    @Autowired
    private CommentMapper commentMapper;
    
    @Override
    public List<CommentVo> getCommentList(CommentVo commentVo) throws Exception {
 
        return commentMapper.getCommentList(commentVo);
    }
 
    @Override
    public void insertComment(CommentVo commentVo) throws Exception {
 
        commentMapper.insertComment(commentVo);
    }
 
    @Override
    public void updateComment(CommentVo commentVo) throws Exception {
 
        commentMapper.updateComment(commentVo);
    }
 
    @Override
    public void deleteComment(int cmtNum) throws Exception {
        
        commentMapper.deleteComment(cmtNum);
    }
 
}
 
cs



CommentMapper.java


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package kr.or.infobee.comment.service.impl;
 
import java.util.List;
 
import org.apache.ibatis.annotations.Mapper;
 
import kr.or.infobee.comment.service.CommentVo;
 
@Mapper
public interface CommentMapper {
    
    // 댓글 갯수
    public int countComment() throws Exception;
    // 댓글리스트
    public List<CommentVo> getCommentList(CommentVo commentVo) throws Exception;
    // 댓글삽입
    public void insertComment(CommentVo commentVo) throws Exception;
    // 댓글수정
    public void updateComment(CommentVo commentVo) throws Exception;
    // 댓글삭제
    public void deleteComment(int cmtNum) throws Exception;
}
 
cs



CommentMapper.xml


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.infobee.comment.service.impl.CommentMapper">
 
<select id="countComment" resultType="int">
    SELECT COUNT(*) FROM BOARD_COMMENT
</select>
 
<select id="getCommentList" parameterType="kr.or.infobee.comment.service.CommentVo" resultType="kr.or.infobee.comment.service.CommentVo">
    SELECT
        cmt_num,
        bd_num,
        cmt_writer,
        mem_num,
        cmt_content,
        cmt_del,
        cmt_w_date
    FROM
        board_comment
    WHERE
        bd_num = #{bdNum}
</select>
 
 
<insert id="insertComment" parameterType="kr.or.infobee.comment.service.CommentVo">
    INSERT INTO BOARD_COMMENT (
    CMT_NUM,
    BD_NUM,
    CMT_WRITER,
    MEM_NUM,
    CMT_CONTENT,
    CMT_DEL,
    CMT_W_DATE
    ) VALUES (
        get_seq('commentSeq'),
        #{bdNum},
        #{cmtWriter},
        #{memNum},
        #{cmtContent},
        'N',
        now()
    )
 
</insert>
 
<update id="updateComment" parameterType="kr.or.infobee.comment.service.CommentVo">
    UPDATE BOARD_COMMENT
        SET
        CMT_CONTENT = #{cmtContent}
        WHERE
            CMT_NUM = #{cmtNum}
 
</update>
 
<delete id="deleteComment" parameterType="int">
    DELETE FROM BOARD_COMMENT WHERE CMT_NUM = #{cmtNum}
 
</delete>
</mapper>
cs


'IT > JSP' 카테고리의 다른 글

[JSP/Spring] 게시판 번호 역순으로 출력하기(Feat. 페이징)  (0) 2019.01.28

Oracle(오라클) 데이터베이스에서는 기본적으로 sequence 객체를 사용하여, 기본키로 설정하는 경우가 많다.

생성하는 방법도 쉽고, 사용하는 방법도 쉬운 오라클 시퀀스 객체에 비해 mysql은 다소 어려운 감이 있다.


/* 오라클 시퀀스 기본 생성 예 */

create sequence [시퀀스 명];

[시퀀스 명].nextval() -- 1씩 순차적으로 증가함.


오라클 데이터베이스에 익숙해진 상태에서, mysql로 똑같은 기능을 구현하려니 많이 답답했다.

이것저것 검색 해 본 뒤에야, 가장 간단하고 쉽게 구현하는 방법을 찾아냈다.


/* mysql 시퀀스 기본 생성 예 */


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
32
33
34
35
36
37
38
39
40
41
42
/* seq_mysql 테이블 생성 */
 CREATE TABLE seq_mysql(
 
     id INT NOT NULL
 
     seq_name VARCHAR(50NOT NULL
 
 );
 
/* 생성된 펑션 삭제 */
 DROP FUNCTION IF EXISTS get_seq;
 
/* Auto_increment 적용 */
DELIMITER $$
 
CREATE FUNCTION get_seq (p_seq_name VARCHAR(45))
 
RETURNS INT READS SQL DATA
 
BEGIN
 
DECLARE RESULT_ID INT;
 
UPDATE seq_mysql SET id = LAST_INSERT_ID(id+1
 
 WHERE seq_name = p_seq_name;
 
SET RESULT_ID = (SELECT LAST_INSERT_ID());
 
RETURN RESULT_ID;
 
END $$
 
DELIMITER ;
 
/* 시퀀스 생성 */ 
INSERT INTO seq_mysql
 
 VALUES (0'boardSeq');
 
/* 시퀀스 삽입 */
get_seq('boardSeq')
cs


mysql에서는 테이블을 생성하고, 변수 값으로 시퀀스와 같은 기능을 만들 수 있다.

위의 예처럼 순서대로 생성해주면, get_seq('boardSeq') 라는 값을 시퀀스처럼 사용 가능하다.


시퀀스 객체 초기화를 위해, 많은 방법이 있겠지만

나의 경우에는 위에서 "생성된 펑션 삭제" 구문을 실행해주고, 다시 생성해주는 방법을 사용했다.


mysql이 미숙한 모든 분들에게 좋은 팁이 되었으면 좋겠다.

 

 

DBZ_Tribute_LuNaTic_V52a.a00

DBZ_Tribute_LuNaTic_V52a.a01

DBZ_Tribute_LuNaTic_V52a.alz

 

 

========================

 

발동어 : #JSOA

 

선택어 : #선택

 

도움말 : #도움말 (숫)

 

힐 : ㅎ

 

쿨 : ㅋ

========================

 

 

IYA_6.5.1.w3x

 

========================

 

발동어 : #JSOA

 

선택어 : #선택

 

도움말 : #도움말 (숫)

 

힐 : ㅎ

 

쿨 : ㅋ

========================

얕은 지식이지만, 현재 사용중인 라이브러리 등 처음에 해야 하는 환경 설정에 대해 정리한 문서입니다.
이번 포스팅은 자바 스프링 프레임워크 환경 설정에 대해 다루도록 하겠습니다.
먼저 가장 많이 사용 하는 Oracle(오라클)과 Mysql 중 먼저 Mysql 설정 하는 방법을 알려드리도록 하겠습니다.

pom.xml

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kr.or.infobee</groupId>
    <artifactId>infobee</artifactId>
    <name>SpringMVC(1)</name>
    <packaging>war</packaging>
    <version>1.0.0-BUILD-SNAPSHOT</version>
    <properties>
        <java-version>1.8</java-version>
        <org.springframework-version>4.3.20.RELEASE</org.springframework-version>
        <org.aspectj-version>1.9.1</org.aspectj-version>
        <org.slf4j-version>1.6.6</org.slf4j-version>
<!--         <oracle.ojdbc14.version>11.2.0.2.0</oracle.ojdbc14.version> -->
    </properties>
 
    <repositories>
        <!-- 외부 public 레파지스토리 서버 등록(인터넷이 되는 환경) -->
        <repository>
            <id>central</id>
            <url>http://central.maven.org/maven2/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
 
        <!-- 사설 내부 private 레파지스토리 서버등록 (인터넷이 안되고 사설 서버가 구축 되어 있을 경우) -->
        <repository>
            <id>public</id>
            <url>http://osg.iptime.org/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
 
    <dependencies>
 
<!--         <dependency> -->
<!--             <groupId>oracle</groupId> -->
<!--             <artifactId>ojdbc14</artifactId> -->
<!--             <version>${oracle.ojdbc14.version}</version> -->
<!--         </dependency> -->
 
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
 
        <!-- AspectJ -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${org.aspectj-version}</version>
        </dependency>
 
 
 
        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${org.slf4j-version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j-version}</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>
 
        <!-- @Inject -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>
 
        <!-- Servlet -->
        <!-- <dependency> -->
        <!-- <groupId>javax.servlet</groupId> -->
        <!-- <artifactId>servlet-api</artifactId> -->
        <!-- <version>2.5</version> -->
        <!-- <scope>provided</scope> -->
        <!-- </dependency> -->
 
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
 
 
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
 
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.sitemesh/sitemesh -->
        <dependency>
            <groupId>org.sitemesh</groupId>
            <artifactId>sitemesh</artifactId>
            <version>3.0.1</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.5.0</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.6.0</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.2</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>
 
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>
 
 
 
 
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>${java-version}</source>
                    <target>${java-version}</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
 
cs

위 소스는 참고하셔서, 그대로 복사해서 붙여 넣으셔도 될 듯 합니다. 추가적으로 주석 처리된 부분은 Oracle(오라클) DB 사용 시에 필요한 부분입니다.

root-context.xml(/src/main/webapp/WEB-INF/spring/context)


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
 
 
    <!-- @Required, @Autowired, @Qualifier, @Resource 등 어노테이션을 사용할 수 있게 설정. -->
 
    <!-- Root Context: defines shared resources visible to all other web components -->
    <context:component-scan    base-package="kr.or.infobee">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
 
 
    <context:property-placeholder location="classpath:/db.properties" />
 
<!--     <bean id="spring.dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> -->
<!--         <property name="driverClassName" value="${driver}" /> -->
<!--         <property name="url" value="${url}" /> -->
<!--         <property name="username" value="${username}" /> -->
<!--         <property name="password" value="${password}" /> -->
<!--     </bean> -->
 
<!--     <alias name="dbcp2.dataSource" alias="dataSource" /> -->
 
<!--     <bean id="dbcp2.dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> -->
<!--         <property name="driverClassName" value="${dev.driver}" /> -->
<!--         <property name="url" value="${dev.url}" /> -->
<!--         <property name="username" value="${dev.username}" /> -->
<!--         <property name="password" value="${dev.password}" /> -->
 
         <!-- Pool 관련 설정 -->
<!--         <property name="validationQuery" value="select 1 from dual" /> -->
<!--         <property name="maxTotal" value="300" /> -->
<!--         <property name="maxIdle" value="5" /> -->
<!--         <property name="minIdle" value="4" /> -->
<!--         <property name="defaultAutoCommit" value="false" /> -->
<!--     </bean> -->
    
    <!-- 자신의 PC(로컬)에 MySql을 설치했을 경우 -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url"
            value="jdbc:mysql://127.0.0.1:3306/jso?useSSL=false&amp;serverTimezone=UTC">
        </property>
        <property name="username" value="jso"></property>
        <property name="password" value="oracle"></property>
    </bean>
 
    <!-- Mybatis 설정 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation"    value="classpath:/spring-mybatis-config.xml" />
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath*:/mapper/*Mapper.xml" />
    </bean>
 
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" />
    </bean>
 
    <!-- Mapper Inferface 등록 -->
    <mybatis-spring:scan base-package="kr.or.infobee.**.impl" />
 
    <!-- 트랜잭션 매니저 등록 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
 
    <!-- 트랜잭션 AOP 적용 -->
    <tx:advice id="txAdvice"
        transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 트랜잭션을 사용하지 않겠다. -->
            <tx:method name="get*" read-only="true" />
            <tx:method name="select*" read-only="true" />
            
            <!-- 트랜잭션을 사용 적용 하겠다. -->
            <!-- insertMemberItem() 이런 메소드명 -->
            <tx:method name="insert*" rollback-for="Exception" />
            <tx:method name="update*" rollback-for="Exception" />
            <tx:method name="delete*" rollback-for="Exception" />
 
            <!-- 등록 수정 삭제가 같이 있을 경우 사용 -->
            <tx:method name="put*" rollback-for="Exception" />
            
            <!-- 모든 메소드 명에 트랜젝션을 적용하겠다. -->
            <tx:method name="*" rollback-for="Exception" />
        </tx:attributes>
    </tx:advice>
 
    <aop:config>
        <aop:pointcut expression="execution(public * kr.or.infobee..impl.*(..))" id="servicePointCut" />
        <aop:pointcut expression="execution(public * kr.or.infobee.test..impl.*(..))" id="servicePointCut2" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointCut" />
    </aop:config>
 
</beans>
cs


DB 관련 설정 파일입니다. 마찬가지로 주석 처리된 부분은 Oracle(오라클) DB 사용시 필요한 부분입니다.

Oracle(오라클) DB를 사용하셔야 된다면, 아래 db.properties를 참조 해주세요.


db.properties(/src/main/resources)


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
#-----------------------------------------------------------------------
#
#   db.properties(/src/main/resources)
#
#-----------------------------------------------------------------------
 
 
 
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=jso
password=oracle
 
 
dev.driver=oracle.jdbc.driver.OracleDriver
dev.url=jdbc:oracle:thin:@localhost:1521:xe
dev.username=jso
dev.password=oracle
 
 
saveRootPath=C:\Users\infobee\Desktop\attachFiles
 
 
 
 
 
 
cs

servlet-context.xml(/src/main/webapp/WEB-INF/spring/appServlet)


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        
    <default-servlet-handler/>
 
    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
    
    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />
 
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />
    <resources mapping="/fullcalendar/**" location="/fullcalendar/" />
    <resources mapping="/css/**" location="/css/" />
    <resources mapping="/fonts/**" location="/fonts/" />
    <resources mapping="/js/**" location="/js/" />
    <resources mapping="/smarteditor/**" location="/smarteditor/" />
 
    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>
    <!-- 파일 업로드로 들어오는 데이터를 처리하는 객체 -->
    <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <beans:property name="maxUploadSize" value="10485760" /<!-- 10mb 제한 -->
    </beans:bean>
        <context:component-scan base-package="kr.or.infobee">
        <context:include-filter type="annotation" 
                    expression="org.springframework.stereotype.Controller" />
 
        <context:exclude-filter type="annotation" 
                    expression="org.springframework.stereotype.Service" />
                    
        <context:exclude-filter type="annotation" 
                    expression="org.springframework.stereotype.Repository" />            
    </context:component-scan>
    
</beans:beans>
 
cs


Spring MVC 패턴에서, 모든 요청은 서블릿이 담당합니다. 그에 따른 servlet-context 설정 소스 코드입니다.


web.xml


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <welcome-file-list>
      <welcome-file>index.do</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceRequestEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>forceResponseEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <url-pattern>/admin/*</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>org.sitemesh.config.ConfigurableSiteMeshFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/context/*-context.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
      <max-file-size>104857600</max-file-size>
      <max-request-size>104857600</max-request-size>
      <file-size-threshold>104857600</file-size-threshold>
    </multipart-config>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
cs


웹 프로젝트에 대한 context를 불러오고, main.decorator 사용을 하기 위해 설정하는 파일입니다.(sitemesh)


+ Recent posts