본문 바로가기

2024_풀스택학원/Back-end

[JSP] MVC2

MVC1 디자인 패턴

: Model에 해당하는 데이터 처리 클래스만 분리되고, Controller와 View 가 함께 처리되는 디자인 패턴

 

단점1.

-역할 분담이 어렵다 ( Servlet이 자바 코드인 Controller와 HTML코드인 View를 함께 작성하므로 역할 분리가 안된다.)

 

단점2. 

-Servlet에서 프론트 코드 작성은 너무나도 불편하다. 

 

* 단점 2를 해결하기 위해 JSP가 등장함. 


 

 

Servlet & JSP 

- Servlet = 1세대 

- JSP = (Java Server Page) Servlet을 개선해서 나온 2세대 

-> 동일한 목적으로 만들어진 문서 양식

 

JSP ?

> 컴파일을 두 단계에 거쳐서 진행함 

 

1단계 jsp->servlet 

 

2단계 servlet->binary

html과 jsp 의 차이점

jsp 내에서는 자바를 사용할 수 있다.

 

 

 

 

 

 

자바로 실행된다고 했는데  화면과 같이 출력되는 이유

 

 

1차 컴파일 후 만들어진 servlet 

1차 컴파일을 통해 작성된 소스 

 

 

Scriptlet

<% %>

사이에 작성해주면 자바로 실행이 된다.

 

 

 

inputproc_jsp.java에서 코드 확인

 

 

> 자신을 포함하고 있는 매개변수를 사용할 수 있다.

 

request .을 찍고 getParameter 사용할 수 있다.

 

inputServlet의 역할을 inputproc.jsp가 다 하고 있는 상황

> servlet이 필요가 없는 상황이 됨

 

하지만 역할 분담이 어렵다는 단점은 해결되지 않은 상황임

( MVC1의 단점 )

JSP가 데이터 명령을 내리는 Controller 역할과 화면을 보여주는 View역할을 같이 하고 있음


역할분담이 어려운 단점을 해결하기 위해 MVC2가 등장

 

MVC2 디자인 패턴

: Model/View/Controller가 완벽하게 분리되는 구조의 디자인 패턴

 

 

 

 

forward의 역할은 무엇이며 왜 써야 하는지?

서블릿에서 클라이언트의 요청을 다른 서블릿이나 jsp로 전달하는 기능을 말함

> 서블릿이나 jsp 간에 데이터를 공유하고, 요청을 여러 단계로 나누어 처리할 수 있게 됨

> 서블릿에서 dao를 사용하여 데이터를 처리한 후에는 그 결과를 다른 리소스로 전달

> 이때, forward를 사용하여 처리 결과를 jsp등의 뷰로 전달할 수 있음

 

 

response를 jsp에 넘겨주는 이유?  응답을 담기 위해서 

request 를 jsp에 또 넘겨주는 이유? 서블릿에서 발생한 내용을 jsp에 전달하기 위해서 

 

servlet의 역할: 1. 처리, 2. 응답

1. dao야 값 넣어줘 , 받아온 값은 result에 저장

2. jsp야 화면 꾸며줘 ,  forward로 넘겨줌

 


 

EL( Expression Language )

: JSP내에서 java의 문법이 아닌 새로운 문법으로 자바 값을 사용하는 문법

 

jsp에서 서블릿에서 보내준 값을 어떻게 꺼내써야 할까?

=> $ { } > EL를 사용!

 

${키 값}

${int} => request.getAttribute("int");

 

서블릿)

		List<MovieDTO> list = dao.getMovie();
		
		String[] arr = new String[] {
				"Orange", "Mango","Apple"
		};

		MovieDTO dto = new MovieDTO(9999,"Jack","EL 연습");
		
		request.setAttribute("param1", 10);
		request.setAttribute("param2", "Hello JSP");
		request.setAttribute("fruits", arr);
		request.setAttribute("dto", dto);
		request.setAttribute("list", list);

jsp)

