본문 바로가기
Spring

서블릿과 jsp

by 사브나19 2022. 8. 26.

HTTP의 특징

>> 상태 정보를 저장하지 않는다 즉 stateless  ( 이 반대말은 stateful)

>> 상태 정보를 저장하지 않기 때문에 저장소가 필요하다. 범위에 따라 4개로 나눈다. 

4개의 저장소 1) 접근 범위 2) 생존기간에 따라 

저장소에는 MAP 형태로 저장이된다. key value 형태로 

 

pageContext(저장소)라는 저장소에서 lv를 저장한다. 기본 객체 request, response 등을 저장한다. 

왜? 저장소에 lv를 저장하는가?

그것은 EL 때문이다. ${ }

EL에 쓰려면 저장소에 꼭 저장을 한 후에 읽을 수 있다. 그래서 페이지 저장소에 저장 후 꺼내 쓴다.

pageContext는 이 페이지 안에서만 접근이 가능하다. 

 

application(저장소)이라는 저장소는 WebApp전체에서 접근 가능 저장소이다. 전체에서 딱 1개 가능

저장할 때 쓰는 메서드 쓰기 SetAtrribute()  읽기 getAttribute()

 

session은 개별 (저장소) : 클라이언트 하고 1대 1 (쿠키랑 연관) 서버 부담이 크다 

 

request (저장소 ) 요청이 처리되는 동안만 저장되고 끝나면 사라짐 그래서 부담이 가장 적다. forward로 다른 페이지간에 전달할 수 있으니 가장 먼저 고려할만한 저장소가 request이다. 

 

 

 

 

보통 request가 들어오면 pageContext에 있는 jsp가 처리 하지만 간혼 JSP가 다른 JSP에게 연결 혹은 토스하기도 한다. 우리가 문의 전화를 걸었는데 내선번호 연결시키듯이. 이를 forward라고 한다. 

웹 프로그램은 결국 페이지간에 이동이다. 이동 중 가장 쉬운 것이 바로 session이다. 

이 저장소를 이용하는 게 가장 편하지만 메모리 부담이 크다. 그래서 가능하면 부담이 가장 적은 request 객체를 쓰는 것이 가장 좋다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

서블릭에서 url 패턴- 서블릿에서는 여러 url을 배열 형식으로 등록이 가능하다. 

서블릿은 lazyinit이지만 url에 loadOnStartup=1을 하면 미리 초기화를 진행해준다. 

서블릿을 호출하기 전에 미리 만들어두는 것이다. 여기서 번호는 우선순위를 적어주는 것.(여러 우선 초기화 중에 )

 

url 패턴

1. exact mapping : 정확하게 입력된 매칭 url이 1등

2. path mapping: /login/* 이게 2등 

3. extendsion mapping : *. do

4. default mapping: 앞서서 매칭이 안되었을 때 이것이 매칭 된다. 

앞 그림과 이어짐 

내가 hello라고 치면 그와 연결된  mapping을 찾는다. 일단 servletMappings에서 찾고 그와 연결된 내용을 다시 children에서 찾아 연결시켜준다. Servlet Context안에 servletMappings과 children이 있는데 그 순서가 servletMapping >>children이다. 이것은 서블릿의 경우도 이를 발전시킨 스프링에서는 dispatherServlet이 그 역할을 하고 있다. 

 

EL(Expression Language)

<%=값%>  이렇게 쓰던 것을  ${값}  이렇게 간단하게 바꿀 수 있다 

 

가끔 jsp가 적용이 되지 않을 때 자동으로 설정된 파일들을 지워주면 된다. 

어떻게 지우냐면

server 탭 >>톰캣 누르고 우클릭>> Clean Tomcat Web Diractory 

이렇게 하면 자동으로 생성된 파일을 지울 수 있다. 

굳이 이 방법을 알아야 하는 이유는? jsp를 고쳤는데 반영이 되지 않을 때 이런 식으로 지워주면 된다. 

패캠>15 서블릿과 jsp>26분 확인 

El에서 lv는 쓸 수 없기 때문에 저장소에 저장한 후 그것을 쓴다. 

 

Scope(범위)_ 좁은 범위 page부터 넓은 application 기본객체 (저장소)
page page Context
request request
session session
application application

예_ request.setAttribute("name", "남궁성");  이런 식으로 저장한다. 

    이는 requestScope.name 이런식으로 줄일 수도 있다. 

 

예_<% request.getParameter("id")%> : request(lv) 안에 있는 것을 쓰고 싶을 때

     <% pageContext. request. getParameter("id)%>: page저장소에 넣어서 lv를 쓴다

      ${param.id} : EL로 표현하면 이렇게 간단히 표현 가능 

 

EL에서 의문점이 있을 때 검색해서 찾아보기 

 

 

JSTL은 <% ~%> 이런 자바 코드가 어려워 간단히 하려고 나온 것이다. 

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

이런 코드를 넣어주면 c 태그를 쓸 수 있어 접두사  C를 놓고  if, fo문, if else 문 등을 쓸 수 있다. 

예를 들면 <c:set~~~ 이런 식으로 

댓글