목차
-
로그인처리
-
kr.spring.ch07.controller => LoginController
-
kr.spring.ch07.vo => LoginVO
-
servlet-context.xml 내용추가
-
views => login => form.jsp
-
index.jsp
-
kr.spring.ch07.validator => LoginValidator
-
LoginController 내용추가
-
validation.properties
-
kr.spring.ch07.service => LoginService
-
kr.spring.ch07.service => LoginCheckException
-
servlet-context.xml 내용추가
-
LoginController 내용추가
-
form.jsp 에 한줄추가
-
validation.properties 내용추가
-
로그인처리 끝
-
porm.xml
-
webapp => upload
-
kr.spring.ch08.vo => SubmitReportVO
-
kr.spring.ch08.controller => SubmitReportController
-
report => submitReportForm.jsp
-
resources=>config=>file.properties
-
SubmitReportController 내용추가
-
kr.spring.ch08.validator => SubmitReportValidator
-
SubmitReportController 내용추가
-
report => submittedReport.jsp
ch05~ch06 작성해야됨.
로그인처리
kr.spring.ch07.controller => LoginController
package kr.spring.ch07.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import kr.spring.ch07.vo.LoginVO;
@Controller
public class LoginController {
//유효성 체크를 위한 자바빈 초기화 (유효성 체크를 자바스크립트로 하면 자바빈 초기화를 안해도됨)
@ModelAttribute //ModelAttribute에서 속성명을 지정하지않았기 때문에 LoginVO에서 자동으로 loginVO로 바뀐다.
public LoginVO initCommand() { //command객체가 자바빈이라고 생각하면됨
return new LoginVO();
}
//폼 호출
@GetMapping("/login/login.do")
public String form() {
return "login/form";
}
}
kr.spring.ch07.vo => LoginVO
package kr.spring.ch07.vo;
public class LoginVO {
private String userId;
private String password;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "LoginVO [userId=" + userId + ", password=" + password + "]";
}
}
servlet-context.xml 내용추가
<!-- 로그인하면서 유효성 체크를 동시에 하는법 -->
<!-- 로그인처리 -->
<beans:bean class="kr.spring.ch07.controller.LoginController"/>
views => login => form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<form:form action="login.do" modelAttribute="loginVO">
아이디 : <form:input path="userId"/>
<form:errors path="userId"/>
<br>
비밀번호 : <form:input path="password"/>
<form:errors path="password"/>
<br>
<form:button>전송</form:button>
</form:form>
</body>
</html>
index.jsp
<a href="${pageContext.request.contextPath}/login/login.do">LoginController</a><br>


kr.spring.ch07.validator => LoginValidator
package kr.spring.ch07.validator;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import kr.spring.ch07.vo.LoginVO;
public class LoginValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return LoginVO.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
LoginVO vo = (LoginVO)target;
if(vo.getUserId() == null || vo.getUserId().trim().isEmpty()) {
// 필드 에러코드
errors.rejectValue("userId","required");
}
if(vo.getPassword() == null || vo.getPassword().trim().isEmpty()) {
// 필드 에러코드
errors.rejectValue("password","required");
}
}
}
LoginController 내용추가
//폼에서 전송된 데이터 처리
@PostMapping("login/login.do")
public String submit(LoginVO loginVO, BindingResult result) {
//유효성 체크
new LoginValidator().validate(loginVO, result);
//유효성 체크 결과 오류가 있으면 폼을 다시 호출
if(result.hasErrors()) {
return form(); //form()에서 login/form을 return 하기 떄문에
}
//로그인 성공
return "redirect:/index.jsp"; //리다이렉트 하는법
}

validation.properties
#rejectValue()를 사용할 경우 다음의 순서로 메시지 코드 생성(우선순위에 따라서 에러코드를 생성 및 사용)
#1) 에러코드 . 커멘드 객체 이름 . 필드명 => required.loginVO.userId => (이렇게하면 가장먼저 호출된다.) 커멘트 객체는 자바빈을 말한다.
#2) 에러코드 . 필드명 => required.userId => (두번째로 우선순위가 높은 것)
#3) 에러코드 . 필드타입 => required.java.lang.String => (세번째 우선순위)
#4) 에러코드 => required => (우선순위 최하위)
#에러코드=에러문구
required=필수 항목입니다.
#2번 방법 에러코드.필드명
required.userId=사용자 아이디는 필수 항목입니다.
required.password=비밀번호는 필수 항목입니다.

