본문 바로가기

공부방/Spring

교육 4일차 정리

*POJO인것과 아닌것

 - 사용자가 마음대로 정의한 클래스

 - 인터페이스 구현을 통해 정해진 방식으로 구현하는 클래스


1. Annotation 설정을 통한 Spring MVC 구현  (POJO인것을 사용가능하게 할 수 있다.)

 먼저 Annotation 사용을 위한 xml 설정을 한다.


- presentation-layer.xml에 기존의 설정을 다 지워주고 요 한줄만 등록, 의미는 com.multicampus.view 밑에 있는 모든 

   controller을 annotation으로 하겠다는 의미

<context:component-scan base-package="com.multicampus.view"/>


- Controller 변경


package com.multicampus.view.board;


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.servlet.ModelAndView;


import com.multicampus.biz.board.impl.BoardDAO;

import com.multicampus.biz.board.vo.BoardVO;


@Controller

public class AddBoardController{

@RequestMapping("/addBoard.do")  //addboard.do로 요청되면 그 요청에 대해 매핑되어 실행

public ModelAndView handleRequest(HttpServletRequest request,

HttpServletResponse response) {

// 1. 사용자 입력정보 추출(title, writer, content)

String title = request.getParameter("title");

String writer = request.getParameter("writer");

String content = request.getParameter("content");


// 2. DB 연동

BoardVO vo = new BoardVO();

vo.setTitle(title);

vo.setWriter(writer);

vo.setContent(content);

BoardDAO boardDAO = new BoardDAO();

boardDAO.addBoard(vo);

// 3. 화면 네비게이션

ModelAndView mav = new ModelAndView();

mav.setViewName("redirect:getBoardList.do");

return mav;

}

}



- Annotation을 사용하게 되면 기존에 handleRequest 라는 이름으로 고정되어 있는 메소드 명을 사용자가 마음대로 변경이 가능하며 리턴타입도 사용자 마음대로 변경이 가능하게 된다. 따라서 addBoard 라는 이름으로 메소드 명을 변경하여 가독성을 높일 수 있으며 리턴타임을 ModelAndView 에서 String으로 변경하여 바로 view이름을 리턴해줄 수 있다.

즉, 기존의 POJO가 아닌것만 사용이 가능하던것이 POJO인 것도 사용이 가능하게 되었다.


- Annotation을 적용하여 소스를 수정한 결과

package com.multicampus.view.board;


import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


import com.multicampus.biz.board.impl.BoardDAO;

import com.multicampus.biz.board.vo.BoardVO;


@Controller

public class AddBoardController{

@RequestMapping("/addBoard.do")  //addboard.do로 요청되면 그 요청에 대해 매핑되어 실행

public String handleRequest(BoardVO vo, BoardDAO boardDAO) {

boardDAO.addBoard(vo);

return "getBoardList.do";

}

}


- 넘겨야 할 값이 있는 경우

package com.multicampus.view.board;


import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;


import com.multicampus.biz.board.impl.BoardDAO;

import com.multicampus.biz.board.vo.BoardVO;


@Controller

public class GetBoardListController {

@RequestMapping("/getBoardList.do")

//ModelAndView 에서 Model 정보만 빼낸것이 Model 객체

public String getBoardList(BoardVO vo, BoardDAO boardDAO, Model model) {

if(vo.getSearchCondition() == null) vo.setSearchCondition("TITLE");

if(vo.getSearchKeyword() == null) vo.setSearchKeyword("");

model.addAttribute("boardList", boardDAO.getBoardList(vo)); // Model 정보

return "getBoardList.jsp";

}

}

 모델이라는 녀석의 객체를 사용하고 있는데 여기서 모델은 ModelAndView에서 Model 기능만 다로 뺀 녀석이다. 이렇게 model.addAttribute("boardList", boardDAO.getBoardList(vo));  방식으로 데이터를 저장하게되면 앞서와 마찬가지로 해당 페이지에서 requent.getAttribute로 불러올수 있다.

 현재 getBoardList 메소드를 보면 인자로 3가지를 받고 있는데, 이때 각각의 인자들의 객체는 스프링 컨테이너에서 자동 생성 해서 넘겨 주게 된다.


