728x90
반응형
참고도서
|
1. 파일 업로드
(1) form 태그
1 2 3 4 5 6 | <!-- http body 의 데이터를 바이너리로 설정해서 전송하기 위해 enctype 설정 --> <!-- http body 를 사용하기 때문에 반드시 method 는 post, get 방식은 데이터 전송량에 한계가 있음 --> <form action="insertBoard.do" method="post" enctype="multipart/form-data"> <!-- 파일 전송을 위한 input 태그의 type 속성값 --> <input type="file" name="uploadFile"/> | cs |
(2) Commnad 객체 수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // VO(Value Object) public class BoardVO{ // 스프링에서 제공하는 파일업로드 관련 객체 // public interface MultipartFile extends InputStreamSource {} private MultipartFile uploadFile; // getter, setter public MultipartFile getUploadFile(){ return uploadFile; } public MultipartFile setUploadFile(MultipartFile uploadFile){ this.uploadFile = uploadFile; } } | cs |
(3) FileUpload 라이브러리 추가
maven repository 에서 apache commons fileupload 를 검색해서 pom.xml 에 설정
commons-fileupload, commons-io 라이브러리가 다운로드 된다.
(4) MultipartResolver 설정
1 2 3 4 5 6 7 | <!-- CommonsMultipartResolver 클래스는 MultipartFile 객체를 생성한다 --> <!-- DispatcherServlet multipartResolver 이름으로 등록된 CommonsMultipartResolver 객체만 인식하도록 프로그램 되어 있으므로 --> <!-- id 속성 값은 반드시 multipartResolver 가 되어야 한다. --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 파일 업로드 사이즈 설정 --> <property name="maxUploadSize" value="100000"/> </bean> | cs |
(5) 파일 업로드 처리
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @Controller @SessionAttribute("board") public class BoardContorller{ @Autowired private BoardService boardService; // 글 등록 @RequestMapping("/insertBoard.do") public String insertBoard(BoardVO vo) throws IOException{ // 파일관련 예외 처리 // 파일 업로드 처리 MultipartFile uploadFile = vo.getUploadFile(); if(!uploadFile.isEmpty()){ String fileName = uploadFile.getOriginalFilaname(); uploadFile.transferTo(new File("D:/"+fileName)); } boardService.insertBoard(vo); return "getBoardList.do"; } } | cs |
MultipartFile 메소드
String getOriginalFilename() |
업로드한 파일명을 문자열로 리턴 |
void transferTo(File destFile) |
업로드한 파일을 desFile에 저장 |
boolean isEmpty() |
업로드한 파일 존재 여부 리턴(없으면 true 리턴) |
2. 예외 처리
(1) 컨트롤러에 예외처리 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @Controller public class LoginController { @RequestMapping(value = "/login.do", method = RequestMethod.GET) public String loginView(UserVO vo) { return "login.jsp"; } @RequestMapping(value = "/login.do", method = RequestMethod.POST) public String login(UserVO vo, UserDAO userDAO, HttpSession session) { // 아이디를 입력하지 않으면 IllegalArgumentException 에러를 발생 시 if(vo.getId()==null || vo.getId().equals("")) { throw new IllegalArgumentException("아이디는 반드시 입력해야 합니다."); } UserVO user = userDAO.getUser(vo); if (user != null) { session.setAttribute("userName", user.getName()); return "getBoardList.do"; } else return "login.jsp"; } } | cs |
(2) @ExceptionHnadler 어노테이션을 사용하기 위해서 presentation-layer.xml 파일에 설정 추가
View 관련 처리이므로 Presentation Layer 에서 구동되는 스프링 컨테이너 이용
1 2 3 | <!-- presentation-layer.xml 에 설정, namespace에 mvc --> <!-- @ExceptionHandler 어노테이션 사용 가능 --> <mvc:annotation-driven/> | cs |
(3) 예외 처리 관련 클래스 작성(어노테이션 기반 설정)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // @ControllerAdvice 어노테이션에 의해 CommonExceptionHandelr 객체가 자동으로 생성 // com.neverland.view 패키지로 시작하는 컨트롤로에서 예외가 발생하면 // @ExceptionHnadler 어노테이션으로 지정한 메소드가 실행 된다 @ControllerAdvice("com.neverland.view") public class CommonExceptionHandler { // @ExceptionHandelr(예외 관련 클래스) @ExceptionHandler(ArithmeticException.class) public ModelAndView handleArithmeticException(Exception e) { ModelAndView mav = new ModelAndView(); // 예외 메시지를 Model 에 담는다 mav.addObject("exception", e); // 예외가 발생했을 때 호출되는 View mav.setViewName("/common/arithmeticError.jsp"); return mav; } @ExceptionHandler(NullPointerException.class) public ModelAndView handleNullPointerException(Exception e) { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.setViewName("/common/nullPointerError.jsp"); return mav; } @ExceptionHandler(Exception.class) public ModelAndView handleException(Exception e) { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.setViewName("/common/error.jsp"); return mav; } } | cs |
(4) View 에서 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <body> <div style="background-color: #ffffff; color: #000000; text-align: center; margin: auto-margin;"> <!-- 타이틀 시작 --> <table style="width: 100%;" border="1"> <tr> <td> <b>기본 에러 화면 입니다.</b> </td> </tr> </table> <br /> <!-- 에러 메시지 --> <table style="width: 100%;" border="1"> <tr> <td> <br /><br /><br /><br /><br /> <!-- Model에 담긴 값을 꺼내와서 출력 --> Message: ${exception.message } <br /><br /><br /><br /><br /> </td> </tr> </table> </div> </body> | cs |
(5) XML 기반의 예외 처리 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!-- 예외 처리 설정, presentation-layer.xml --> <!-- SimpleMappingExceptionResolver 빈 등록 --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!-- 예외 처리 관련 클래스 설정 --> <prop key="java.lang.ArithmeticException"> <!-- key에 설정한 에러 발생시 출력되는 View --> common/arithmeticError.jsp </prop> <prop key="java.lang.NullPointerException"> common/nullPointerError.jsp </prop> </props> </property> <property name="defaultErrorView" value="common/error.jsp"></property> </bean> | cs |
728x90
반응형
'Programming > Spring' 카테고리의 다른 글
데이터 변환 (0) | 2017.08.20 |
---|---|
다국어 처리 (0) | 2017.08.20 |
AOP 기초 (0) | 2017.08.19 |
Bean 라이프 사이클과 범위 (0) | 2017.08.19 |
자바 코드를 이용한 설정 (0) | 2017.08.19 |
댓글