kr.spring.ch07.service => LoginService
package kr.spring.ch07.service;
import kr.spring.ch07.vo.LoginVO;
public class LoginService {
public void checkLogin(LoginVO vo)throws LoginCheckException{
//테스트용으로 userId와 password가 일치하면 로그인 처리
if(!vo.getUserId().equals(vo.getPassword())) {
System.out.println("인증 에러 -" + vo.getUserId());
throw new LoginCheckException();
}
}
}
kr.spring.ch07.service => LoginCheckException
package kr.spring.ch07.service;
public class LoginCheckException extends Exception{ //extends(상속)만 받으면된다.
}
servlet-context.xml 내용추가
<beans:bean class="kr.spring.ch07.service.LoginService"/>
LoginController 내용추가
package kr.spring.ch07.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import kr.spring.ch07.service.LoginService;
import kr.spring.ch07.validator.LoginValidator;
import kr.spring.ch07.vo.LoginVO;
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
.
.
.
(생략)
.
.
.
//로그인 체크
try {
loginService.checkLogin(loginVO);
//로그인 성공
return "redirect:/index.jsp"; //리다이렉트 하는법
}catch(LoginCheckException e) {
//로그인 실패
//메시지 처리 에러코드
result.reject("invalidIdOrPassword");
return form();
}
}
}
form.jsp 에 한줄추가
<form:errors/> <!-- field가 없는 에러메시지는 여기로 전달된다. -->
'아이디 또는 비밀번호가 불일치 합니다' 라는 에러가 이 <form:errors/>에 담긴것


<!-- 필드가 없는 에러메시지를 처리하기 위해서 명시 -->
<form:errors element="div"/> <!-- field가 없는 에러메시지는 여기로 전달된다. -->
라고 바꿔주면 <span>이 아닌 <div> 태그로 바꾼다.

validation.properties 내용추가
#reject()를 사용할 경우 다음의 순서로 메시지 코드 생성
#1) 에러코드 . 커멘트 객체 이름 => (우선순위가 2번보다 높음)
#2) 에러코드
로그인처리 끝
porm.xml
<!-- 라이브러리 추가 시작 -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency> <!-- 추가한 부분 -->
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 라이브러리 추가 끝 -->
webapp => upload
kr.spring.ch08.vo => SubmitReportVO
package kr.spring.ch08.vo;
import org.springframework.web.multipart.MultipartFile;
public class SubmitReportVO {
private String subject;
private MultipartFile reportFile;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public MultipartFile getReportFile() {
return reportFile;
}
public void setReportFile(MultipartFile reportFile) {
this.reportFile = reportFile;
}
@Override
public String toString() {
return "SubmitReportVO [subject=" + subject + ", reportFile=" + reportFile + "]";
}
}
kr.spring.ch08.controller => SubmitReportController
package kr.spring.ch08.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import kr.spring.ch08.vo.SubmitReportVO;
@Controller
public class SubmitReportController {
//유효성 체크를 위한 자바빈 초기화
@ModelAttribute("report")
public SubmitReportVO initCommand() {
return new SubmitReportVO();
}
//폼 호출
@GetMapping("/report/submitReport.do")
public String form() {
return "report/submitReportForm";
}
}
report => submitReportForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>리포트 등록 폼</title>
</head>
<body>
<form:form action="submitReport.do" enctype="multipart/form-data" modelAttribute="report">
<ul>
<li>
<form:label path="subject">제목</form:label>
<form:input path="subject"/>
<form:errors path="subject"/>
</li>
<li>
<form:label path="reportFile">리포트 파일</form:label>
<input type="file" id="reportFile" name="reportFile">
<form:errors path="reportFile"/>
</li>
<li>
<form:button>리포트 전송</form:button>
</li>
</ul>
</form:form>
</body>
</html>
servlet-context.xml 내용추가
<!-- 파일 업로드 -->
<beans:bean class="kr.spring.ch08.controller.SubmitReportController"/>
index.jsp 내용추가
<a href="${pageContext.request.contextPath}/report/submitReport.do">SubmitReportController</a><br>

servlet-context.xml 내용추가
<!-- multipartResolver 설정 -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="52428800"/><!-- 50M -->
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
resources=>config=>file.properties
upload파일을 오른쪽 클릭 후 Properties를 클릭해서 절대경로를 구한뒤 역슬레쉬를 슬레쉬로 바꿔준다.
file_path=C:/javaWork/workspace/ch08SpringMVC/src/main/webapp/upload
servlet-context.xml 내용추가
<!-- 파일 업로드 경로가 명시된 설정 파일 지정 -->
<context:property-placeholder location="classpath:config/file.properties"/>

