스프링 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: 사용

}


}




5. 입력화면 jsp


<%@ 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>







Posted by netyhobby
,