JSTL EL MVC(feat.Java)

JSTL EL MVC(feat.Java)

반응형

안녕하세요

공부하는 웅이입니다.

Java 와 MVC 그리고 JSTL EL 이 어떻게 작용하는 원리인지 공부해도록 합시다

Java

<% %> : 스크립트 부분

- 해석해주는 Tomcat

- 최종 결과 렌더링은 JSP

JSTL

-JSP에서 만들어 놓은 태그

- 이미 만들어져있는 태그를 이용하는 것

- 라이브러리

- MVN (Maven ) Repository 에서 필요한 API를 검색을 해서, 직접 다운로드를 할 수 있고, dependency를 복사할 수 있습니다

- 해당 코드를 dependency에 복사 붙여넣기를 하여 관리를 수행합니다

링크 :

https://mvnrepository.com/repos/central

jar 파일 위치는 Dynamic Project를 만들고 WebContent안의 Web-INF안의 해당 위치에 놓습니다.

core를 가장 많이 쓰기 떄문에

<%@taglib prefix="c" uri= "http://java.sun.com/jsp/jst/core" %> 라고 최상단에 코드를 작성합니다.

매번 코드를 작성할떄마다 붙여놓고 시작해야 태그에서 prefix c를 사용할 수 있습니다.

단축키는 c이며 for문을 실행할때, 다음과 같이 설정하도록 합니다

JSTL + EL

Jsp Standard Tag Library + Expression Language

JSTL + EL

반복문으로, 점차 커지는 글자를 확인할 수 있습니다.

EL(Expression Language)

1) 목적

<%= %>, out.println() 과 같은 JSP를 활용하는 자바코드는 매번 열고 닫아줘야 하며, 다른 html 태그와 다르게 생겼습니다.

그래서 이런 이질적인 것을 줄이고자 좀 더 Simple 한 출력을 지원하기 위해 사용되기 시작했습니다.

배열이나 컬레션에서도 사용되어 집니다.

JavaBean의 Property 에서도 사용됩니다.

2) 문법

Attribute 형식에서는 <%=i %> 를 쓰지 않고 ${i} 로 쓸 수 있습니다

Parameter 형식에서는 ${param.abc} 같은 형식으로 사용되어 집니다.

여기서 i 는 자바에서 var로서의 변수 이름이며, EL 식에서는 Attribute 이름으로 해석되어집니다

값을 찾을때 Attribute 는 작은 Scope 에서 큰 Scope로 찾는데, 프로세스는 다음과 같습니다

page -> request -> session -> application

& attribute이란?

메소드를 통해 저장되고 관리되는 데이터입니다

PageContext / Request 에서 사용되는 경우

setAttribute("key", value) = 값을 넣는 것입니다

getAttribute("key") = 값을 가져오는 것입니다

removeAttribute("key") = 값을 지우는 것입니다

session에서 사용되는 경우

set/ get /remove 는 동일하며, 추가적으로 invalidate() 은 값을 전부 지우는 것입니다.

DB에서 게시판 테이블은 다음과 같이 2차원 배열형태로 저장이 되어집니다.

그리고 자바에서는 각 Value (row1개) 를 list 한칸에 담고 있습니다.

Java 에서는 list 구조를 보내는데, list 형태이다

Controller(Servlet) 은 html을 이용해서 웹 페이지를 멋지게 구성해야한다html 코드를 잘 쓰는 JSP를 사용하는데, 왜냐하면 view를 담당하기 떄문이다.

Client는 요청을 하게 되는데, Controller에게 request를 요청하면, Controller는 View(JSP) 단으로 해당 요청을 넘기게 됩니다. 이것을 Forward(포워드)라고 합니다.

예를 들어, 은행에서 어떤 자료를 상담원(Controller)에게 요청했을떄, 상담원이 바로 처리하지 않고 밑에 직원을 시켜서 해당 작업을 다른 부하 직원(View JSP)에게 맡겨서, 작업을 수행했을때 고객(Client)는 Controller에게 답을 받는 것을 생각해 볼 수 있습니다.

Client는 Forwarding 작업에 대해서 모를 수 있습니다. 포워딩이 중요한 이유와 MVC 를 전체적으로 다음과 같이 생각할 수 있습니다

프로그램 상에서 데이터를 전달했을때는 어떤 방식을 사용했을까요?

프로그램은 메모리를 사용해서 해당 포워드 작업을 수행하게 됩니다.

ArrayList를 줘야하는데, 현실 세계에서는 그냥 해당 자료를 줄 수 있습니다. 하지만, 자바, 컴퓨터에서는 'set attribute' 를 통해서 , 'get Attribute' 를 통해서 작업을 수행합니다. 여기서 1:1 관계가 아니라, 다른 여러 사람들에게 줘야할때는 'session' 을 사용해야 하며, 한명에게 자료를 줘야하는 경우는 'request' 를 해야합니다. request 는 객체 바인딩(binding) 이라고 합니다.

이때 인증의 개념이 나오게 됩니다. 모든 사용자가 해당 요청을 수행하는 것이 아니기 떄문에, 특정 사용자가 누구 인지에 대해서 인증을 할 필요가 있습니다.

client 가 서버단에 요청을 하는 경우

client 가 controller에게 요청을 하면 Tomcat 서버에서는 2개의 메모리가 생성됩니다.

요청 객체와 응답 객체입니다.

요청객체는 HttpServletRequest /응답객체는 HttpServletResponse 로 생성이 됩니다.

ip 주소와 port 번호 같은 정보로 해당 client를 식별하기 위해 한 쌍으로 생성이 되는 것입니다.

request binding 이란 요청 객체(이미 만들어져 있는 객체)에다가 요청한 자료를 담습니다.

해당 기술의 명칭 = setAttribute 특정 메모리에다가 연결시키는 것

이것을 JSP가 꺼내가는 것을 getAttribute

이 모든 과정을 객체 바인딩 이라고 합니다

뷰는 데이터를 항상 Controller 를 통해서 자료를 받아옵니다. 이때 JSTL 과 EL로 만나게 되는 것입니다.

전체 Map

객체를 request 에 바인딩한 것

controller 에서 Data를 만들고 객체 바인딩까지 해보고, 객체를 request에 바인딩합니다

배열을 만들고, jsp에 넘기고 싶어서 바인딩을 하고, 넘겨주었기 떄문에 다음과 같은 코드가 필요로 합니다.

하나의 파일에서 setAttribute를 실행하고, getAttribute를 실행해볼 수도 있습니다.

라는 코드는 request.getAttribute("str") 라는 str의 배열을 받는 것과 같습니다.

예를들어, 위에단에서 request.setAtribute("aaa", str) 로서 str 리스트 객체를 set한 경우

밑에단에서는 request.getAttribute("aaa") 로 설정할 수 있습니다.

달러표시가 없는 경우, 위에단에서 불필요하게 String[] = s=(String[])request.getAttribute("str"); 을 설정해줄 필요가 없습니다

<% String[] str ={"사과","바나나","포도","오렌지","귤"}; request.setAttribute("str",str); %> Insert title here ${f}

반응형

from http://ongbike.tistory.com/453 by ccl(A) rewrite - 2021-11-16 11:02:18