3. JSTL 사용을 위한 라이브러리와 설정  


jstl-1.1.2.jar

standard-1.1.2.jar


첨부된 파일을 webcontetn 밑에 lib 폴더에 복사

  


   JSP 페이지에 taglisb 등록

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



4. 파일 업로드 설정

 presentation-layer.xml

<!-- 파일 업로드 설정 -->

<bean id="multipartResolver" 

     class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="maxUploadSize" value="100000"/>

</bean>


controller 적용

public String addBoard(BoardVO vo) throws Exception {

// 파일 업로드

MultipartFile uploadFile = vo.getUploadFile();

if(uploadFile != null && uploadFile.getOriginalFilename().length() > 0){

String fileName = uploadFile.getOriginalFilename();

byte[] fileData = uploadFile.getBytes();

FileOutputStream output = new FileOutputStream

                        ("C:/DEV/work/BoardWeb-Annotation/WebContent/uploadFiles/" + fileName);

output.write(fileData);

}

boardService.addBoard(vo);

return "getBoardList.do";

}


5. 다국어 설정

presentation-layer.xml


<!-- 다국어 설정 -->

<!-- 1. MessageSource 등록 -->

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

<property name="basenames">

<list>

<value>message.messageSource</value>

</list>

</property>

</bean>

<!-- 2. LocaleResolver 등록 -->

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>


<!-- 3. LocaleChangeInterceptor 등록 -->

<mvc:interceptors>

<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">

<property name="paramName" value="lang"/>

</bean>

</mvc:interceptors>


적용 JSP 파일

 - taglib 추가

<spring:message code="message.menu.en"/> 와 같은 방식으로 적용


<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>로그인</title>

</head>

<body>

<center>

<h1></h1>

<a href="login.do?lang=en"><spring:message code="message.menu.en"/></a>

<a href="login.do?lang=ko"><spring:message code="message.menu.ko"/></a>

<hr>

<form action="login.do" method="post">

<table border="1" cellpadding="0" cellspacing="0">

<tr>

<td><spring:message code="message.user.id"/></td><td><input type="text" name="id"/></td>

</tr>

<tr>

<td><spring:message code="message.user.password"/></td><td><input type="password" name="password"/></td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value='<spring:message code="message"/>'/>

</td>

</tr>

</table>

</form>

<hr>

</center>

</body>

</html>



message 파일 적용을 위해 resources 폴더 밑에 message 폴더에 적용을 위한 한글 파일을 등록 하고

  messageSource.txt

message=로그인

message.user.id=아이디

message.user.password=비밀번호


message.menu.ko=한국어

message.menu.en=영어


user.id=아이디는 필수 입력항목입니다.

user.password=비밀번호는 필수 입력항목입니다.


board.title=제목은 필수 입력항목입니다.

board.writer=작성자는 필수 입력항목입니다.

board.content=내용은 10글자 이상 작성해주세요.



이 파일을 바탕으로 영어 propertites 을 만든다.

  messageSource_en.properties

message=LOG-IN

message.user.id=ID

message.user.password=PASSWORD


message.menu.ko=KOREA

message.menu.en=ENGLISH


user.id=id is required field.

user.password=password is required field.


board.title=title is required field.

board.writer=writer is required field.

board.content=content more than 10 letters.


다음 한글 파일을 유니코드로 변환 한다. 변환은

원본파일 messageSource.txt 이 있는 경로를 도스창에서 이동 한 뒤 

native2ascii messageSource.txt messageSource_en.properties 를 입력하여 해주면 됩니다.


오늘은 이상 ~ 강의가 너무 빨라서 기록하기가 넘 힘듭니다 ㅠㅠ


'공부방 > Spring' 카테고리의 다른 글

Http 응답상태 코드  (0) 2013.03.12
교육5일차 정리  (0) 2013.03.08
교육 3일차 정리  (0) 2013.03.06
교육 2일차 정리  (0) 2013.03.05
교육 1일차 정리  (0) 2013.03.04