스프링 MVC 패턴 기본 방식으로 DB 연동 (방법2: SimpleUrlHandlerMapping)
게시판 : 상세화면, 입력화면 만들기
1. servlet-context.xml
설정 파일에 SimpleUrlHandlerMapping 관련 항목을 추가한다.
<!-- SimpleUrlHandlerMapping 설정 -->
<beans:bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="mappings">
<beans:props>
<beans:prop key="/board_detail.do">boardDetailController</beans:prop>
<beans:prop key="/board_delete.do">boardDetailController</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
<beans:bean id="/board_detail.do" class="spring.mvc.controller.BoardDetailController" >
<beans:property name="boardDao" ref="boardDao" />
</beans:bean>
※ 스프링에서는 클래스의 빈 객체를 생성할 때 이름을 별도로 지정해주지 않으면 첫글자를 소문자로 바꿔준 이름을 아이디로 설정한다.
심플URL핸들러 매핑에서는 prop에 key로 ~.do 이런식으로 실행할 것을 추가하는 것으로 각 ~.do 명령들을 정의내릴 수 있다.
2. 상세화면 컨트롤러
package spring.mvc.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import spring.mvc.dao.BoardDao;
import spring.mvc.dao.BoardDto;
public class BoardDetailController implements Controller {
private BoardDao boardDao;
public void setBoardDao(BoardDao boardDao) {
this.boardDao = boardDao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
String strSeq = arg0.getParameter("seq");
int seq = Integer.parseInt(strSeq);
BoardDto dto =boardDao.findBySeq(seq);
ModelAndView mav = new ModelAndView();
mav.setViewName("detail");
mav.addObject("board", dto);
return mav;
}
}
3. 상세화면 jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
function fnList() {
location.href ="board_list.do";
}
</script>
</head>
<body>
<div align = "center">
<h1>상세 글 보기</h1>
<table border="1" align="center">
<tr>
<td>글번호</td><td>${board.seq}</td>
</tr>
<tr>
<td>제목</td><td>${board.title}</td>
</tr>
<tr>
<td>내용</td><td><textarea rows="5" cols=30"">${board.content}</textarea></td>
</tr>
<tr>
<td colspan = "2" align="center" />
<input type="button" value="수정" onclick="fnList()" />
<input type="button" value="삭제" onclick="fnList()" />
<input type="button" value="목록" onclick="fnList()" />
</td>
</tr>
</table>
</div>
</body>
</html>
4. 입력 컨트롤러
package spring.mvc.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import spring.mvc.dao.BoardDao;
import spring.mvc.dao.BoardDto;
@Controller
public class BoardInsertController {
private BoardDao boardDao;
public void setBoardDao(BoardDao boardDao) {
this.boardDao = boardDao;
}
@RequestMapping(value ="/board_insert.do", method=RequestMethod.GET)
public ModelAndView insertForm(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
return new ModelAndView("insert");
}
@RequestMapping(value ="/board_insert.do", method=RequestMethod.POST)
public ModelAndView insertResult(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
String title = arg0.getParameter("title");
String writer = arg0.getParameter("writer");
String content = arg0.getParameter("content");
BoardDto dto = new BoardDto();
dto.setTitle(title);
dto.setWriter(writer);
dto.setContent(content);
boardDao.insert(dto);
return new ModelAndView("redirect:board_list.do");
// send redirect를 할 때엔 redirect: , forward 할 때엔 forward: 사용
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글쓰기 폼</title>
</head>
<body>
<div align="center">
<form action="board_insert.do" method="post">
<fieldset>
<legend>글쓰기</legend>
<table border="1">
<tr>
<td>제목</td><td><input type="text" name="title" /></td>
</tr>
<tr>
<td>작성자</td><td><input type="text" name="writer" /></td>
</tr>
<tr>
<td>내용</td><td><textarea cols="20" rows="10" name="content"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="입력" />
<input type="button" value="목록" onclick="location.href='board_list.do'" />
<input type="reset" value="취소" onclick="location.href='board_list.do'" />
</td>
</tr></table>
</fieldset>
</form>
</div>
</body>
</html>
6. DAO 부분 수정
package spring.mvc.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
public class BoardDao {
private JdbcTemplate jdbcTemplate;
private List<BoardDto> list = null;
public void setJdbcTemplate(JdbcTemplate jdbcTemplat){
this.jdbcTemplate = jdbcTemplat;
}
public List<BoardDto> getBoardList() {
String sql = "select * from springBoard";
return list = jdbcTemplate.query(sql, new RowMapper<BoardDto>(){
@Override
public BoardDto mapRow(ResultSet arg0, int arg1) throws SQLException {
BoardDto board = new BoardDto();
board.setSeq(arg0.getInt("seq"));
board.setTitle(arg0.getString("title"));
board.setContent(arg0.getString("content"));
board.setWriter(arg0.getString("writer"));
board.setRegdate(arg0.getString("regdate"));
board.setHitcount(arg0.getInt("hitcount"));
board.setPassword(arg0.getString("password"));
return board;
}
});
}
public BoardDto findBySeq(int seq) {
String sql = "select * from springboard where seq=?";
Object[] obj = new Object[]{seq};
// 배열타입 객체로 ?에 들어갈 seq 순서에 맞게 값을 대입해주도록 함.
BoardDto dto = (BoardDto) jdbcTemplate.queryForObject(sql, obj, new RowMapper(){
@Override
public BoardDto mapRow(ResultSet arg0, int arg1) throws SQLException {
// TODO Auto-generated method stub
BoardDto dto = new BoardDto();
dto.setSeq(arg0.getInt("seq"));
dto.setTitle(arg0.getString("title"));
dto.setContent(arg0.getString("content"));
dto.setWriter(arg0.getString("writer"));
dto.setRegdate(arg0.getString("regdate"));
dto.setHitcount(arg0.getInt("hitcount"));
dto.setPassword(arg0.getString("password"));
return dto;
}
});
return dto;
}
public void insert(BoardDto dto) { // 입력 부분 메서드
System.out.println("1");
String sql = "insert into springBoard values(springBoard_seq.nextVal, ?, ?, ?, sysdate, 0, '1234')";
System.out.println("2");
Object[] val = new Object[]{dto.getTitle(), dto.getContent(), dto.getWriter()};
jdbcTemplate.update(sql, val);
}
}
7. 설정파일 수정
<?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">
<!-- 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/" />
<!-- 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>
<!-- <context:component-scan base-package="spring.mvc.board" /> -->
<!-- BeanNameUrlHandlerMapping 설정: 리스트 부분은 빈네임 URL 핸들러 매핑으로 구현 -->
<beans:bean id="handlerMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
<beans:bean name="/board_list.do" class="spring.mvc.controller.BoardListController" >
<beans:property name="boardDao" ref="boardDao" />
</beans:bean>
<!-- SimpleUrlHandlerMapping 설정: 상세화면은 심플 URL 핸들러 매핑으로 구현 -->
<beans:bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="mappings">
<beans:props>
<beans:prop key="/board_detail.do">boardDetailController</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
<beans:bean id="boardDetailController" class="spring.mvc.controller.BoardDetailController" >
<beans:property name="boardDao" ref="boardDao" />
</beans:bean>
<!-- DefaultAnnotationHandlerMapping 어노테이션 사용을 위한 지정: 입력 화면은 어노테이션으로 구현 -->
<beans:bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<beans:bean class="spring.mvc.controller.BoardInsertController">
<beans:property name="boardDao" ref="boardDao" />
</beans:bean>
<beans:bean id="boardDao" class="spring.mvc.dao.BoardDao">
<beans:property name="jdbcTemplate" ref="jdbcTemplate" />
</beans:bean>
</beans:beans>
' Spring Framework' 카테고리의 다른 글
스프링 JDBC 연동을 통한 쇼핑몰: 커넥션 풀 (0) | 2016.04.11 |
---|---|
스프링 JDBC 연동을 통한 쇼핑몰: 리스트, 세부항목 (0) | 2016.04.11 |
스프링 MVC로 게시판 구현: 리스트 화면 (방법1: BeanNameUrlHandlerMapping) (0) | 2016.04.07 |
스프링 MVC 패턴 간단하게 구현하기 (어노테이션 활용) (0) | 2016.04.07 |
스프링 MVC 패턴 실습: 입력받은 값을 가상으로 DB에 넣는 연습 (0) | 2016.04.07 |