SubmitReportController 내용추가
package kr.spring.ch08.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import kr.spring.ch08.vo.SubmitReportVO;
@Controller
public class SubmitReportController {
//파일 업로드 경로 읽기
@Value("${file_path}")
private String path;
.
.
.
(생략)
//폼에서 전송된 데이터 처리
@PostMapping("/report/submitReport.do")
public String submit(@ModelAttribute("report") SubmitReportVO vo, BindingResult result) {
return "report/submittedReport";
}
}
kr.spring.ch08.validator => SubmitReportValidator
package kr.spring.ch08.validator;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import kr.spring.ch08.vo.SubmitReportVO;
public class SubmitReportValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return SubmitReportVO.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
SubmitReportVO vo = (SubmitReportVO)target;
if(vo.getSubject()== null || vo.getSubject().trim().isEmpty()) {
errors.rejectValue("subject", "required");
}
if(vo.getReportFile()==null ||vo.getReportFile().isEmpty()) { //따로 공백이 없기 때문에 trim을 쓰지 않아도됨
errors.rejectValue("reportFile","required");
}
}
}
SubmitReportController 내용추가
//폼에서 전송된 데이터 처리
@PostMapping("/report/submitReport.do")
public String submit(@ModelAttribute("report") SubmitReportVO vo, BindingResult result) throws IllegalStateException, IOException {
//전송된 데이터 유효성 체크
new SubmitReportValidator().validate(vo,result);
//유효성 체크 결과 오류가 있으면 폼을 호출
if(result.hasErrors()) {
return form();
}
//정상적으로 파일이 업로드 되었을 경우
File file = new File(path + "/" + vo.getReportFile().getOriginalFilename());
//지정한 경로에 파일 저장
vo.getReportFile().transferTo(file);
System.out.println(vo);
return "report/submittedReport";
}

report => submittedReport.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>
리포트 <b>${report.subject}</b>를 등록했습니다.<br>
업로드한 파일: ${report.reportFile.originalFilename}<br>
용량 : ${report.reportFile.size}
</body>
</html>



'쌍용교육(JAVA) > Spring' 카테고리의 다른 글
쌍용교육 -JSP수업 81일차 - ch09_SpringJDBC(1) (0) | 2024.06.19 |
---|---|
쌍용교육 -JSP수업 81일차 - ch08_SpringMVC(3) (0) | 2024.06.19 |
쌍용교육 -JSP수업 79일차 - ch08_SpringMVC(1) (0) | 2024.06.17 |
쌍용교육 -JSP수업 79일차 - ch07_SpringDI(4) (0) | 2024.06.17 |
쌍용교육 -JSP수업 78일차 - ch07_SpringDI(3) (0) | 2024.06.14 |
ch05~ch06 작성해야됨.
로그인처리
kr.spring.ch07.controller => LoginController
package kr.spring.ch07.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import kr.spring.ch07.vo.LoginVO;
@Controller
public class LoginController {
//유효성 체크를 위한 자바빈 초기화 (유효성 체크를 자바스크립트로 하면 자바빈 초기화를 안해도됨)
@ModelAttribute //ModelAttribute에서 속성명을 지정하지않았기 때문에 LoginVO에서 자동으로 loginVO로 바뀐다.
public LoginVO initCommand() { //command객체가 자바빈이라고 생각하면됨
return new LoginVO();
}
//폼 호출
@GetMapping("/login/login.do")
public String form() {
return "login/form";
}
}
kr.spring.ch07.vo => LoginVO
package kr.spring.ch07.vo;
public class LoginVO {
private String userId;
private String password;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "LoginVO [userId=" + userId + ", password=" + password + "]";
}
}
servlet-context.xml 내용추가
<!-- 로그인하면서 유효성 체크를 동시에 하는법 -->
<!-- 로그인처리 -->
<beans:bean class="kr.spring.ch07.controller.LoginController"/>
views => login => form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<form:form action="login.do" modelAttribute="loginVO">
아이디 : <form:input path="userId"/>
<form:errors path="userId"/>
<br>
비밀번호 : <form:input path="password"/>
<form:errors path="password"/>
<br>
<form:button>전송</form:button>
</form:form>
</body>
</html>
index.jsp
<a href="${pageContext.request.contextPath}/login/login.do">LoginController</a><br>


