Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발공부 일지

학원수업_45day [JSP,Servlet(12day) - EL , JSTL] 본문

학원수업/Web(HMTL,CSS,JSP,Servlet)

학원수업_45day [JSP,Servlet(12day) - EL , JSTL]

짜몽- 2022. 10. 5. 09:42

* 전날 복습 *

 

response 를 전담하는건 View

Controller - request 분석, Model 연동, View 선택 제어 이동

View  ex) 서빙

Controller ex) 키오스크

Model  ex) 음식 만드는 것

 

서블릿에서 특정 URL 이나 페이지로 이동하게 하는 *두 가지 방식*

forward redirect
기존 request , response 유지 기존 request , response 유지 X
서버상에서 이동 (URL 변경 X) 클라이언트 브라우저 이동명령 (URL 변경 O) -> View(jsp)변경
새로고침시 재동작 기존동작이 반복하지X (재동작X)
정보 조회 시 사용 삽입, 수정, 삭제 시 사용
주로 get 방식 주로 post 방식
RequestDispatcher().forward(request, response); SendRedirect();
공통적 특성 : Controller 에서 View 로 제어를 이동한다

 

 

Singleton Design Pattern (싱글톤 디자인 패턴)

- 단 하나 객체를 생성해서 사용 (인스턴스변수 1개)

 

1. private Constructor

2. private static 객체 생성

3. public static

 

템플릿 

재사용할수있는 틀을물려준다

ex) 피자


JSP 는 동적인기술을 만드는데 최적화 되었기 때문에 View 로 이용, (템플릿엔진)

Controller 에 Servlet 은 왜 쓰는지?

- 화면을 만들지않기 때문에. JSP 와 분담하여 부담이없다. 제어 용이

 

maven repository (사용가능한 라이브러리 모아둔 곳 )


1. 내장객체란 무엇일까?


"JSP 내에서 선언하지 않고 사용할 수 있는 객체"

 

다시 풀어서 설명하자면 JSP가 서블릿 형태로 자동 변환된 코드 내에 자동으로 포함되어 있는 멤버변수, 메서드 매개변수 등의 각종 참조 변수들을 말한다. 보통 스크립트릿 내부에서 사용하며 내장객체를 통하면 사용자 요청을 컨트롤하거나 페이지 간의 데이터를 손쉽게 공유할 수 있다.

내장객체들은 특정 클래스에 대한 인스턴스 형태로서, 컨테이너를 통해서 초기화되고 다양한 기능과 정보들을 제공한다.

 

* JSP 내장객체 종류

객체명  설명
${pageScope} page Scope에 접근하기 위한 객체
(jsp가 Servlet으로 변환되었을때, Servlet 객체 자신을 의미(=this)
${requestScope} request Scope에 접근 하기 위한 객체
${sessionScope} session Scope에 접근 하기 위한 객체
${applicationScope} application Scope에 접근하기 위한 객체
(ServletContext객체)에 접근하기 위한)
${param} 파라미터값을 가져오기 위한 객체
${header} 헤더 값을 가져오기 위한 객체
${cookie} 쿠키 값을 가져오기 위한 객체
${initParam} jps 초기 파라미터를 가져오기 위한 객체
${pageContext} pageContext 객체에 접근하기 위한 객체 
(다른 내장객체를 생성하는)

 

[ 유효범위 ]

request < session < application(ServletContext)

- request의 유효범위 : response 할 때까지

- session의 유효범위 :

   1) 로그아웃(서버에서 session.invalidate() ) 시 소멸

   2) 클라이언트(브라우저) 종료 시 소멸

   3) 지정한 session timeout까지 재접속이 없을 경우 소면

- application(ServletConext) : 웹 어플리케이션 서비스가 종료될 때까지 유효 

 

EL 에서의 파라미터 제어 객체

- param = request.getParameter();

${param.~}

- paramValues = request.getParameterValues();

 

requestScope가 생략하여 사용 할 수 있지만, 실행속도가 느려지고 구분이 헷갈릴 수 있기 때문에 기재해주는 것을 권장한다.


어떻게 선언하지 않고 (내장객체) 사용할 수 있는 것일까?

