본문 바로가기
Servlet-Jsp

운동기록프로그램(servlet-jsp) Service 부분 #3

by 지민재 2022. 8. 7.
반응형
SMALL
기능 별로 패키지를 나누어 만들었다..  개인적인 차이인듯하다.  
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">

 

댓글