230705 day63 개념 정리

Jin·2023년 9월 2일
0

codenotion

목록 보기
57/90
post-thumbnail

JSTL - jsp standard tag library

태그를 모아 표준으로 만들어놓은 라이브러리


jsr파일 다운로드 후 web-int => lib => 붙여넣기


접두어와 uri 추가해야 사용 가능 

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




5가지 태그를 제공


Corex태그

변수지원

<c:set> : jsp 사용될 변수 설정

<c:set var ="변수명" value="" scope="영역"/> 
-> 영역을 지정하지 않으면 page영역에 생성됨.

<c:set var ="변수명" scope="영역"></c:set>


<c:remove> : 설정된 변수 제거

<c:remove var="변수명" scope="영역"/>
흐름제어


<c:if> : 조건에 따라 내부 코드를 수행

<c:if test="조건" var="변수명">
	조건이 true일 때 출력될 문장
</c:if>

ex>
<c:set var="numvar1" value="100"/>

<c:if test="${numvar1 % 2 eq 0}" var="result"> 
	${numvar1}은 짝수입니다.
</c:if>

<c:if test="${not result}" var="result2">
	${not result} =${numvar1}은 홀수입니다. 
</c:if>




<c:choose> : 다중 조건을 처리할 때 사용

<c:choose>
	<c:when test="조건1"> 조건이 맞을 경우 출력</c:when>
	<c:when test="조건2"> 조건이 맞을 경우 출력</c:when>
	<c:otherwise>맞는 조건이 없을 경우 출력</c:otherwise>
</c:choose>



<c:forEach> : 컬렉션이나 배열의 각 항목을 처리할 때 사용

begin : 시작값
end : 종료값
step : 증감
varStatus : 루프의 상태
items : 반복을 하기위한 객체를 지정 (향상된 forEach)

<c::forEach var="변수명" begin="시작값" end="마지막값" step="증가값">
</c:forEach>

ex>
<c::forEach var="i" begin="1" end="5" step="1">
${i}
</c:forEach>
-> 1~5까지 출력됨.


ex.
<c::forEach var="i" begin="1" end="5" step="1" varstatus="loop">
	${loop.count} ${loop.index} ${loop.current} ${loop.first} ${loop.last}
</c:forEach>

count : 몇번 반복했는지
index : 현재 가지고 있는 값
current : 현재 가지고 있는 값
first : 처음이면 true아니면 false
last : 마지막이면 true 아니면 fasle



<c::forEach var="변수명" items="배열이나 컬렉션">
</c:forEach>

ex.
<%
String[] strArr = {"a", "b", "c", "d"};
%>

<c::forEach var="str" items="<%= strArr%>">
${str}
</c:forEach>



<c:forTokens> : 구분자로 분리된 각각의 토큰을 처리할 때 사용

ex.
<%
String fruitstr = "사과, 딸기, 오렌지, 귤";
%>

<c:forTokens items="<%= fruitstr%>" delims="," var="fru" >
${fru}
</c:forTokens>



URL처리

<c:import> : url을 사용하여 다른 자원의 결과를 삽입

<c:import url="페이지경로"/>

<c:import url="페이지경로" var="page1"/>
${page1}

==> 만약 내가 div뒤에 부르고 싶다.

<c:import url="페이지경로" var="page1"/>
<div> </div>
${page1}


==> 만약 내가 div앞에 부르고 싶다.

<c:import url="페이지경로" var="page1"/>
${page1}
<div> </div>



==> 값을 param으로 전달할 수 있다.

<c:import url="페이지경로">
<c:param name="" value=""/>
</c:import>


==> 값을 쿼리스트링으로 전달할 수 있다.




<c:redirect> ==> 지정한 경로로 리다이렉트 함

<c:redirect url="이동할 경로"/>


<c:redirect url="이동할 경로">
<c:param name="" value=""/>
</c:redirect>

ex>
<c:redirect url="이동할 경로">
<c:param name="userParam1" value="a"/>
</c:redirect>

또는 쿼리스트링사용

<c:redirect url="이동할 경로?userParam1=a"/>



기타태그

<c:catch> ==> 예외처리

<c:catch var="변수명">
</c:catch>
예외내용 ${변수명}

==> 어떤 예외가 발생했는지 출력할 수 있다.


<c:out> ==> 출력지원

<c:out value="출력할 변수" default="기본값" escapeXml= "특수문자처리유무">

ex>
<c:set var="var1">안녕하세요</c:set> ==> 변수 만든거
${var1} ==> el로 출력해야한다.

그런데

<c:out value="${var1}"/> ==> 이렇게 출력할 수 있다.

그러면 el로 출력하는게 편한데

out은 default를 줄수 있다.

<c:out value="${param.name}" default="out"/>

==> param으로 이름을 받아 올 수도 있고 안받아올 수도 있는데

안받아 온 경우에는 default값인 out으로 출력이 된다.




Formattion 태그 : 국제화 태그
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt"%>

다양한 언어, 날짜, 숫자 형식을 설정할 때 사용 
접두어 - fmt

01) 숫자포맷 

formatNumber : 숫자포맷을 설정 
<fmt:formatNumber value="출력할 숫자" type="출력양식" pattern="숫자패턴"
var="변수 설정" groupingUsed="구분기호 사용여부" scope="영역" />

