22/10/05 파일분할과..

ezzange·2022년 10월 5일
0

web

목록 보기
3/3

파일분할

코드 분리하기

1.분리하려고 하는 기능에 따라 패키지와 클래스 및 인터페이스 생성

문자열의 나열을 조회하는 기능을 분리하려고 하기 때문에 서비스이름은 selectlist 으로 하고 다중행 조회하는 로직을 분리하려고 한다.

service 패키지안에 interface BoardService 생성

service.impl 패키지안에 BoardServiceProc.java 생성

추상메서드추가

오버라이드

implements 지금 보는것은 상속관계....
추상메서드가 있는 미완성 클래스에는 완성형 코드로 만들어줘야하는 강제성을 띄운다. 그러므로 셀렉트리스트를 오버라이드해야함

리퀘스트를 사용할 권한을 넘겨주기(응답과요청)

서비스에 기능을 분할하면 예외가발생할수있으니 예외구간 설정은 똑같이 해주기

2.분리하려고 하는 기능 선언과 초기화

BoardController.java에서 선언과 동시에 초기화

private final static BoardService service=new BoardServiceProc();

BoardService라는 인터페이스에서 service라는 변수이름으로 BoardServiceProc에서 구현된 기능을 사용한다는 뜻

코드분리하려고 하는 부분에 작성

service.selectlist(request, response);
요청하고 응답할떄마다 조회 서비스를 한다는뜻.

3.코드분리

코드 분리로 인해 BoardController의 코드가 더 간결해짐

다중행 조회쿼리를 BoardServiceProc로 이동

package controller;
import java.io.IOException;
import java.util.List;
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 org.apache.ibatis.session.SqlSession;
import domain.dto.board2.Board2DTO;
import mybatis.MybatisConfig;
import service.BoardService;
import service.impl.BoardServiceProc;
@WebServlet(urlPatterns = {"/board/list","/board/write","/board/proc"})
public class BoardContoller extends HttpServlet {
	private static final long serialVersionUID = 1L;
			//파이널은 수정불가 선언과동시 초기화
	private final static BoardService service=new BoardServiceProc();
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//request.getWriter().print("<h1>board list page</h1>");
		String uri=request.getRequestURI();
		System.out.println(uri);
		String[] strs=uri.split("/");
		String key = strs[strs.length-1];
		System.out.println("key : "+key);
		/*
		for(int i=0; i<strs.length; i++) {
			System.out.println("strs["+i+"] :" +strs[i]);
		}
		*/
		String path=null;
		if(uri.contains("list")) {
			path=service.selectlist(request, response);
		//응답할 페이지정보는 JSP파일로 지정할 수 있어서 굳이 이렇게 할 필요가 없다.
		//경로는webapp부터 
		//내가 지정한 디스패서는 리스트 요청이 들어오면 리스트 알려주는거임
		}else if(uri.contains("write")) {
		path="/WEB-INF/view/board/write.jsp";
		}else if(uri.contains("proc")){
			service.save(request,response);	
		}//End if
		if(path!=null)
		request.getRequestDispatcher(path).forward(request, response);
}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		doGet(request, response);
	}
}

또한 브로드 컨트롤러의 글쓰기처리 로직도 분리가능

1.분리할 코드부분에 service.save(request,response); 작성
2.BoardService에 save 추가
3.BoardServiceproc에 save Override
4.코드 분리 파일분할 끝!


리턴값이동하여 한줄로도가능

필터에 루트값 적용

인덱스에 이부분 삭제가능
중복

루트값으로 다 바꿔주기 뭘 바꾸지?

package controller;

import java.io.IOException;
import java.util.List;

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 org.apache.ibatis.session.SqlSession;

import domain.dto.board2.Board2DTO;
import mybatis.MybatisConfig;
import service.BoardService;
import service.impl.BoardServiceProc;


@WebServlet(urlPatterns = {"/board/list","/board/write","/board/proc"})
public class BoardContoller extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	private final static BoardService service=new BoardServiceProc();
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//response.getWriter().print("<h1>board list page</h1>");
		String uri = request.getRequestURI();
		System.out.println(uri);
//		String[] strs=uri.split("/");
//		String key = strs[strs.length-1];
//		System.out.println("key : "+key);
//		for(int i=0; i<strs.length; i++) {
//			System.out.println("strs["+i+"] :" +strs[i]);
//		}
		String root=request.getContextPath();
		String path=null;
		if(uri.equals(root+"/board/list")) {
			path=service.selectList(request, response);//요거가 if문을 대신함 
			//응답할 페이지 정보는 JSP파일로 지정해줄수있어요
			path="/WEB-INF/views/board/list.jsp";
		}else if(uri.equals(root+"/board/write")) {
			path="/WEB-INF/views/board/write.jsp";
		}else if(uri.equals(root+"/board/proc")){
			service.save(request,response);
		}
		if(path!=null)
			request.getRequestDispatcher(path).forward(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

리스트 에서 부분 수정



문자열 "bno"를 Long.parseLong으로 숫자열로 변환 하여 오버라이드

디비접속을 위한 세션 호출을 변수선언하여 불러오기만 할수있게 만들기

bno결과 뿌리기



config package 에 EncodingFilter.filter 생성
![]

0개의 댓글