기능 별로 패키지를 나누어 만들었다.. 개인적인 차이인듯하다.
sevice 패키지를 생성 후
WRService (WorkRegisterService)
WUService (WorkUpdateService)
WDService (WorkDeleteService)
WLService (WorkListService)
데이터 검증 - 데이터 선처리 - 디비추가 - 데이터후처리 등등
이렇게 4개 클래스를 작성하였다..
WLService (WorkListService) 클래스
package service;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import dto.ErpDto;
public class WLService {
//데이터 가져오기
public List<ErpDto> gets(HttpServletRequest request) {
return null;
}
}
데이터를 가져오기 위한 클래스 데이터를 받아야하니까 List 선언하고 받는곳은 ErpDto 로 선언해주었다.
커스텀한 예외 클래스 만드는 방법
자신이 원하는 예외를 상속받아 구현한다
package service;
public class ErpException extends RuntimeException{
public ErpException(String message) {
super(message);
}
}
RegisterController 클래스에 예외 출력 코드 작성
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.WRService;
import service.ErpException;
@WebServlet("/register")
public class RegisterController extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//body 에 대한 기본 인코딩도 꺠지기 때문에 명시해줘야함..
req.setCharacterEncoding("UTF-8");
//한글이 깨지기떄문에 인코딩 과 text/html 넣어야함
resp.setContentType("text/html; charset=utf-8");
//출력하는 부분 가져오기
PrintWriter out = resp.getWriter();
try {
WRService service = new WRService();
service.process(req);
}catch (ErpException e) {
e.printStackTrace();
out.println("<script>alert('" + e.getMessage()+ "');<script>");
}
}
}
데이터 유효성 검사를 위한 WRService 클래스 작성
package service;
import javax.servlet.http.HttpServletRequest;
public class WRService {
//데이터 검증
public void process(HttpServletRequest request) {
// 데이터 유효성 검사
String sports = request.getParameter("sports");
String sportNm = request.getParameter("sportNm");
if(sports == null || sports.trim().isEmpty()) {
throw new ErpException("운동 한 부위를 선택하세요");
}
if(sportNm == null || sportNm.isBlank()) {
throw new ErpException("운동 종목을 입력 하세요");
}
}
}
java 11버전 이상이면 isblank() 써도 된다.
서버 실행 후 예외를 발생 시켜보았다.. 뜨지 않는다... 이유는 main/index.jsp 에 form 안에 post 메서드를 추가하지 않았다. 추가 후 다시 실행시켜보았다.
<form name="frmRegist" method="post" action="<c:url value="/register"/>">
잘 뜬다.. 하지만 페이지가 이동되었다.. 페이지가 뒤로 이동되게 설정 해줘야한다.
RegisterController 클래스에서 out.println("<script>alert('" + e.getMessage()+ "');history.back();</script>"); 부분에 history.back() 를 추가해주었다. 근데 이 방법은 좋지 않다고 한다 해서 자식창인 ifrmprocess 으로 넘겨주어서 페이지 이동없이 경고창이 나타나게 해주었다.
<form name="frmRegist" method="post" action="<c:url value="/register"/>" target = "ifrmprocess">
'Servlet-Jsp' 카테고리의 다른 글
workout (운동기록프로그램 myBatis) #1 (0) | 2022.08.11 |
---|---|
운동기록프로그램(servlet-jsp) #4 (0) | 2022.08.09 |
운동기록프로그램(servlet-jsp) 데이터베이스 구성 #2 (0) | 2022.08.07 |
운동기록프로그램(servlet-jsp) #01 (0) | 2022.08.07 |
fmt:formatDate 커스텀 액션(JSP) (0) | 2022.08.04 |
댓글