WEB/✿JSP

[JSP] 🔗MVC

W_W_Woody 2022. 1. 20. 19:20

MVC 패턴

모델1 방식을 더 세분화. 단점은 파일이 더 늘어난다.

로직을 처리하는 모델과 결과 화면을 보여주는 뷰가 분리되 흐름 제어나 사용자의 처리 요청은 컨트롤러에 집중












Model 1 MVC

 

- MVC 패턴

모델(Model) 비즈니스 영역의 상태 정보(데이터)를 처리한다.
넓은 의미로 자바빈과 DAO를 포함 하기도 한다.
뷰(View) 비즈니스 영역에 대한 프레젠테이션 뷰
(즉, JSP가 만드는 것 = 사용자가 보게 될 결과 화면)를 담당한다.
컨트롤러(Controller) 사용자의 입력 및 데이터의 흐름 제어를 담당한다.

 

forward기법으로 request공유 (주로 request에 저장하고 그다음 session에 저장)


①Servlet을 만들어 작업해야하므로 main/webapp/test.jsp 만들어서 실행테스트를 해본다.

② servlet파일을 생성한다.

기본적인 서블릿 형태 만들기. HTTP상속받아야함 

public class DispatcherServlet extends HttpServlet { 

 

어노테이션으로 매핑걸거나, xml로 매핑걸기 [JSP] 🔗주소매핑

<servlet-mapping>

   <servlet-class> 클래스명(src/main/java 하위부터 경로 작성)

   <url-pattern> 주소가 만들어져서 호출한다는 소리이다.

<servlet-mapping>

 

Servlet.jsp 가 동작이 잘 되는지 확인한다.

Servlet을 사용할 때

get방식으로 호출하면 (doGet) 구현

post방식으로 호출하면 (doPost) 구현

그런데, 클라이언트가 get방식으로 호출되던, post방식으로 호출되던  오류없이 servlet진입해야 하므로 에러나지 않도록 둘 다 구현시켜놓는다.

 

어느 방식으로 호출되던 동일한 작업을 하고 싶다면 같은 메서드를 작업하게한다.

그리고 그 메서드를 만들어준다. 내부에서만 호출되므로 private

public class DispatcherServlet extends HttpServlet { 
	/* get방식으로(doGet) 호출 할 때 */	
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
							throws ServletException, IOException{
		requestPro(request,response);
		
	}
	
	/* post방식으로(doPost) 호출 할 때 */	
	//get방식으로 호출되던, post방식으로 호출되던 에러나지 않도록 둘다 호출
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
							throws ServletException, IOException{
		requestPro(request,response);
	}
	
	private void requestPro(HttpServletRequest request, HttpServletResponse response)
							throws ServletException, IOException{
    }

 

VIEW역할을 하는 JSP를 forward방식으로 부른다

RequestDispatcher dispatcher = request.getRequestDispatcher("/views/messageView.jsp" );

dispatcher.forward(request, response);

 

"/views/messageView.jsp"  파일을 생성한다.

Servlet을 호출해서 주소가 아까 지정했던 /disp로 나온다.


 

데이터를 만들어내기 위해서 모델클래스를 생성한다 (객체 생성, 그 안에 메서드 만들고 메서드 구동)

Jsp에 1대1 대응하여 모델클래스를 만들어야한다.

 

예를 들어 모델클래스를 5개 만들고 그안에 메서드가 각각 다르다면 관리하기가 힘들어진다

자료형이 다 달라지면 조건체크를 해야하니까 하나의 메서드와 하나의 자료형을 만들어 통합시킨다.

 

 

하나의 메서드로 설정한 메서드를 꼭 쓰도록 강요해야한다. 이것을 표준화라고 하는데 표준화하는 방법에는

추상클래스를 만들어서 상속시키게 하거나

상속시킬 일이 없으면 인터페이스를 만들어서 강요하는 방법이있다.

 

인터페이스를 만들어보자 Servlet과 같은 경로에 Action.java 파일을 생성한다.

우리가 만든Action을implement해준다

 

데이터 처리를 이곳에서 해주고 데이터가 만들어지면 request에 전달한다.

view와 일대일 대응을 하는 jsp경로 정보를 Servlet에게 반환한다.

 

 

views/list.jsp 파일 생성

 

Servlet을 호출하게 되면 get방식이든 post방식이든

requestPro()를 호출하고 HttpServletRequest, HttpServletResponse 공유를 하게되고

try {
//모델 클래스의 execute메서드를 호출하고 jsp경로를 반환 받음
view = com.execute(request, response);
} catch (Exception e) {
e.printStackTrace();
}

Servlet.java 에서 메서드 호출작업을 하는데

 

 

forward방식으로 jsp(MVC에서의 VIEW)호출
RequestDispatcher dispatcher = request.getRequestDispatcher(view );//

dispatcher.forward(request, response);

 

변수로 만든이유가 모델 클래스르 호출 할 때마다 반환값이 매번 달라지므로(/views/list.jps 또는 /vies/detail.jsp 등등)

달라지는 데이터를 받기위해 변수적용을 한 것이다. 처리로 한 결과값(view)이 jsp경로
dispatcher.forward(request, response);

 

 

 

 

실제 작업할 때는 Servlet은 주어지기만 한다

 

 

 


ddd

 

 

 

 

 

 

 

 

 

 

 

 

 

d

[JSP] 🔗주소매핑

스크립틀릿<%%> 표현식 안씀

EL과 JSTL의 조합으로 사용

 

 

 

 

 

dispatcherServlet.jsp에서

Redirect 방식을 것이 아니라 forward방식을 것이다

🔗include