20. 스프링 게시판(@Controller, @RequestMapping을 이용하여 Controller변경)
구로디지털단지역 오엔제이프로그래밍 실무교육센터
Spring 게시판 구현(게시판
컨트롤러 변경, @Controller,
@RequestMapping)
:namespace
prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1.
시작하기
지금까지 우리가 사용했던
BoardMultiActionController를 Spring2.5이상에서
지원하는 @Controller, @RequestMapping, @RequestParam을 이용하여
변경하자.
2, 4번과 같이 두 개의 파일을 수정하자.
1. 기존
BoardMultiController.java
2. 새로 작성할
BoardMultiController.java
3. 기존
action-servlet.xml
4. 새로 작성할
action-servlet.xml
1. 기존
BoardMultiController.java
package onj.board.controller;
import java.io.PrintWriter;
import
java.util.Enumeration;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import onj.board.model.BoardDTO;
import
onj.board.model.CommentDTO;
import
onj.board.service.BoardService;
import org.springframework.web.servlet.ModelAndView;
import
org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import com.oreilly.servlet.MultipartRequest;
import
com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
public class BoardMultiController extends
MultiActionController {
private BoardService
boardService;
public void setBoardService(BoardService boardService)
{
this.boardService = boardService;
}
// 게시판 리스트 보기, 페이징
기능은 구현 안함
public
ModelAndView list(HttpServletRequest req,
HttpServletResponse res)
throws
Exception {
ModelAndView mv = new ModelAndView("list",
"list",
boardService.boardList());
return mv;
}
// 게시글 읽기
public ModelAndView read(HttpServletRequest req, HttpServletResponse
res)
throws Exception {
String seq =
req.getParameter("seq");
ModelAndView mav = new ModelAndView("read",
"read",
boardService.readContent(seq));
// 해당 글의 커맨트도 함께 내려
보내자.
mav.addObject("comments",
boardService.commentList(seq));
return mav;
}
// 커맨트쓰기
public ModelAndView comment(HttpServletRequest req, HttpServletResponse res)
{
String seq =
req.getParameter("seq");
CommentDTO commentDTO = new CommentDTO();
commentDTO.setSeq(seq);
commentDTO.setName(req.getParameter("name"));
commentDTO.setComment(req.getParameter("comment"));
boardService.insertComment(commentDTO);
return new ModelAndView("redirect:/read.html?seq=" +
seq);
}
// 새글(게시글) 입력
public ModelAndView write(HttpServletRequest req,
HttpServletResponse res)
throws Exception {
MultipartRequest multi = new
MultipartRequest(req,
"c:\\java\\project\\onjboard1\\upload", 5 * 1024 *
1024,
"euc-kr", new DefaultFileRenamePolicy());
Enumeration
formNames = multi.getFileNames();
String formName = (String)
formNames.nextElement();
String fileName =
multi.getFilesystemName(formName);
String name = multi.getParameter("name");
String passwd =
multi.getParameter("passwd");
String title =
multi.getParameter("title");
String content =
multi.getParameter("content");
BoardDTO board = new BoardDTO(name, passwd, title, content,
fileName);
boardService.insertBoard(board);
return new
ModelAndView("redirect:/list.html");
}
// 게시글 수정
public ModelAndView update(HttpServletRequest req, HttpServletResponse
res)
throws Exception
{
String seq =
req.getParameter("seq");
String name =
req.getParameter("name");
String passwd =
req.getParameter("passwd");
String title =
req.getParameter("title");
String content =
req.getParameter("content");
BoardDTO board = new BoardDTO(name, passwd, title, content,
"");
board.setSeq(Integer.parseInt(seq));
boardService.updateBoard(board);
return new ModelAndView("redirect:/read.html?seq="
+
req.getParameter("seq"));
}
// 게시글 삭제
public ModelAndView delete(HttpServletRequest req, HttpServletResponse
res)
throws Exception
{
String
seq = req.getParameter("seq");
String passwd =
req.getParameter("passwd");
int result =
boardService.deleteBoard(seq, passwd);
if (result != 1) {
PrintWriter out =
res.getWriter();
out.println("<script>alert('password not
correct');</script>");
out.println("<script>history.go(-1);</script>");
return
null;
} else {
return new
ModelAndView("redirect:/list.html");
}
}
// 게시물상세보기에서 답변 클릭시 호출되어 답변달 reply.jsp로 연결
public ModelAndView reply(HttpServletRequest req, HttpServletResponse res) throws
Exception {
String seq =
req.getParameter("seq");
// 답변달 게시물 내용을 reply.jsp
넘긴다.
ModelAndView mav = new ModelAndView("reply",
//view이름
"reply",
//readContent가 넘기는
boardDTO의 이름, reply.jsp에서 사용
boardService.readContent(seq));
return mav;
}
// 답글 저장
public ModelAndView
replyok(HttpServletRequest req, HttpServletResponse res)
throws
Exception {
String seq =
req.getParameter("seq");
String name =
req.getParameter("name");
String passwd =
req.getParameter("passwd");
String title =
req.getParameter("title");
String content =
req.getParameter("content");
String fileName = "";
String reply =
req.getParameter("reply");
String reply_step =
req.getParameter("reply_step");
String reply_level =
req.getParameter("reply_level");
BoardDTO boardDTO = new BoardDTO(name,
passwd, title, content, fileName);
boardDTO.setSeq(Integer.parseInt(seq));
boardDTO.setReply(Integer.parseInt(reply));
boardDTO.setReply_level(Integer.parseInt(reply_level));
boardDTO.setReply_step(Integer.parseInt(reply_step));
boardService.replyBoard(boardDTO);
return new
ModelAndView("redirect:/list.html");
}
}
2. 새로
작성할
BoardMultiController.java
package onj.board.controller;
import java.io.PrintWriter;
import
java.util.Enumeration;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import onj.board.model.BoardDTO;
import
onj.board.model.CommentDTO;
import
onj.board.service.BoardService;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestParam;
import
org.springframework.web.servlet.ModelAndView;
import
org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import com.oreilly.servlet.MultipartRequest;
import
com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
@Controllerpublic
class BoardMultiController { @Autowired private
BoardService boardService;
// 게시판 리스트 보기, 페이징
기능은 구현 안함
@RequestMapping("/list") public ModelAndView
list() {
ModelAndView mv = new ModelAndView("list",
"list",
boardService.boardList());
return mv;
}
// 게시글 읽기
@RequestMapping("/read") public
ModelAndView read(@RequestParam("seq") String
seq) {
ModelAndView mav = new ModelAndView("read",
"read",
boardService.readContent(seq));
//
해당 글의 커맨트도 함께 내려 보내자.
mav.addObject("comments",
boardService.commentList(seq));
return mav;
}
// 커맨트쓰기
@RequestMapping("/comment") public ModelAndView
comment(
@RequestParam("seq")
String seq,
@RequestParam("name") String
name,
@RequestParam("comment") String comment ) {
CommentDTO commentDTO = new
CommentDTO();
commentDTO.setSeq(seq);
commentDTO.setName(name);
commentDTO.setComment(comment);
boardService.insertComment(commentDTO);
return new ModelAndView("redirect:/read.html?seq=" +
seq);
}
// 새글(게시글) 입력
@RequestMapping("/write") public ModelAndView
write(HttpServletRequest req, HttpServletResponse res)
throws Exception
{
MultipartRequest multi = new
MultipartRequest(req,
"c:\\java\\project\\onjboard1\\upload", 5 * 1024 *
1024,
"euc-kr", new DefaultFileRenamePolicy());
Enumeration
formNames = multi.getFileNames();
String formName = (String)
formNames.nextElement();
String fileName =
multi.getFilesystemName(formName);
String name = multi.getParameter("name");
String passwd =
multi.getParameter("passwd");
String title =
multi.getParameter("title");
String content =
multi.getParameter("content");
BoardDTO board = new BoardDTO(name, passwd, title, content,
fileName);
boardService.insertBoard(board);
return new
ModelAndView("redirect:/list.html");
}
// 게시글 수정
@RequestMapping("/update") public ModelAndView
update(
@RequestParam("seq") String
seq,
@RequestParam("name") String
name,
@RequestParam("passwd") String
passwd,
@RequestParam("title") String
title,
@RequestParam("content") String content )
{
BoardDTO board = new BoardDTO(name, passwd, title, content,
"");
board.setSeq(Integer.parseInt(seq));
boardService.updateBoard(board);
return new ModelAndView("redirect:/read.html?seq=" +
seq);
}
// 게시글 삭제
@RequestMapping("/delete") public ModelAndView
delete(
@RequestParam("seq") String
seq,
@RequestParam("passwd") String
passwd, HttpServletResponse res
) throws
Exception{
int result = boardService.deleteBoard(seq,
passwd);
if (result != 1) {
PrintWriter out =
res.getWriter();
out.println("<script>alert('password not
correct');</script>");
out.println("<script>history.go(-1);</script>");
return
null;
} else {
return new
ModelAndView("redirect:/list.html");
}
}
// 게시물상세보기에서 답변 클릭시 호출되어 답변달 reply.jsp로 연결
@RequestMapping("/reply") public ModelAndView
reply(@RequestParam("seq") String seq)
{
// 답변달 게시물 내용을 reply.jsp
넘긴다.
ModelAndView mav = new ModelAndView("reply",
//view이름
"reply",
//readContent가 넘기는
boardDTO의 이름, reply.jsp에서 사용
boardService.readContent(seq));
return mav;
}
// 답글 저장
@RequestMapping("/replyok") public ModelAndView
replyok(
@RequestParam("seq") String seq,
@RequestParam("name") String name,
@RequestParam("passwd")
String passwd,
@RequestParam("title") String
title,
@RequestParam("content") String content,
@RequestParam("reply") String reply,
@RequestParam("reply_step")
String reply_step,
@RequestParam("reply_level") String
reply_level ) {
BoardDTO boardDTO = new BoardDTO(name, passwd, title, content,
"");
boardDTO.setSeq(Integer.parseInt(seq));
boardDTO.setReply(Integer.parseInt(reply));
boardDTO.setReply_level(Integer.parseInt(reply_level));
boardDTO.setReply_step(Integer.parseInt(reply_step));
boardService.replyBoard(boardDTO);
return new
ModelAndView("redirect:/list.html");
}
}
3. 기존
action-servlet.xml
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property
name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property
name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:onj</value>
</property>
<property
name="username">
<value>scott</value>
</property>
<property
name="password">
<value>tiger</value>
</property>
</bean>
<!-- 넘어오는 URL에
따라 컨트롤러에서 실행될 메소드 매핑
-->
<!-- PropertiesMethodNameResolver는 prop
key로 넘어오는 url에 대해 실행할 컨트롤러의
메소드
정의
-->
<bean
id="userControllerMethodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property
name="mappings">
<props>
<!-- list.html 요청이 오면
컨트롤러의 list 메소드 실행 -->
<prop
key="/list.html">list</prop>
<!-- read.html
요청이 오면 컨트롤러의 read 메소드 실행 -->
<prop
key="/read.html">read</prop>
<!-- comment.html
요청이 오면 컨트롤러의 comment 메소드 실행 -->
<prop
key="/comment.html">comment</prop>
<!-- write.html
요청이 오면 컨트롤러의 write 메소드 실행 -->
<prop
key="/write.html">write</prop>
<!-- update.html
요청이 오면 컨트롤러의 update 메소드 실행 -->
<prop
key="/update.html">update</prop>
<!--
delete.html 요청이 오면 컨트롤러의 delete 메소드
실행
-->
<prop
key="/delete.html">delete</prop>
<!-- reply.html
요청이 오면 컨트롤러의 reply 메소드 실행 -->
<prop
key="/reply.html">reply</prop>
<!-- replyok.html
요청이 오면 컨트롤러의 replyok 메소드 실행 -->
<prop
key="/replyok.html">replyok</prop>
</props>
</property>
</bean>
<!-- 뷰 리졸버 -->
<bean
id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property
name="prefix">
<value>/jsp/</value>
</property>
<property
name="suffix">
<value>.jsp</value>
</property>
</bean>
<!--
컨트롤러 매핑
-->
<bean name="/list.html /read.html /comment.html /write.html
/update.html /delete.html /reply.html /replyok.html"
class="onj.board.controller.BoardMultiController">
<property
name="methodNameResolver">
<ref
local="userControllerMethodNameResolver"
/>
</property>
<property
name="boardService">
<ref bean="boardService"
/>
</property>
</bean>
</beans>
4. 새로
작성할 action-servlet.xml
<context:component-scan
base-package="onj.board.controller"/>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property
name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property
name="url">
<value>jdbc:oracle:thin:@192.168.0.7:1521:orcl</value>
</property>
<property
name="username">
<value>scott</value>
</property>
<property
name="password">
<value>tiger</value>
</property>
</bean>
<!-- 뷰 리졸버 -->
<bean
id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property
name="prefix">
<value>/jsp/</value>
</property>
<property
name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
오라클자바커뮤니티 추천강좌-JAVA&WEB프레임워크실무과정
(8/31온라인 지원가능!! 홈페이지에서 지원신청 바랍니다.)

| 강좌명 |
JAVA&WEB프레임워크실무과정(주말주간(토/일)) |
| 교재 |
자체교재 무료제공 |
| 강좌 일정 |
09월01일(일) ~ 10월26일(토)((주말주간(토/일)) 10:00~18:00, 14일) 총
98시간 |
| 강의 장소 |
[B강의장]구로디지털단지역2번 출구-> 미니스톱끼고 우회전 -> 100m 직진
후 골목길 끝에서 이마트방향 우회전 -> 50m 직진 후 우체국 옆골목으로 길건너서 직진 -> 150미터 직진 후 JnK 타워에서
우회전 -> 50미터 직진 후 우측에 코오롱빌란트2차 803호 (구로구 구로3동 222-8 코오롱디지털타워 빌란트2차
803호) [약도보기] |
| 수강절차 |
- 강좌내용 확인 - 전화 또는 홈페이지(www.onjprogramming.co.kr)를 통한 수강지원 및 수강료 결제(무통장입금, 온라인
카드결제) - 고용보험 가입자(재직자)인 경우 고용보험환급 관련 서류 제출 - 수강전 : 커리큘럼 및 장소에 대해 다시 한번
공지 - 교육 전 설문 작성(간단한 개발 경력, 수강 목적, 강좌진행방식 등) - 강좌 수강 - 수강후 : 교육 후 설문
작성 |
| 수강료 |
- 1,200,000원 [고용주환급]대기업:40만원
전후,중소기업:48만원 전후 환급 [개인수강지원(개인환급)]정규직960,000원 ,비정규직:전액환급
대기업(상시근로자
300인 이상 대기업)은 개인환급 불가합니다.
재직자 내일배움카드 : 정부지원금 80% 자기부담금 20% (구 능력개발카드
명칭이 내일배움카드로 변경 / 연간 총한도 200만원
* 휴강 :법정공휴일 / 추석 연휴 9월17일
휴강 |
수강료 입금안내 |
- 온/오프라인 카드결제, 계좌이체(수강안내->입금안내 참조) |
| 문의사항 |
02-851-4790 번으로 연락 부탁 드립니다. |
| 교육개요 |
본과정은 프로그래밍 언어의 경험이 있는 분이지만 자바를 처음하시는 분들을 위해 현장에서 필요로 하는 기술들을 최적화된 커리큘럼 및
강사를 통해 배울 수 있도록 하는 과정 입니다.
자바의 기본적인 사항부터 JDBC 프로그래밍, 모든 개발의 근간이 되는
자바네트워크 프로그래밍(이거 안하시면 2~3년지나서 UI개발자의 틀을 벗어 날 수 없습니다), 자바웹의 기본이되는 JSP, 그리고 최근 가장널리
사용되는 Ajax, jQuery를 통해 화면 깜박임없이 웹페이지를 역동적으로 구성할 수 있도록 배우고 최근 가장 많이 사용되는 JAVA기반의
프레임워크인 Spring Framework, SQL Data Mapper인 MyBatis까지 배울 수 있는 과정으로 자바 웹 개발자로 가시고자 하는 분들을 위한 최적의 과정 입니다.
본과정을 통해 기초부터 하나씩
배우신다면 내공 있는 자바 개발자가 되실것을 확신합니다!
|
| 교육목표 |
- 자바 기본문법의 이해 - 자바 네트워크 프로그래밍에 대한 이해 - JDBC 개발에 대한 이해 - 자바 웹개발에 대한
이해 - JSP의 작동원리 및 기본문법의 이해 - Ajax 및 jQuery에 대한 이해 - WAS(Web Application
Server) 및 Web Server에 대한 이해 - 자바기반 프레임워크에 대한 이해(Spring3.X) - SQL
Mapper(MyBatis)에 대한 이해 - 실무 자바기술의 전반적인 이해 및 활용 |
| 교육대상 |
- 자바 초보 개발자 - 신입개발자 - 다른 언어를 사용하다가 자바쪽으로 전향을 원하는 개발자 - 자바를 배우고자 하는
학생 |
| 선수학습 |
- 프로그래밍에 대한 이해 |

| Java Fundamental |
자바 언어 소개,기본 문법 Virtual Machine 소개/메모리 영역 클래스 패스(Class Path)
개요 Array 이론/실습 클래스와 객체(Class & Object) Abstarct Data Type,
상속(Inheritance)과 다형성 추상클래스(Abstract Class)와 다형성 인터페이스(Interface)와
다형성 연관(Aggregation & Composition) 오버로딩(OverLoading)과
오버라이딩(Overriding) this/super/constructor Package 만들기 이론/실습 Java에서 예외 처리
요령 사용자 예외 처리 방법 스트림(Stream) 입출력 관련 클래스,
InputStream/OutputStream, FileInputStream/FileOutputStream Reader/Writer등
입출력 관련 클래스 표준 입출력/FILE 처리, 객체 직렬화 이론/실습 Thread 개요 Java에서의
Process Thread Joining/Interrupt |
| Java Network |
URL/HTTP URL, URLConnection, HttpURLConnection, URLEncoding, URLDecoding 클래스
개요 URL을 다루는 예제 실습(Get/Post)
Client Socket과 Server Socket의
개요 MultiThread EchoServer Socket을 이용한 예제 구현
UDP
Programming(Multicasting programming) UDP/Datagram 개요 DatagramSocket,
DatagramPacket 소개 UDP를 이용한 예제 구현 Multicast 소개 Multicast Client/Server
구현 Distributed Computing(java RMI) Distributed Computing, Object
소개 Java RMI를 이용한 “Hello World” 제작 RMI 응용예제 실습 |
| JDBC Programming |
JDBC Driver 소개 JDBC 연결방법 Connection, Statement, ResultSet,
PreparedStatement Oracle의 function, procedure 다루기 DBCP, DataSource,
Connection Pool |
| JSP(Java Server Page) |
JSP 기본문법, 작동원리 JSP 내장 객체,Java Beans JSP에서의 Session, Cookie
다루기 Custom Tag MVC Model(Model2)의 이해 및 활용 |
| Ajax/jQuery |
Ajax 개발환경 구축 왜 Ajax 인가? Ajax의 기본 구성 XMLHttpRequest
객체 innerHTML의 사용 DOM(Document Object Model) 다루기 Ajax MVC jQuery
소개, 개요 jQuery 응용 예제 |
| Spring Framework3.2 |
J2EE Framework에 대한 흐름과 Spring Framework에 대한 이해 개발 환경 설정(Eclipse4.2,
Tomcat7, Spring3.2 다운로드 및 설치) Spring IoC DL(Dependency LookUp)
&DI(Dependency Injection) DL. DI 예제를 통한 이해 Spring 설정 상세 Spring AOP
란 ?Code, Advice, JoinPoint, PointCut, Aspect,
WeavingProxyFactoryBean Annotation기반 AOP(AspectJ) Spring JDBC Spring
Web MVC Sprint Web Flow Spring Controller Spring MVC TEST
Framework Spring3.2 New Feature |
| MyBatis/Hibernate |
[MyBatis] 개요 및 소개 개발환경 설정 및 설치 Data Mapper란 sqlMapConfig 이해 및
환경설정 Spring, MyBatis 연동 SQL Map XML File 이해 SqlMapClient 이해 SQL의
실행(Insert/update/delete) 이해와 실습 고급 쿼리 사용방법의 이해와 실습 Spring MyBatis 응용예제
작성
[Hibernate] Hibernate 소개 SessionFactory 설정 1:1, 1:다
매핑 Session Interface Hibernate DML Spring, Hibernate 예제 프로그램
작성 |
| Mini Project |
Spring 게시판 작성 실습 -- 게시판 구현에 대해 철저하게 이해한다면 실무에서의 개발도 충분히 가능 합니다. |