kr.spring.ch07.validator => LoginValidator
package kr.spring.ch07.validator;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import kr.spring.ch07.vo.LoginVO;
public class LoginValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return LoginVO.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
LoginVO vo = (LoginVO)target;
if(vo.getUserId() == null || vo.getUserId().trim().isEmpty()) {
// 필드 에러코드
errors.rejectValue("userId","required");
}
if(vo.getPassword() == null || vo.getPassword().trim().isEmpty()) {
// 필드 에러코드
errors.rejectValue("password","required");
}
}
}
LoginController 내용추가
//폼에서 전송된 데이터 처리
@PostMapping("login/login.do")
public String submit(LoginVO loginVO, BindingResult result) {
//유효성 체크
new LoginValidator().validate(loginVO, result);
//유효성 체크 결과 오류가 있으면 폼을 다시 호출
if(result.hasErrors()) {
return form(); //form()에서 login/form을 return 하기 떄문에
}
//로그인 성공
return "redirect:/index.jsp"; //리다이렉트 하는법
}

validation.properties
#rejectValue()를 사용할 경우 다음의 순서로 메시지 코드 생성(우선순위에 따라서 에러코드를 생성 및 사용)
#1) 에러코드 . 커멘드 객체 이름 . 필드명 => required.loginVO.userId => (이렇게하면 가장먼저 호출된다.) 커멘트 객체는 자바빈을 말한다.
#2) 에러코드 . 필드명 => required.userId => (두번째로 우선순위가 높은 것)
#3) 에러코드 . 필드타입 => required.java.lang.String => (세번째 우선순위)
#4) 에러코드 => required => (우선순위 최하위)
#에러코드=에러문구
required=필수 항목입니다.
#2번 방법 에러코드.필드명
required.userId=사용자 아이디는 필수 항목입니다.
required.password=비밀번호는 필수 항목입니다.

kr.spring.ch07.service => LoginService
package kr.spring.ch07.service;
import kr.spring.ch07.vo.LoginVO;
public class LoginService {
public void checkLogin(LoginVO vo)throws LoginCheckException{
//테스트용으로 userId와 password가 일치하면 로그인 처리
if(!vo.getUserId().equals(vo.getPassword())) {
System.out.println("인증 에러 -" + vo.getUserId());
throw new LoginCheckException();
}
}
}
kr.spring.ch07.service => LoginCheckException
package kr.spring.ch07.service;
public class LoginCheckException extends Exception{ //extends(상속)만 받으면된다.
}
servlet-context.xml 내용추가
<beans:bean class="kr.spring.ch07.service.LoginService"/>
LoginController 내용추가
package kr.spring.ch07.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import kr.spring.ch07.service.LoginService;
import kr.spring.ch07.validator.LoginValidator;
import kr.spring.ch07.vo.LoginVO;
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
.
.
.
(생략)
.
.
.
//로그인 체크
try {
loginService.checkLogin(loginVO);
//로그인 성공
return "redirect:/index.jsp"; //리다이렉트 하는법
}catch(LoginCheckException e) {
//로그인 실패
//메시지 처리 에러코드
result.reject("invalidIdOrPassword");
return form();
}
}
}
form.jsp 에 한줄추가
<form:errors/> <!-- field가 없는 에러메시지는 여기로 전달된다. -->
'아이디 또는 비밀번호가 불일치 합니다' 라는 에러가 이 <form:errors/>에 담긴것


<!-- 필드가 없는 에러메시지를 처리하기 위해서 명시 -->
<form:errors element="div"/> <!-- field가 없는 에러메시지는 여기로 전달된다. -->
라고 바꿔주면 <span>이 아닌 <div> 태그로 바꾼다.

