온 코딩

[Spring](게시판예제)Spring MVC 사용법 - xml 설정파일 이용 본문

복습 ARCHIVE/모델별 프로젝트

[Spring](게시판예제)Spring MVC 사용법 - xml 설정파일 이용

SummerON 2021. 6. 22. 16:47

SpringMVC가 제공하는 DispatcherServlet을 사용하여 Model2 구현 가능 

DispatcherServlet이 클라이언트 요청 처리에 필요한 핸들러맵핑, 컨트롤러, 뷰리졸버 객제 생성을 위해 스프링 컨테이너 구동 

1. web.xml

  • 스프링프레임워크에서 제공하는 DispatcherServlet 등록
  • 실행 시 DispatcherServlet의 init()메서드를 통해 XmlWebApplicationContext 스프링컨테이너 구동 
  • DispatcherServlet => WEB-INF 내에서 서블릿이름-servlet.xml 문서를 검색 

 * 만약 서블릿 이름-servlet.xml 문서의 위치를 변경할 경우 ,서블릿 초기화 파라미터를 이용하여 위치 변경 가능 

  <servlet>
  	<display-name>action</display-name>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

./WEB-INF/action-servlet.xml 로 자동 연결 

 

서블릿 문서 이름 또는 위치 변경 시 

  <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/config/action-servlet.xml</param-value>
	</init-param>
  </servlet>
  • <param-name>태그 수정 불가!!
  • <param-value> 문서의 위치와 이름 

인코딩 설정 

: CharacterEncodingFilter 클래스를 등록하여 인코딩 설정 

: 모든 .do로 끝나는 요청에 characterEncoding 필터 적용 

<filter>
	<filter-name>characterEncoding</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>
</filter>

<filter-mapping>
	<filter-name>characterEncoding</filter-name>
	<url-pattern>*.do</url-pattern>
</filter-mapping>

 

2. Controller를 구현 받는 ~~Controller.java 파일 만들기

  • 스프링에서 제공하는 Controller 클래스는 ModelAndView 객체를 반환함 
  • 각 요청 사항에 맞는 컨트롤러 클래스 생성

package com.hhw.view.board;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.hhw.biz.board.BoardVO;
import com.hhw.biz.board.impl.BoardDAO;

public class GetBoardController implements Controller {

	public GetBoardController() {
	}

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("컨트롤러 : 글 상세조회 처리");
		//1. 사용자 입력 정보 추출 
		String seq = request.getParameter("seq");
		System.out.println(seq);
		
		//2. DB 연동처리
		BoardVO vo = new BoardVO();
		vo.setSeq(Integer.parseInt(seq));
		
		BoardDAO boardDAO = new BoardDAO();
		BoardVO board = boardDAO.getBoard(vo);
		
		//3. 리턴
		ModelAndView mav = new ModelAndView();
		mav.addObject("board", board); // model정보 저장
		mav.setViewName("getBoard"); // view정보 저장
		
		return mav;
	}

}

* 주의 : ModelAndView 객체는 jsp에서 불러올 때 EL태그를 통해 사용할 수 있음

 

2. 스프링 설정 파일(action-servlet.xml) 만들기

  • HandlerMapping/ ~~~Controller/ViewResolver <bean>으로 등록시 스프링 컨테이너가 객체 자동 생성
  • Spring Bean Conrifutation file로 생성

1) 핸들러 맵핑 등록 

  • 스프링에서 제공하는 url을 통해 핸들러 맵핑을 하기 위한 SimpleUrlHandlerMapping 사용
  • <prop key="/login.do">login</prop>  => 해당 키값으로 요청이 들어오면 login아이디를 가진 컨트롤러 실행 

2) 컨트롤러 등록 

  • 꼭 핸들러맵핑에서 사용한 값을 id로 받아야 해당 클래스가 실행 됨

3) 뷰리졸버 등록 

  • 스프링에서 제공하는 InternalResourceViewResolver 사용
  • prefix와 seffix를 등록하여 불러오는 파일 경로 설정 

* 각 페이지 이동 시, 뷰리졸버를 통하지 않고 바로 연결해야하는 경우 컨트롤러에서 뷰이름을 전달할 때 mav.setViewName("redirect:~~~.jsp")로 설정해야 함  // 뷰리졸버를 통한 화면이동-연결 주의해서 사용하기!!

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 1. HandlerMapping 등록 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	<property name="mappings">
		<props>
			<prop key="/login.do">login</prop>
			<prop key="/getBoardList.do">getBoardList</prop>
			<prop key="/getBoard.do">getBoard</prop>
			<prop key="/insertBoard.do">insertBoard</prop>
			<prop key="/deleteBoard.do">deleteBoard</prop>
			<prop key="/updateBoard.do">updateBoard</prop>
			<prop key="/logout.do">logout</prop>
		</props>	
	</property>
</bean>

<!-- 2. Controller 등록 -->
<bean id="login" class="com.hhw.view.user.LoginController"></bean>
<bean id="getBoardList" class="com.hhw.view.board.GetBoardListController"></bean>
<bean id="getBoard" class="com.hhw.view.board.GetBoardController"></bean>
<bean id="insertBoard" class="com.hhw.view.board.InsertBoardController"></bean>
<bean id="deleteBoard" class="com.hhw.view.board.DeleteBoardController"></bean>
<bean id="updateBoard" class="com.hhw.view.board.UpdateBoardController"></bean>
<bean id="logout" class="com.hhw.view.user.LogoutController"></bean>

<!-- 3. ViewResolver 등록 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/board/"></property>
	<property name="suffix" value=".jsp"></property>
</bean>


</beans>

 

화면 예시

EL태그/JSTL 사용

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.hhw.biz.board.impl.BoardDAO"%>
<%@ page import="com.hhw.biz.board.BoardVO"%>
<%@ page import="java.util.List"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
<%
	//세션에서 검색 결과인 List<BoardVO> vo 를 추출
	//List<BoardVO> boardList = (List)session.getAttribute("boardList");
	String name = (String)session.getAttribute("name");
%>
    
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>getBoardList.jsp</title>
</head>
<body>
<div align="center">
<h1>글목록</h1>
<h3>${name }님 환영합니다 <a href="logout.do">로그아웃</a></h3>

<!-- 검색시작 : 구현예정 -->
<form action="getBoardList.jsp" method="post"></form>
<table border="1" cellpadding="0" cellspacing="0" width="700">
	<tr>
		<td align="right">
			<select name="searchCondition">
				<option value="title">제목
				<option value="content">내용
			</select>
			<input name="searchKeyword" type="text" />
			<input type="submit" value="검색" />
		</td>
	</tr>
</table>
<!-- 검색 종료 -->

<table border="1" cellpadding="0" cellspacing="0" width="700">
	<tr>
		<th bgcolor="orange" width="100">번호</th>
		<th bgcolor="orange" width="200">제목</th>
		<th bgcolor="orange" width="150">작성자</th>
		<th bgcolor="orange" width="150">등록일</th>
		<th bgcolor="orange" width="100">조회수</th>
	</tr>
	
	<c:forEach items="${boardList }" var="board">
	<tr>
		<td>${board.seq }</td>
		<td align="left"><a href="getBoard.do?seq=${board.seq }">${board.title }</a></td>
		<td>${board.writer }</td>
		<td>${board.regDate }</td>
		<td>${board.cnt }</td>
	</tr>	
	</c:forEach>
</table>
<br>
<a href="insertBoard.jsp" >새 글 등록</a>
</div>

</body>
</html>
Comments