728x90
반응형
springmvc2/pom.xml
<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.kic</groupId>
<artifactId>springmvc2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>springmvc2 Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.30.RELEASE</spring.version>
<spring.version1>5.3.18</spring.version1>
<spring.version2>5.2.19.RELEASE</spring.version2>
<spring.version3>4.3.30.RELEASE</spring.version3>
</properties>
<!-- 원격 저장소 설정 : mvnrepository.com : 기본 원격 저장소 이외의 저장소 사용시 설정 -->
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring websocket을 위한 설정 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring db 설정 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 오라클 관련 설정 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc5</artifactId>
<version>11.2.0.2.0</version>
</dependency>
<!-- jstl 설정 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 유효성 검증 설정 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
<!-- 파일 업로드 설정 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>2.1</version>
</dependency>
<!-- AOP 설정 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<!-- sitemesh 설정 -->
<!-- http://mvnrepository.com/artifact/org.sitemesh/sitemesh -->
<dependency>
<groupId>org.sitemesh</groupId>
<artifactId>sitemesh</artifactId>
<version>3.0.1</version>
</dependency>
<!-- Connection Pool 관련 설정 -->
<!-- spring-db.xml에 Connection 관련 설정-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.3</version>
</dependency>
<!-- MyBatis 관련 설정-->
<!-- http://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- jsoup 설정 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
<!-- json 설정-->
<!-- http://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<!--
@ResponseBody에서 Collection 객체를 직접 브라우저에 전달하기 위한 설정
List 객체 : Array 객체
Map 객체 : Json형태 객체
-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.2</version>
</dependency>
<!-- http://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
</dependencies>
<build>
<finalName>springmvc2</finalName>
<!-- pom.xml의 첫번째 줄에 maven-war-plugin관련 오류 발생시 코딩 -->
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
</project>
chat.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- /springmvc2/src/main/webapp/WEB-INF/view/chat/chat.jsp : 채팅화면 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<title>Websocket client</title>
<%-- http://localhost:8088/springmvc2/chat/chat --%>
<%-- 요청 URL의 포트번호 : 8088 --%>
<c:set var="port" value="${pageContext.request.localPort}" />
<%-- 요청 URL의 ip주소 : localhost --%>
<c:set var="server" value="${pageContext.request.serverName}" />
<%-- 프로젝트이름. 웹컨텍스트 이름 --%>
<c:set var="path" value="${pageContext.request.contextPath}" />
<script>
$(function() {
//ws : websocket의 약자. 프로토콜 이름
// ws://localhost:8088/springmvc2/chatting 요청
let ws = new WebSocket ("ws://${server}:${port}${path}/chatting"); //접속요청
ws.onopen = function() { //접속완료
$("#chatStatus").text("info:connection opened")
//keydown : key 이벤트 처리. 리스너 등록
$("input[name=chatInput]").on("keydown", function(evt) {
//evt : key이벤트객체
if(evt.keyCode == 13) { //enter키가 눌려진 경우
var msg = $("input[name=chatInput]").val();
ws.send(msg); //서버에 데이터 전송
$("input[name=chatInput]").val(""); //입력된 내용을 지우기.
}
})
}
//서버로부터 메세지 수신
ws.onmessage = function(event) {
//prepend : 첫줄에 추가
//append : 마지막줄에 추가
//event.data : 서버에서 전송한 메세지 내용
$("textarea").eq(0).prepend(event.data + "\n");
}
//서버와 전송이 끝난 경우.
ws.onclose = function(event) {
$("chatStatus").text("info:connection clise");
}
})
</script>
</head>
<body>
<p>
<div id="chatStatus"></div>
<textarea name="chatMsg" rows="15" cols="40"></textarea><br>
메세지 입력 : <input type="text" name="chatInput">
</body>
</html>
EchoHandler.java
package websocket;
import java.util.HashSet;
import java.util.Set;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
@Component //echoHandler 이름으로 객체화
public class EchoHandler extends TextWebSocketHandler implements InitializingBean {
private Set<WebSocketSession> clients = new HashSet<WebSocketSession>();
@Override //클라이언트와 연결완료시 호출되는 메서드
//session : 웹소켓으로부터 연결된 객체. 클라이언트와 연결된 객체.
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
super.afterConnectionEstablished(session); //현재 핸들러 객체와 연결. 클라이언트 객체 한개.
System.out.println("클라이언트 접속 : " + session.getId());
clients.add(session); //클라이언트 객체를 Set에 추가
}
//클라이언트에서 메세지 수신된 경우 호출되는 메서드
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
String loadMessage = (String)message.getPayload(); //수신된 메세지의 내용
System.out.println(session.getId() + ":클라이언트 메세지:" + loadMessage);
clients.add(session); //clients 객체에 추가
for(WebSocketSession s : clients) {
s.sendMessage(new TextMessage(loadMessage)); //클라이언트로 메세지 전송
}
}
@Override
//클라이언트에 전송시 오류 발생된 경우 호출되는 메서드
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
super.handleTransportError(session, exception);
System.out.println("오류발생 : " + exception.getMessage());
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
super.afterConnectionClosed(session, status);
System.out.println("클라이언트 접속 해제 : " + status.getReason());
clients.add(session);
}
@Override
public void afterPropertiesSet() throws Exception { }
}
BoardMapper.java
package dao.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import logic.Board;
public interface BoardMapper {
@Select("select count(*) from board where boardid=#{boardid}")
int count(String boardid);
@Select("select * from "
+ "(select rownum rnum, num, writer, subject, content, file1 fileurl, regdate, "
+ " grp, grplevel, grpstep, pass, readcnt from "
+ "(select * from board where boardid =#{boardid} order by grp desc, grpstep asc))"
+ " where rnum >= #{startrow} and rnum <= #{endrow}")
List<Board> list(Map<String, Object> param);
@Insert("insert into board "
+ "(num, writer, pass, subject, content, file1, boardid, regdate, readcnt, grp, grplevel, grpstep, ip)"
+ "values "
+ "(#{num}, #{writer}, #{pass}, #{subject}, #{content}, #{fileurl}, #{boardid}, sysdate, 0, #{grp}, #{grplevel}, #{grpstep}, #{ip})")
void write(Board board);
@Select("select nvl(max(num),0) from board")
int maxNum(Map<String, Object> param);
@Select("select num, writer, subject, content, file1 as fileurl, regdate, "
+ " grp, grplevel, grpstep, pass, readcnt, boardid from board where num=#{num}")
Board selectOne(Map<String, Object> param);
@Update("update board set readcnt = readcnt + 1 where num=#{num}")
void readcntadd(Integer num);
@Update("update board set writer=#{writer}, subject=#{subject}, content=#{content}, "
+ " file1=#{fileurl} where num=#{num}")
void update(Board board);
@Update("update board set grpstep = grpstep+1 "
+ " where grp=#{grp} and grpstep >#{grpstep}")
void grpStepAdd(Board board);
@Insert("insert into board "
+ " (num, writer, pass, subject, content, file1, boardid, regdate, readcnt, grp, grplevel, grpstep, ip)"
+ " values "
+ " (#{num}, #{writer}, #{pass}, #{subject}, #{content}, #{fileurl}, #{boardid}, sysdate, 0, #{grp}, #{grplevel}, #{grpstep}, #{ip})")
void reply(Board board);
@Delete("delete from board where num=#{num}")
void delete(int num);
@Select("select num, writer, subject, readcnt from board where boardid=#{value}")
List<Map<String, Object>> boardlist(String boardid);
}
kiclayout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath }" />
<!DOCTYPE html>
<html>
<head>
<title><sitemesh:write property='title'/>
</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="${path}/css/main.css">
<style>
html,body,h1,h2,h3,h4,h5 {font-family: "Raleway", sans-serif}
#footer {position: fixed; bottom: 50px;}
</style>
<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<%-- 글작성시 다양한 형태 사용 가능 --%>
<script type="text/javascript"
src="http://cdn.ckeditor.com/4.5.7/standard/ckeditor.js"></script>
<sitemesh:write property='head'/>
</head>
<body class="w3-light-grey">
<!-- Top container -->
<div class="w3-bar w3-top w3-black w3-large" style="z-index:4">
<button class="w3-bar-item w3-button w3-hide-large w3-hover-none w3-hover-text-light-grey" onclick="w3_open();"><i class="fa fa-bars"></i> Menu</button>
<span class="w3-bar-item w3-right">
<c:if test="${empty sessionScope.loginUser}">
<a href="${path}/user/login">로그인</a>
<a href="${path}/user/userEntry">회원가입</a>
</c:if>
<c:if test="${!empty sessionScope.loginUser}">
${sessionScope.loginUser.username}님이 로그인 하셨습니다.
<a href="${path}/user/logout">로그아웃</a>
</c:if>
</span>
</div>
<!-- Sidebar/menu -->
<nav class="w3-sidebar w3-collapse w3-white w3-animate-left" style="z-index:3;width:200px;" id="mySidebar"><br>
<div class="w3-container w3-row">
<img src="${path}/image/logo.png"
class="w3-circle w3-margin-right"
style="width:100px;">
<div class="w3-row"> </div>
<div class="w3-row">
<c:if test="${!empty sessionScope.loginUser}">
<span>반갑습니다. <strong>${sessionScope.loginUser.username }님</strong></span>
</c:if>
<c:if test="${empty sessionScope.loginUser}">
<span><strong>로그인하세요</strong></span>
</c:if>
<br>
</div>
</div>
<hr>
<div class="w3-bar-block">
<a href="#" class="w3-bar-item w3-button w3-padding-16 w3-hide-large w3-dark-grey w3-hover-black" onclick="w3_close()" title="close menu"><i class="fa fa-remove fa-fw"></i> Close Menu</a>
<a href="${path}/user/mypage?id=${loginUser.userid}" class="w3-bar-item w3-button w3-padding"><i class="fa fa-eye fa-fw"></i> 회원관리</a>
<a href="${path}/item/list" class="w3-bar-item w3-button w3-padding"><i class="fa fa-eye fa-fw"></i> 상품관리</a>
<hr>
<a href="${path}/board/list?boardid=1" class="w3-bar-item w3-button w3-padding"><i class="fa fa-users fa-fw"></i> 공지사항</a>
<a href="${path}/board/list?boardid=2" class="w3-bar-item w3-button w3-padding"><i class="fa fa-users fa-fw"></i> 자유게시판</a>
<a href="${path}/board/list?boardid=3" class="w3-bar-item w3-button w3-padding"><i class="fa fa-users fa-fw"></i> QNA</a>
<hr>
<a href="${path}/chat/chat" class="w3-bar-item w3-button w3-padding">
<i class="fa fa-bullseye fa-fw"></i> 채팅
</a>
</div>
<br><br>
<div class="w3-container">
<div id="exchange1"></div> <%-- ajax을 통해 얻은 수출입은행 환율 정보 내용 출력 --%>
</div>
<br>
<div class="w3-container">
<div id="exchange2"></div> <%-- ajax을 통해 얻은 KEB하나은행 환율 정보 내용 출력 --%>
<br>
</div> <br>
<br>
<br>
</nav>
<div class="w3-overlay w3-hide-large w3-animate-opacity" onclick="w3_close()" style="cursor:pointer" title="close side menu" id="myOverlay"></div>
<!-- !PAGE CONTENT! -->
<div class="w3-main"
style="margin-left:200px;margin-top:43px; margin-right: 20px;">
<div class="w3-row-padding w3-margin-bottom">
<div class="w3-container w3-light-grey w3-padding-32">
<div class="w3-row">
<div class="w3-container w3-col" style="width:95%;">
<sitemesh:write property='body'/>
</div>
<div class="w3-container w3-col" style="width:5%;">
<p> </p>
</div>
</div>
</div>
</div>
<!-- End page content -->
</div>
<br>
<%-- 시군구 선택 --%>
<div style="margin-left:200px;">
<span id="si">
<select name="si" onchange="getText('si')">
<option value="">시도를 선택하세요.</option>
</select>
</span>
<span id="gu">
<select name="gu" onchange="getText('gu')">
<option value="">구군를 선택하세요.</option>
</select>
</span>
<span id="dong">
<select name="dong" onchange="getText('dong')">
<option value="">동리를 선택하세요.</option>
</select>
</span>
</div>
<script>
// Get the Sidebar
var mySidebar = document.getElementById("mySidebar");
// Get the DIV with overlay effect
var overlayBg = document.getElementById("myOverlay");
// Toggle between showing and hiding the sidebar, and add overlay effect
function w3_open() {
if (mySidebar.style.display === 'block') {
mySidebar.style.display = 'none';
overlayBg.style.display = "none";
} else {
mySidebar.style.display = 'block';
overlayBg.style.display = "block";
}
}
// Close the sidebar with the close button
function w3_close() {
mySidebar.style.display = "none";
overlayBg.style.display = "none";
}
$(function() {
exchangeRate1(); //수출입은행 환율정보
exchangeRate2(); //KEB하나은행 환율정보
///////////////////////////////////////
let divid;
let si;
$.ajax({
url : "${path}/ajax/select",
success : function(data) {
// console.log(data)
let arr = data.substring(data.indexOf('[') + 1, data.indexOf(']')).split(",");
$.each(arr,function(i, item) {
$("select[name='si']").append(function() {
return "<option>" + item + "</option>"
})
});
}
})
})
function getText(name) {
let cityval = $("select[name='si']").val();
let guval = $("select[name='gu']").val();
let disname;
let toptext="구군을 선택하세요.";
let params = "";
if (name =="si") {
params = "si=" + cityval.trim();
disname = "gu"; //결과값이 출력 될 영역
} else if (name == "gu") {
// si = 서울특별수 & gu = 강남구
params = "si=" + cityval.trim() + "&gu=" + guval.trim();
disname = "dong";
toptext = "동리를 선택하세요."
} else {
return;
}
$.ajax({
url : "${path}/ajax/select",
type : "POST",
data : params,
success : function(data) {
let arr = data.substring(data.indexOf('[')+1,data.indexOf(']')).split(",");
let selhtml = "<select name='" + disname + "' onchange='getText(\"" + disname + "\")'>";
selhtml += "<option value=''>" + toptext + "</option>"
$.each(arr,function(i,item){
selhtml += "<option>" + item + "</option>"
});
selhtml += "</select>";
$("#" + disname).html(selhtml);
}
})
}
function exchangeRate1() {
$.ajax("${path}/ajax/exchange1",{
success : function(json) {
console.log(json)
let html = "<table class='nopadding'>"
html += "<caption>수출입은행<br>" + json.date + "</caption>"
html += "<tr><th>통화</th><th>기준율</th><th>받을때</th><th>파실때</th></tr>";
$.each(json.list, function(i, obj) {
html += "<tr><td>" + obj[0] + "<br>" + obj[1] + "</td>"
html += "<td>" + obj[2] + "</td>"
html += "<td>" + obj[3] + "</td>"
html += "<td>" + obj[4] + "</td></tr>"
})
$("#exchange1").html(html + "</table>");
},
error : function(e) {
alert("환율 조회시 서버 오류 :" + e.status)
}
})
}
</script>
</body></html>
ChatController.java
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("chat")
public class ChatContoller {
@RequestMapping("*")
public String chat() {
return null;
}
}
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- /src/main/resources/spring-mvc.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/websocket
http://www.springframework.org/schema/websocket/spring-websocket-4.1.xsd">
<mvc:default-servlet-handler /> <!-- css, js, html 웹에서 제공되는 파일의 기본 기능 -->
<!--
http://localhost:8088/springmvc1/item/list
=> ItemController 클래스를 선택
-->
<bean class=
"org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<!-- controller,logic,dao 패키지를 먼저 scan해서 @Component를 가진 클래스의 객체 생성 -->
<context:component-scan base-package="controller,logic,dao,aop,websocket" />
<!-- web 환경에서 객체 주입을 위한 설정 : @Autowired, @Controller... 기능 사용 -->
<mvc:annotation-driven />
<!-- AOP 기능 수행 -->
<aop:aspectj-autoproxy />
<!-- 뷰결정자 : jsp 페이지의 위치 지정 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<!-- /WEB-INF/view/item/list.jsp : 뷰 지정 -->
<property name="prefix"><value>/WEB-INF/view/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
<!--
파일 업로드 설정 : enctype="multipart/form-data"형식의 요청이 들어오면 구동.
maxUploadSize : 100M. 최대 업로드 가능 크기
maxInMemorySize : 10M. 10M까지는 메모리에 파일의 내용 저장
-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:maxUploadSize="104854600" p:maxInMemorySize="10485460">
</bean>
<!--
message 코드값을 저장한 properties 파일을 설정 : message.properties
message 처리를 위한 설정
-->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list><value>messages</value></list>
</property>
</bean>
<!-- 예외처리 -->
<bean id="exceptionHandler"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<value>exception.LoginException=exception
exception.CartException=exception
exception.BoardException=exception</value>
</property>
</bean>
<!-- 인터셉터 기능 설정 : 특정 url들은 BoardInterceptor를 태운다.-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/board/write"/> <!-- 요청 URL 정보 -->
<mvc:mapping path="/board/update"/> <!-- 요청 URL 정보 -->
<mvc:mapping path="/board/delete"/> <!-- 요청 URL 정보 -->
<mvc:mapping path="/board/reply"/> <!-- 요청 URL 정보 -->
<bean class="interceptor.BoardInterceptor" /> <!-- 인터셉터 클래스 객체 -->
</mvc:interceptor>
</mvc:interceptors>
<!-- websocket 관련 설정 -->
<websocket:handlers>
<!-- /chatting 요청시 echoHandler 객체로 사용 -->
<websocket:mapping handler="echoHandler" path="/chatting"/>
</websocket:handlers>
</beans>
728x90
반응형