validation.properties 내용추가
#reject()를 사용할 경우 다음의 순서로 메시지 코드 생성
#1) 에러코드 . 커멘트 객체 이름 => (우선순위가 2번보다 높음)
#2) 에러코드
로그인처리 끝
porm.xml
<!-- 라이브러리 추가 시작 -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency> <!-- 추가한 부분 -->
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 라이브러리 추가 끝 -->
webapp => upload
kr.spring.ch08.vo => SubmitReportVO
package kr.spring.ch08.vo;
import org.springframework.web.multipart.MultipartFile;
public class SubmitReportVO {
private String subject;
private MultipartFile reportFile;
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public MultipartFile getReportFile() {
return reportFile;
}
public void setReportFile(MultipartFile reportFile) {
this.reportFile = reportFile;
}
@Override
public String toString() {
return "SubmitReportVO [subject=" + subject + ", reportFile=" + reportFile + "]";
}
}
kr.spring.ch08.controller => SubmitReportController
package kr.spring.ch08.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import kr.spring.ch08.vo.SubmitReportVO;
@Controller
public class SubmitReportController {
//유효성 체크를 위한 자바빈 초기화
@ModelAttribute("report")
public SubmitReportVO initCommand() {
return new SubmitReportVO();
}
//폼 호출
@GetMapping("/report/submitReport.do")
public String form() {
return "report/submitReportForm";
}
}
report => submitReportForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>리포트 등록 폼</title>
</head>
<body>
<form:form action="submitReport.do" enctype="multipart/form-data" modelAttribute="report">
<ul>
<li>
<form:label path="subject">제목</form:label>
<form:input path="subject"/>
<form:errors path="subject"/>
</li>
<li>
<form:label path="reportFile">리포트 파일</form:label>
<input type="file" id="reportFile" name="reportFile">
<form:errors path="reportFile"/>
</li>
<li>
<form:button>리포트 전송</form:button>
</li>
</ul>
</form:form>
</body>
</html>
servlet-context.xml 내용추가
<!-- 파일 업로드 -->
<beans:bean class="kr.spring.ch08.controller.SubmitReportController"/>
index.jsp 내용추가
<a href="${pageContext.request.contextPath}/report/submitReport.do">SubmitReportController</a><br>

servlet-context.xml 내용추가
<!-- multipartResolver 설정 -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<beans:property name="maxUploadSize" value="52428800"/><!-- 50M -->
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
resources=>config=>file.properties
upload파일을 오른쪽 클릭 후 Properties를 클릭해서 절대경로를 구한뒤 역슬레쉬를 슬레쉬로 바꿔준다.
file_path=C:/javaWork/workspace/ch08SpringMVC/src/main/webapp/upload
servlet-context.xml 내용추가
<!-- 파일 업로드 경로가 명시된 설정 파일 지정 -->
<context:property-placeholder location="classpath:config/file.properties"/>

SubmitReportController 내용추가
package kr.spring.ch08.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import kr.spring.ch08.vo.SubmitReportVO;
@Controller
public class SubmitReportController {
//파일 업로드 경로 읽기
@Value("${file_path}")
private String path;
.
.
.
(생략)
//폼에서 전송된 데이터 처리
@PostMapping("/report/submitReport.do")
public String submit(@ModelAttribute("report") SubmitReportVO vo, BindingResult result) {
return "report/submittedReport";
}
}
kr.spring.ch08.validator => SubmitReportValidator
package kr.spring.ch08.validator;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import kr.spring.ch08.vo.SubmitReportVO;
public class SubmitReportValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return SubmitReportVO.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
SubmitReportVO vo = (SubmitReportVO)target;
if(vo.getSubject()== null || vo.getSubject().trim().isEmpty()) {
errors.rejectValue("subject", "required");
}
if(vo.getReportFile()==null ||vo.getReportFile().isEmpty()) { //따로 공백이 없기 때문에 trim을 쓰지 않아도됨
errors.rejectValue("reportFile","required");
}
}
}
SubmitReportController 내용추가
//폼에서 전송된 데이터 처리
@PostMapping("/report/submitReport.do")
public String submit(@ModelAttribute("report") SubmitReportVO vo, BindingResult result) throws IllegalStateException, IOException {
//전송된 데이터 유효성 체크
new SubmitReportValidator().validate(vo,result);
//유효성 체크 결과 오류가 있으면 폼을 호출
if(result.hasErrors()) {
return form();
}
//정상적으로 파일이 업로드 되었을 경우
File file = new File(path + "/" + vo.getReportFile().getOriginalFilename());
//지정한 경로에 파일 저장
vo.getReportFile().transferTo(file);
System.out.println(vo);
return "report/submittedReport";
}

report => submittedReport.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>
리포트 <b>${report.subject}</b>를 등록했습니다.<br>
업로드한 파일: ${report.reportFile.originalFilename}<br>
용량 : ${report.reportFile.size}
</body>
</html>



'쌍용교육(JAVA) > Spring' 카테고리의 다른 글
쌍용교육 -JSP수업 81일차 - ch09_SpringJDBC(1) (0) | 2024.06.19 |
---|---|
쌍용교육 -JSP수업 81일차 - ch08_SpringMVC(3) (0) | 2024.06.19 |
쌍용교육 -JSP수업 79일차 - ch08_SpringMVC(1) (0) | 2024.06.17 |
쌍용교육 -JSP수업 79일차 - ch07_SpringDI(4) (0) | 2024.06.17 |
쌍용교육 -JSP수업 78일차 - ch07_SpringDI(3) (0) | 2024.06.14 |