본문 바로가기
웹개발/Springboot

EL 표현식

by HoPpangg 2021. 6. 27.
SMALL

데이터를 화면에 렌더링 하는 문법에는 EL 표현식, JSTL이 있습니다.


잠시 request에 대해 설명을 해보자면, 

 

클라이언트가 브라우저를 통해 요청을 보내면 데이터는 통신선을 통해서 String으로 전달됩니다.

예를 들면 String s ="username=kim"; 로 들어오는데

우리가 사용하기엔 String username="kim"; 이 좋겠죠?

예를 들어 String s = "username=kim&password=1234";로 들어왔다면

String username="kim";

String password="1234"; 

형식이 되어야 우리가 사용하기 좋을 것입니다.

그래서 우리는 들어온 데이터를 활용하기 좋게 문자열을 클래스로 바꿔주는 것이 좋습니다.

이 역할을 톰캣이 합니다.

톰캣은 문자열로 들어온 데이터를 클래스 오브젝트로 바꿔줍니다.

또한 request/response 객체를 톰캣이 만들어서 자바에 전달해줍니다. 

자바는 전달받은 request / response 객체를 servlet이 받아 처리합니다.

 

서버가 실행되면 dispatcher가 Controller annotation을 찾아서 객체생성을 해서 IoC 컨테이너에 올려줍니다.

 

이것을 DI(Dependency Injection, 의존성 주입)이라고 합니다. 

dispatcher가 HomController를 IoC 컨테이너에 넣을 때 Homecontroller 생성자에 대한 request가 필요합니다. 이때 톰켓이 만들어둔 request / response 객체를 같이  IoC 컨테이너에 등록합니다.

request 객체 등록이 제대로 되었는지 사용해봅니다.

서버를 실행시켜주면 당연히 브라우저에서는 home.jsp 파일이 실행되고

콘솔창에는 GET이라는 method 방식이 출력됩니다.

 

IoC 컨테이너에 들어있는 것을 확인하는 tip>

DI 하고 싶은 것들에 final을 붙여 실수화합니다.

 

생성자를 만들어주어 오류를 없앱니다.

우클릭 - Source - Generate Constructor using Fields 하면 쉽게 만들 수 있습니다.

생성자를 만들면 오류가 없어집니다.

request는 들어있는 것을 확인했었으니 Session을 확인해봅니다.

객체가 생성되었다면 해당 코드가 실행될 것입니다.

Sesson is not null! 이 콘솔창에 출력되는 것을 보니 Session도 IoC 컨테이너에 들어있음을 알 수 있습니다. 

 

request와 session 객체를 사용해봅시다.

request객체와 session 객체에  setAttribute 해줄 String변수 2개를 생성합니다.

request와 session 메모리에 데이터를 올리는 것이기 때문에 이름은 같아도 됩니다.

참고해주세요.


다시 EL표현식으로 돌아와서

home.jsp에 request와 session에 올려둔 데이터를 불러옵니다.

EL 표현식을 쓰지 않는다면 표현식 코드를 통해 getAttribute()를 사용해서 데이터를 가져와야하지만 

EL 표현식을 통해 간단하게 가져올 수 있습니다.

브라우저에서 주소요청을 하면 requestData와 sessionData가 잘 전달된 것을 볼 수 있습니다.

 

이렇게 하면 어떤 결과가 나올까요?

requestData가 나오는 것을 볼 수 있습니다. 같은 data 이름이지만 requestData를 가져오는 이유는 EL표현식을 사용하면 메모리의 생명주기가 짧은 것부터 찾아가기 때문입니다.

 

하지만 더욱 간편하게 java class의 데이터를 jsp 파일에 보내는 방법이 있습니다.

home 메서드에 Model 타입의 매개변수를 넣어줍니다.

addAttribute메서드를 사용해서 데이터를 메모리에 올려줍니다.

EL 표현식을 사용해서 데이터를 불러오고 실행시켜보면

ModelData가 실행되는 것을 볼 수 있습니다.

그렇다면 model.addAttribute()를 통해서 전달되는 데이터는 request의 메모리에 올라갈지 session메모리에 올라갈지 궁급해집니다.

sessionScope.data를 통해서 session 메모리에 올라가있는 data를, requestScope.data를 통해서 request 메모리에 올라가있는 데이터를 불러옵니다.

request 메모리에 올라가있음을 알 수있습니다.

그런데 Session Data가 출력되는 이유는 무엇일까요? 분명 앞서 입력했던 것을 지우고 다시 실행시켰음에도 불구하고 Session Data가 출력되는 이유는 아직 Session이 종료되지 않아 데이터가 남아있기 때문입니다.

 

따라서 model.addAttribute()는 request.setAttribute()와 같다고 볼 수 있습니다.

request 객체를 생성하고 변수를 생성해서 넣어주는 과정을 거치지 않고 model.addAttribute()를 통해서 간단하게 데이터를 jsp파일에 보낼 수 있습니다.

728x90
LIST

'웹개발 > Springboot' 카테고리의 다른 글

STS툴에 MariaDB 연동하기  (0) 2021.06.28
Tomcat 메모리  (0) 2021.06.27
Spring @Controller 기초 예제  (0) 2021.06.27

댓글