<body>
	
	 * EL( Expression Language ) : JSP내에서 java의 문법이 아닌 새로운 문법으로 자바 값을 사용하는 문법<br> 
	
	 
	${param1}<br>
	${param2 }<br>
	<hr>
	${fruits[0] }<br>
	${fruits[1] }<br>
	${fruits[2] }<br>
	<hr>
	${dto.id }<br>
	${dto.title }<br>
	${dto.genre }<br>
	<hr>
	
	${list[0].id}
	${list[0].title }
	${list[0].genre }
	
</body>

> toOutput 버튼 클릭 시 실행되는 화면

 

* 주의

${dto.writer} dto.getWriter(); 와 같다.

-- > dto안에 반드시 getWriter가 있어야 한다. (세터 게터가 있어야 jsp 에서 꺼내서 사용할 수 있다.)

 

EL의 기능의 한계

1. 조건문과 반복문의 제한

- EL은 주로 데이터의 값을 출력하거나 속성에 접근하는데 사용

따라서, EL내에서 조건문이나 반복문을 사용하여 로직을 제어할 수는 없

2. 복잡한 로직의 한계

- EL은 단순한 데이터 표현을 위한 언어이기 때문에 복잡한 로직이나 연산은 처리하기 어렵다.

 

 


JSTL (JSP Standard Tag Library) 

: JSP 페이지에서 자주 사용되는 기능을 제공하는 라이브러리

> JSP페이지 에서 Java코드를 최소화하고, HTML과 더 가까운 형태로 웹 애플리케이션을 개발할 수 있도록 도와줌

 

https://mvnrepository.com/artifact/javax.servlet/jstl/1.2

JSTL 1.2 jar 파일 다운로드 해서 lib 폴더 안에 넣어주기

 

 

<%@ taglib %> 디렉티브

: JSTL 라이브러리의 사용을 알리는 역할

 

<%@ taglib uri="라이브러리의 URI" prefix="태그 접두사" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

- url : JSTL 코어 태그의 URL

- prefix :  해당 태그를 식별하기 위한 접두사를 정의, c는 코어 태그에 대한 접두사로 자주 사용됨

 

 

사용법

if문 - c:if

 

 

if else문- c:choose

when이 if에 해당

otherwise가 else에 해당함

* 주의 {} 안에 작성해야 한다.

 

for each문

var > 현재 요소를 참조할 변수의 이름을 지정

items > 반복할 요소들을 지정하는 속성 ( 리스트, 배열 등 )/ 각 요소를 순회하면서 반복문 내의 작업을 수행함.

 


 

Redirect 와 foward의 차이점

리다이렉트

- 기능 완료 후 기능에 대한 결과 값을 사용하지 않거나, 리퀘스트 파라미터가 필요 없는 곳으로 이동하고자 할 때 사용

- 클라이언트의 url을 다이렉트로 이동 시킴 ( 주소창에 값을 변경해서 Enter를 치는 효과 )

-  * 클라이언트의 브라우저 주소 값이 변경된다.

 

포워드

- 기능 동작 완료 후 기능에 대한 결과 값을 사용하여 다른 동작을 수행해야 할 때 사용

- 클라이언트가 처음 도착한 url 동작 이후, 기능은 실행되나 포워드 된 곳의 url 주소가 남지 않음

( 클라이언트는 주소가 바뀐 것을 인지하지 못함 )

-  * 클라이언트는 페이지가 전환되었음을 인지 할 수 없다.( 주소값 변경 無 )

 

 

'2024_풀스택학원 > Back-end' 카테고리의 다른 글

[JSP] 영화 목록 입력/ 출력/ 삭제/ 수정 기능  (0) 2024.05.26
[JSP] WAS, Tomcat 설치 , Servlet  (0) 2024.05.22
[JavaScript] Function함수  (0) 2024.05.09
[Java] JDBC_03_Login  (0) 2024.05.02
[Java] JDBC_02_Contact  (0) 2024.05.02