작성된 JSP 코드는 서블릿으로 변환된 후 모두 _jspService() 메서드 안으로 들어가기 때문에
메서드 매개변수인 request, response와 지역변수로 선언된
pageContext, application, page, config, out 등은모두 내장객체가 된다.
해당 내장객체들은 _jspService 메서드 부분에서 사용자가 작성된 코드 위에 자동으로 선언되고
초기화 되기 때문에 JSP 파일에서 프로그램을 작성할 때 내장객체를 별도의 선언 없이 사용할 수 있는 것이다.

이클립스에서 내장객체(session)를 선언한 후 편집기(edit plus)를 통해 보면

이런식으로 내장객체의 한 종류인 session 이 자동으로 만들어 진 것을 볼 수 있다.

request, session, ServletContext 결과값


View :

EL / JSTL     

 

** EL ( Expression Language ) ** 


- JSP 버전이 상향되면서 추가된 스크립트 언어 

  기존 Scriptlet tag의 표현식 ( <%= %> ) 의 업그레이드 된 버전 ( ${  } ) 
  JSP 속성영역 ( request, session, application(ServletContext) ) 에 저장된 객체의 property 를 출력하는 용도 
  EL을 이용하면 별도의 import , Object Casting 절차 필요없이 바로 출력이 가능 , 다양한 연산 및 자동 형변환이 된다 
  ● JSTL 과 연동이 가능 !!
  EL은 Model 객체의 get계열 메서드와 is계열의 메서드에만 접근 가능 

- jsp 버전 상승하면서 기존의 <%= %> 을 더 간단하고 효과적으로  사용할 수 있도록 지원한다      
* 기존 jsp 방식 <%= %> 
    EL 방식 ${ } 

 

ex1)  Controller ( Servlet ) 에서 request.setAttribute("member",new MemberVO("java,"a","아이유","오리"); 
    로 저장한 후 forward 방식으로 View ( jsp) 에 제어를 이동했을 때
  -   View ( jsp ) 에서는
     * 기존 jsp 방식*  
         <% import="org.kosta.webstudy16.model.MemberVO" %>   //직접 import 함
   

         <%
       MemberVO mvo=(MemberVO)request.getAttribute("member");   //캐스팅
         %>


기존은   회원명 <%=mvo.getName()%>     주소 <%=mvo.getAddress()%> 이었다면, 
EL방식은   회원명 ${requestScope.member.name}   주소 ${requestScope.member.address}
더 줄여 표현하면 회원명   ${member.name}     주소    ${member.address}

 

ex ) client 가 전달한 query string 또는 form data 를 EL 로 표현할 때는
  기존 → http://127.0.0.1:8888/webstudy16/TestServlet?nick=슈&age=10
  jsp EL → ${param.nick}     ${param.age+2}    ☞ 별도 형변환없이 가능, 받을때는 (get) param %

 

  • scope 를 명시하지 않으면 request -> session -> application 순으로
    정보를 표현한다 .

  **  JSTL( Jsp Standard Tag Library ) ** 

(JSTL + EL)


  View(jsp) 에서 자주 사용하는 기능 ( 조건문 , 반복문, 자료구조의 데이터 표현 )을 

미리 구현해 놓은 태그 라이브러리 .   EL 과 함께 사용해서 View 로직과 데이터를 표현

HTML 코드 내에 java 코드인 스크립틀릿 <%= student %>를 ${student}로, <%=if %>문을 <c:if>, <%=for%>문을 <c:forEach>로 대체하여 사용한다.

예전에는 스크립틀릿을 많이 사용했지만 가독성이 떨어지고, 뷰와 비즈니스로직의 분리로 인해 현재는 JSTL을 많이 사용하는 추세다.

JSTL은 라이브러리 이기 때문에 사용하기전에 core 를 header에 추가해주어야 한다.

 

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

 

* JSTL 의 core의 태그 

태그명 설명
<c:set> 변수명에 값을 할당
<c:out> 값을 출력
<c:if> 조건식에 해당하는 블럭과 사용될 scope를 설정 (if문)
<c:choose> swich 와 비슷
<c:when>  swich 문의 case 의 해당
<c:otherwise> swich문의 default에 해당
<c:forEach> for loop 문, item 속성에 배열을 할당할 수 있음

<c:choose>     

           

   <c:when>

       <form>

     </c:when>

 

   <c:otherwise>

        <form>

  </c:otherwise>

 

</c:choose>


items : 대상 배열 또는 컬렉션

var : 요소를 저장할 변수

varStatus : index와 count 속성이 있다.  (index는 0부터, count는 1부터 시작)