본문 바로가기

공부방/Spring

교육5일차 정리

1. 유효성 검사

사용자의 입력에 대한 유효성 검증등을 위해서 사용하게 된다.


- Validator을 구현한 BoardValidator 클래스 생성

package com.multicampus.view.board;


import org.springframework.validation.Errors;

import org.springframework.validation.ValidationUtils;

import org.springframework.validation.Validator;


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


public class BoardValidator implements Validator{


public boolean supports(Class<?> arg0) {

// TODO Auto-generated method stub

return false;

}


public void validate(Object target, Errors errors) {

// TODO Auto-generated method stub

BoardVO board = (BoardVO)target;


//null 이거나, 공백이거나, 빈문자열이면 message.propertites 에 정의해 놓은 board.title를 적용 시켜라

ValidationUtils.rejectIfEmpty(errors, "title","board.title"); 

ValidationUtils.rejectIfEmpty(errors, "writer","board.writer");

if(board.getContent().length()<=10){

errors.rejectValue("content", "board.content");

}

}

}



- addBoard controller.java


public String addBoard(BoardVO vo, BindingResult result) throws Exception {

new BoardValidator().validate(vo, result);

if(result.hasErrors()){

System.out.println(result.toString());

return "addBoard.jsp";

}

// 파일 업로드

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";

}



-addBoard.jsp

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

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

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

<html>

<head>

<title>새글등록</title>

</head>

<body>

<center>

<h3>새글 등록하기............<a href='logout.do'>LOG-OUT</a></h3>

<hr>

<form action="addBoard.do" method="post" enctype="multipart/form-data">

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

<tr>

<td>제목</td><td align="left"><input type="text" name="title"/>

  <form:errors path="boardVO.title"/></td>

</tr>

<tr>

<td>작성자</td><td align="left"><input type="text" name="writer" size="10"/>

  <form:errors path="boardVO.writer"/></td>

</tr>

<tr>

<td>내용</td><td align="left"><textarea name="content" cols="40" rows="10">

  </textarea><form:errors path="boardVO.content"/></td>

</tr>

<tr>

<td>파일</td><td align="left"><input type="file" name="uploadFile"/></td>

</tr>

<tr>

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

<input type="submit" value=" 새글 등록 "/></td>

</tr>

</table>

</form>

<hr>

</center>

</body>

</html>



2. ibatis 를 활용한 DB연동

 -resources 폴더에 sql-map-config.xml 파일을 등록한다. 이 파일이 ibatis의 환경 설정 파일이다.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMapConfig 

PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

<properties resource="database.properties" />

<transactionManager type="JDBC">

<dataSource type="SIMPLE">

<property name="JDBC.Driver" value="${driver}" />

<property name="JDBC.ConnectionURL" value="${url}" />

<property name="JDBC.Username" value="${username}" />

<property name="JDBC.Password" value="${password}" />

</dataSource>

</transactionManager>


<sqlMap resource="mappings/user-mapping.xml" />

<sqlMap resource="mappings/board-mapping.xml" />

</sqlMapConfig>


database.properties 접속 정보가 들어있는 properties 파일

driver=oracle.jdbc.driver.OracleDriver

url=jdbc:oracle:thin:@localhost:1521:xe

username=hr

password=hr


-resources / mappings 폴더에 sql문 mapping 을 위한 명령어들을 정의해 놓는다.

 다음은 게시판 관련 sql 문들이 들어 있는 board-mapping.xml 설정 파일이다.

 자세히 보면 기존에는 '?'로 값을 대입시켰던 부분을 #변수명#으로 대치시키고 있다.

 그리고 typeAlias 라는 태그를 사용하여 parameterClass 쓰를 c에서 #define 시키듯이 사용하고 있다.

 parameterClass는 sql문에 데이터를 삽입 시키기 위해 사용하는 클래스이다. 

 마지막으로 get 메소드를 보게되면 데이터의 리턴이 일어나기 때문에 resultClass 를 사용하고 있다.

따라서 get 메소드에는 무조건 resultClass를 사용해야 함을 잊지 말기를~


% 주의 사항

sql 명령어 mapping 을 위해 사용하게 되는 mapping 파일에서 각각의 명령어들의 id는 유니크해야만 한다. 

이것은 mappings 폴더 안에 있는 파일들은 각각 유니크한 id를 가져야 한다는것을 의미한다.


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>

<typeAlias alias="board" type="com.multicampus.biz.board.vo.BoardVO" />

<insert id="addBoard" parameterClass="board">

insert into

board(seq,title, writer, content)

values((select nvl(max(seq), 0)+1 from board),#title#,#writer#,#content#)

</insert>

<update id="updateBoard" parameterClass="board">

update board set

title=#title#, content=#content# where seq=#seq#

</update>

<delete id="deleteBoard" parameterClass="board">

delete board where

seq=#seq#

</delete>

<select id="getBoard" parameterClass="board" resultClass="board">

select * from board where

seq=#seq#

</select>

<select id="getBoardList" parameterClass="board" resultClass="board">

select * from board

where title like '%'||#searchKeyword#||'%' order by seq desc

</select>

</sqlMap>


- ibatis를 사용하고 있는 BoardDAO

package com.multicampus.biz.board.impl;


import java.sql.SQLException;

import java.util.List;


import com.ibatis.sqlmap.client.SqlMapClient;

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

import com.multicampus.biz.util.SqlMapClientFactoryBean;


public class BoardDAO {

private SqlMapClient ibatis;

public BoardDAO() {

    //생성자 메소드를 통해서 밑에 정의한 SqlMapClientFactoryBean을 통해 객체를 할당 받고 있다.

ibatis = SqlMapClientFactoryBean.getSqlMapClientInstance();

}

public void addBoard(BoardVO vo) throws SQLException{

ibatis.insert("addBoard",vo);

}

public void updateBoard(BoardVO vo) throws SQLException{

ibatis.update("updateBoard",vo);

}

public void deleteBoard(BoardVO vo) throws SQLException{

ibatis.delete("deleteBoard",vo);

}

public BoardVO getBoard(BoardVO vo) throws SQLException{

return (BoardVO) ibatis.queryForObject("getBoard",vo);

}

@SuppressWarnings("unchecked")

public List<BoardVO> getBoardList(BoardVO vo) throws SQLException{

return ibatis.queryForList("getBoardList", vo);

}

}


- ibatis 객체 생성을 위해 정의한 SqlMapClientFactoryBean.java 클래스

package com.multicampus.biz.util;


import java.io.Reader;

import com.ibatis.common.resources.Resources;

import com.ibatis.sqlmap.client.SqlMapClient;

import com.ibatis.sqlmap.client.SqlMapClientBuilder;


public class SqlMapClientFactoryBean {

private static SqlMapClient sqlMapClient = null;

static {

try {

if (sqlMapClient == null) {

                                 // reader를 통해 sql-map-config.xml 환경 설정 파일을 불러들이고 있다.

Reader reader = Resources.getResourceAsReader("sql-map-config.xml");

sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);

}

} catch (Exception e) {

e.printStackTrace();

}

}


public static SqlMapClient getSqlMapClientInstance() {

return sqlMapClient;

}

}


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

스프링 쿼츠 (Spring Quartz) 스케쥴러에 배치(Batch) 파일 등록하기  (0) 2013.07.05
Http 응답상태 코드  (0) 2013.03.12
교육 4일차 정리  (0) 2013.03.07
교육 3일차 정리  (0) 2013.03.06
교육 2일차 정리  (0) 2013.03.05