본문 바로가기
코딩

2022.03.21_29일차_spring(4)_EL, JSTL

by 흥뷰자 2022. 3. 22.

29일차 학습내용

EL
JSTL
core태그
formatting태그

지난시간 수업내용

<%= 자바코드 =>스크립트 태그를 대체할 것

el, JSTL 표현언어 두개로..

 

새로운 페이지 만들어보기

 

 

모델 키 벨류로 보내기 

여기까지는 지난시간에 한 것. 

 

 


1. 표현언어 Expression Language : EL


: 모든 웹에서 사용되는 웹 언어(스크립트 언어)
표현에만 초점을 맞춘 언어, 대입 개념 X // 연산 아닌 출력기능
출력문을 더 쉽게, 간결하게 사용할 수 있는 언어. //어디서든 사용 가능 , 자바에서도 쓰는 것 뿐
//정해놓은 표준 jsp JSTL Jsp Standard ... 에서 jsp 2.0부터 표현언어 쓸 수 있음

체그한거 movies, 체크 안한거 null, sports, null ... 이렇게 나왔던게 el에서는 null을 공백으로 출력함. nullPointException 에러 안나고 널 아닐때만 출력하는 분기처리도 필요없음 

 

속성을 추가해서 뷰까지 전달 getAttribute

jsp안에 내장객체 request.

session.

화면으로 넘어왔을 때 내장객체 있는데

el에서는 내장객체를 어떻게 접근을 할까? requestScope~~~~~

 

EL 객체 

 

 

 

사용

결과물

두군데로 보내기 이름이 동일한 문제

요청 당. 요청마다 값이 달라짐

 

 

세션으로도 보내기. 이름 동일해도 세션 범위 달라서 가능 

브라우저당 할당. 브라우저 하나가 계속 씀. 

 

name만 쓴경우

requestScope. 쓴 경우

sessionScope. 쓴 경우

출력 다음과 같다

param 

요청을 타이핑해서 해보자

값 없거나 null인 경우 화면에 출력 안됨. 에러는 아님.


JSTL : 기본적으로 출력~~~ (변수에 담으면 안출력)

필요성

배열보내기
객체생성 바로 하면서 보내기
el의 한계  출력만 해주니까 자바코드 쓸수밖에. 변수선언 이프 포문 써야 할 경우 다 태그로 ~~~~ 자바로 안쓰고 jstl

 

jstl 라이브러리 배치

Spring Legacy Project 생성 자동으로 pom.xml에 배치되어있음

아니면 메이븐 리파지토리에서 직접 코드 복사해서 배치 가능

 

JSTL 태그의 종류 주로 사용할 두가지 :core 태그와 formatting (국제화)태그

 

core 태그

 

 

core태그사용하려면 디렉티브태그로 사용을 선언해야 함

 

core태그의 태그 종류들

 

새로운 페이지 만들기

 

변수를 생성~~ 출력도 바로 앞에

testDTO를 가져오기 모델로 보내기

 

값을 채워서 보내주기 target과 property로 

태그의 속성 값으로 넣을 때 띄어쓰기도 주의 / 객체가 타겟 안에 들어감 값으로/ 해당 태그의 값을 value로 지정

target은 EL로 직접 지정해야 함. 프로퍼티와 값은 그냥 직접 써도되지만. 

 

 #1. 태그로 변수 생성~~~  : set
홑태그는 태그 내부에~~ 
var : 변수명.표현식, EL, 정적텍스트 사용해 값 지정 가능.
property : 프로퍼티 이름지정. 자바빈(롬복골뱅이자동관리)의 경우 변수명(->set메서드 호출)
target : 값 설정할 대상 객체. 표현식. 또는 표현식 안쓸거니까 EL을 사용하여 지정. 자바빈이나 Map타입이 올 수 있다.

dto: 다른 파일 (롬복으로 빈자동관리 등록 명령있는 파일) 외부파일이니까 임포트해서  값을 넣어주면서 꺼내보기

#2. 변수삭제

#3. c:if 조건문

: 조건문. 자바에서 if문만 쓰는 형태 else없이. 

#4. c:choose, c:when, c:otherwise // if else if else느낌

#5 forEach 업글포문

#5.2 일반 for문처럼 쓰려면

# 구구단 출력

* 상태값 표시

varStatus= "status"이름 붙이고 

status.안에 들어있는 속성값을 더 꺼낼 수 있다.

#. forTokens

 

 

리다이렉트 테스트 01호출

test02로 들어가기만 하는데 01로 들어가짐

#9 파람을 들고가도록 해줄수도 있다

#10. c:out

화면출력을 el로도 가능 core로도 가능

 

 

 

 

 

태그 안에는 뒤에게 더 낫다

 

 


formatting 

fmt 국제화

     태그선언
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

 

새로운 페이지 만들기

 