- value : 출력할 숫자를 설정
- type : 출력 양식 설정 percent(퍼센트), currency(통화), number(일반숫자, 기본값)
- var : 출력할 숫자를 변수에 저장, var속성 사용시 즉시 출력되지 않고 
원하는 위치에 출력 가능 
- groupingUsed : 세자리마다 콤마를 출력할지 여부를 지정, 기본값은 true


parseNumber : 문자열을 숫자 포맷으로 변환 
<fmt:parstNumber value="문자열" type="출력양식" var="변수설정"
integerOnly="정수만파싱" pattern="패턴" scope="영역" />



02) 날짜 포맷 및 타임존

<fmt:formatDate> 태그
<fmt:formatDate value="출력할 날짜" type="출력양식" dateStyle="날짜스타일"
timeStyle="시간스타일" pattern="날짜패턴" scope="영역" var="변수설정" />

- value : 값 입력
- type : 날짜(date), 시간(time), 날짜 및 시간(both) 세 가지 중 선택 
- dateStyle : default, short, medium, long, full 중 선택 
- timeStyle : default, short, medium, long, full 중 선택
- pattern : 출력할 날짜와 시간 양식을 패턴으로 지정 
- var : 변수 지정 
- scope : 변수를 저장할 영역 지정 


설정한 지역 시간대로 출력 
<fmt:timeZone value="America/Chicago">	
</fmt:timeZone>

로케일 설정 
국가별로 다른 통화기호나 날짜를 표현할 때 사용 

<fmt:setLocale value="국가기호" />






XML 태그 
XML 문서를 처리하기 위한 태그
XML의 파싱 및 출력, 흐름제어 등의 기능을 제공 

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

XML 태그 종류 
out : select 속성에 지정한 XPath 표현식의 결과를 출력 
parse : XML 파싱할 때 사용 
forEach : select 속성에 지정한 반복되는 노드를 파싱 
if : select 속성에 지정한 XPath 표현식의 값을 하나의 조건으로 결정 
choose : select 속성에 지정한 XPath 표현식의 값을 다중 조건으로 결정 
when, otherwise 태그 사용

파싱 : 주어진 데이터를 분석하여 원하는 데이터를 특정 패턴이나 
순서로 추출해서 가공하는 것을 말함


XML (exenssible markup language)
확장이 가능한 마크업 언어 
개발자가 직접 태그를 정의할 수 있고 데이터를 기술할 수 있는 언어 
데이터를 저장하고 전달할 목적으로 만들어짐 
웹애플리케이션 사이에서 데이터를 전달하는게 목적 



서블릿 (Servlet)
jsp 나오기 전 자바로 웹 어플리케이션을 개발할 수 있도록 만든 기술 
서버단에서 클라이언트 요청을 받아 처리한 후 응답하는 역할을 담당 

- 클라이언트 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트임
- MVC 모델에서 컨트롤러 역할을 함 
- javax.servlet.http 패키지의 HttpServlet 클래스를 상속받음 

클라이언트 요청 -> 서블릿 -> model -> view


서블릿 작성 규칙 
1. javax.servlet, javax.servlet.http, java.io 패키지를 임포트함 
2. 서블릿 클래스는 반드시 public으로 선언해야하며 HttpServlet을 상속받아야함
3. 사용자의 요청을 처리하기 위해 doGet() 메소드, doPost() 메소드를 오버라이딩해야함 
4. doGet() 메소드, doPost() 예외를 던지도록 선언함
5. doGet() 메소드, doPost() 메소드를 호출할 때
매개변수 HttpServletRequest와 HttpServletResponse를 사용함 


매핑 요청명 ---> 서블릿
study.do 요청 

1. web.xml에서 매핑
<servlet>	 	서블릿 등록
	<servlet-name>서블렛 이름</servlet-name>
	<servlet-class>패키지를 포함한 서블릿 클래스명</servlet-class>
</servlet>

<servlet-mapping> 	서블릿과 요청명 매칭
	<servlet-name>서블렛 이름</servlet-name>
	<url-pattern>클라이언트 요청 url</url-pattern>
</servlet-mapping>


2. @WebServlet("클라이언트 요청 url 경로")
서블릿 클래스 생성 

Post
doPost()


서블릿 수명주기 메소드 

클라이언트 요청 (서블릿 객체 생성) -> 서블릿 초기화 
-> 요청 처리 -> 서버 종료 (서블릿 객체 소멸)

서블릿 수명 주기는 서블릿 컨테이너가 담당함
서블릿 객체 생성, 각 단계마다 자동으로 특정 메소드를 호출하여
해당 단계에 필요한 기능을 수행

서블릿 객체 생성 -> @PostConstruct -> init() 
-> service() -> doGet(), doPost() -> destroy() -> @PreDestroy


1) @PostConstruct
객체 생성 직후, init() 메소드 호출 전에 호출됨

2) init()
최초 요청 시 한 번만 호출
서블릿의 초기화 작업을 수행하기 위해 호출 

3) service()
클라이언트의 요청을 처리하기 위해 호출 
전송 방식이 get 이면 doGet() 메소드, doPost() 메소드를 호출함
service() 메소드는 두 가지 전송방식 모두 처리할 수 있음 

4) destroy()
서블릿이 새롭게 컴파일 되거나 서버가 종료될 때 호출

5) @PreDestroy
destroy() 메소드가 실행되고 난 후 컨테이너가 서블릿 객체를 
제거하는 과정에서 호출됨 


MVC 패턴
모델 (DAO, DTO)
뷰 (JSP)
컨트롤러(서블릿)

profile
신입 개발자의 배웠던 것을 복습하기 위한 블로그입니다.

0개의 댓글