<%-- request.setCharacterEncoding("UTF-8); 과 동일한 효과 --%>
<fmt:requestEncoding value="UTF-u"/>

태그들 다 섞어 써도 상관 없음. 각각 기능에 맞게끔 작성...

 

뷰로 데이 객체생성해서 하나 보내줌  

fmt:formatDate 

 

 

<%-- request.setCharacterEncoding("UTF-8); 과 동일한 효과 --%>
<fmt:requestEncoding value="UTF-8"/>

 

 

 

시간 포맷도 

fmt:formatNumber

통화 관련

원화표시는 \ (역슬래시) 기능으로 쓰는게 아니라고 표시하기 위해 두개 \\써줘야

 

퍼센트

나누기 시 소수점 자리수 표현

fmt는 기본 출력이니까

변수처럼 쓰고싶으면 var에 담에서 마치 c:set처럼 쓸 수 있다. 출력아니고 변수만 선언해서 아무것도 출력안됨

게시판할 때 아주 유용하게 쓸 것~~~~

(변수에 담지 않으면 바로 출력됨)

 

timezone

GMT 그리니치 표준 시간. 영국

 

 

추가로 볼거 el쓰는거 배열이나 ArrayList랑....

ArrayList

 

리턴타입 있는건 가능 없는건 get으로 사용 불가

 

자동으로 get메서드 호출해서 출력

 

쿠키 쓰고 자동로그인 처리도 해보고

스프링 시큐리티도 해보고

부수적으로 

jQuery aJAX

lest방식으로 처리할 때 어떻게 경로가 바뀌는지... 모든 데이터가 URL방식으로 넘어가는 게 lestAPI

spring boot설정하는법

 

 

모델 & 뷰

 

DB setting


 

 

 

파라미터로만 넣으면 뷰까지 잘 전달되지 않는다.

자바빈즈 규약= 롬복으로 하면 자동으로 따라서 잘 만들어짐. (게터 세터, 기본생성자)

 

 

 

 

 

 

 

//http://localhost:8080/day04/test04?id=java&pw=1111

자동으로 내부에 

꺼낼때 dto로 붙였는데

그냥 객체를 쓰게되면

끄집어 낼때

데이터 이름을 dto로 지칭하지 않음 매개변수 이름은 무시

타입이 더 중요,

클래스 변수명만 쓴 경우 클래스 첫 글자를 첫글자로 바꿔서 이름으로 뽑아낼 수 있어. 매개변수이름이 아니고

자동으로 채워는 주지만(매개변수 파람이름 같으니까).뷰까지 전달은 안됨

뒤에꺼는 model.addAttribute를 해서 보내든지 (수정가능)

annotation을 이용 (수정불가)

 

@ModelAttribute - 매개변수 앞에 붙이기

모델모델 한거랑 동일 

차이

요청할 때 받아온 그대로 받아서 넘겨주는건 modelAttribute

파라미터로 받은걸 바꾸고 갱신하는건 model.addAttribute로 써야 함

 

 

수정하고 싶으면 dto 앞에도 붙이면 돼 

 

 

또 다른 용도

@ModelAttribute - 메서드 위에 붙이기. 메서드 레벨에 붙이기 언제? 만든객체를 여러 이 클래스(requestMapping된 클래스 (=폴더 day04))의 모든 jsp(view)에서 이용하려고 부를 때~~ 이 메서드가 자동으로 호출됨 ..

여러번 복붙할 필요 없이 해결이 됨!!!모델에 리턴받는 객체를 추가. 

컨트롤러 아래 tv객체를 만든다.

 

ModelAttribute("tv") 생성되는 객체에 이름을 붙여서 뷰까지 전달~~해줌. 

방법: tv객체를 리턴해주는 메서드를 하나 만들고

@ModelAttribute("tv")를 메서드 위에 붙이기!

test01~04 페이지 모든 view에서 tv객체가 사용 가능해짐

아래 코드를 보면 test03.jsp파일을 요청했는데, ModelAttribute를 메서드 위에 써서 자동으로 호출되어서

getMapping보다 먼저 실해됨 . tv객체에 넣어주고 돌아감. 파람을 ModelAttribute한애가 낚아 챈 모습. 

애초에 test03매핑에는 파람이 Model만 되어있음 

 

test04.jsp페이지 요청해도 마찬가지로 파라미터값 받아줌

 


모델 & 뷰

test05 만들기

public void로 할거면 - url경로와 = jsp파일 경로를 동일하게 맞춰서

public String 스트링 타입이면 결국 return으로 위치 줄거라 상관없어 안맞춰도 됨

위에거는 모델과 뷰를 따로따로 올린 것

 

함께 쓰는 방법도 있다~~~ ModelAndView 겟매핑으로 

@GetMapping("test05")

public ModelAndView test05 (){}

리턴타입 자체를 ModelAndView로 해주고 리턴타입도 그거로 . 

결과는 동일. 요즘은 잘 안쓰는 방식~~~~


redirect는 첫 페이지도 요청되고 다시 새로운 페이지도 요청됨 (controller안에서 페이지 이동)

사용자는 첫페이지 한번만 요청한건데 내부에서 컨트롤러에서 요청 추가로 더 들어간것.

쓰는 경우: 로그인 페이지 폼 페이지 로그인 버튼 누르면 

처리해주는 페이지가 요청되면서 비교해서 돌려준 다음에 로그인이 잘 됐으면 메인페이지로 넘어감

c:redirect와 동일 태그로 이동시키는거고

이건 문자열 스트링 타입으로 jsp주소경로 ~~~

 


post요청 테스트 브라우저로 하기

크롬 확장프로그램

chrome web store

restlet api

스프링에서는 기본적으로 forward방식으로 리턴. 

요청페이지랑 도착지랑 주소가 동일

 

'코딩' 카테고리의 다른 글

2022.03.23_31일차_spring(06)  (0) 2022.03.24
2022.03.22_30일차_spring(5)  (0) 2022.03.24
2022.03.18_28일차_스프링(3)  (0) 2022.03.18
2022.03.17_27일차_스프링(2)  (0) 2022.03.17
2022.03.16_26일차_스프링(1)  (0) 2022.03.16

댓글