본문 바로가기
dev/Servlet

[Servlet] Servlet 특징2

by dev_Step 2022. 5. 27.

URL 패턴 

Servlet은 Lazy init()으로 : 늦은 초기화

loadOnStartup=1 --> 미리 초기화 하는것으로 숫자는 우선순위를 써주면된다.

 

@WebServlet으로

우선순위 종류 URL MAPPING 매칭 URL
1 exact mapping /login/hello.do ~/login/hello.do
2 path mapping /login/* (/뒤로 뭐가와도됨) ~/login/
~/login/hello
~/login/hello.do
3 extension mapping *.do (.do로 끝나는것만) ~/hi.do
~/hello.do
4 default mapping / (모든 주소와 맵핑) ~/
~/hello.do
~/login/
~/login/hello

@WebServlet ==> Spring 에서는 @RequestMapping 과 사용하는 URL 패턴들이 있다.

 

Servlet Context에서 

children(서블릿)이 저장된 맵과

Key(String, 서블릿이름) Value
com.start.ch2.HelloServlet 0X100
jsp 0X200
default 0X300
do 0X400

servletMappings으로 되어 있는 맵이 있다

Key Value
/hello com.start.ch2.HelloServlet
*.jsp jsp
/ default

 

요청이 오면 일단 ServeltMappings를 확인하여 서블릿이 맵핑되어있는게 있는지 확인한다. 

맵핑이 되어있으면 해당 요청과 동일한 Key의 Value으로가서 해당 Servlet에서  내용을 처리하도록 요청한다.

default의 경우는 주로 정적리소스를 처리한다 (img, css, txt 등)

 

Spring으로 개발할 때에는 모든 요청을 / (default)으로 하면 DispatcherServlet이 Key Value값으로 주소를 가지고 있어서 요청된 내용과 동일한 Controller에서 요청을 처리하도록 요청한다.

 

 

Spring의 설정에 들어가보면

web.xml이 2개가 있는데  서버의 web.xml // 프로젝트마다 web.xml 이는 서버의 web.xml과 겹치는 부분은 프로젝트의 web.xml 설정이 덮어씌우게 된다

Server의 web.xml에 가보면 defaultServlet이  / 으로 맵핑되어 있는데 

프로젝트의 web.xml을 보면 DispatcherServlet이  / 으로 모든 요청의 처리를 맏게 되어있다.

 

 

============================================================================================

JSP

 : <%= 값 %>  

 

============================================================================================

EL (Expression Language)  

 ${값} 

 

: EL은 lv 를 사용하지 못하기 때문에 PAGE에 저장해야 한다 --> pageContext에 

그래서 <c:set var="to" value="10"> 이렇게 저장하거나 requset.setParameter("to",10); 이런식으로 저장한 후에 

${}을 사용하여 쓸수있다.

 

현재 el.jsp에서 보면

${param.name}

${pageContext.request.getParameter("name")}

의경우는 사용자의 요청에 의해서 들어온 데이터가 찍혔고,

${name}

${requestScope.name}

<%=request.getAttribute("name")%>

에서는 <%%> 에서 requset에 넣어준 데이터가 출력이 되었다

 

이는 requset 객체에서

getParameter() 와 getAttribute() 가 서로 리턴값이 다르기 때문이다.

getParameter()의 경우는 웹브라우저에서 전송받은 requset 값을 리턴 하는 반면에

getAttribute()의 경우는 setAttribute()를통해서 설정한 값에 맞는 value 값을 리턴하기 떄문에 설정되어 있지 않으면 NULL이 리턴된다.

Parameter는 사용자의 요청에 의한값 , Attribute는 사용자가 지정한 Key에 대한 Value값

확실하게 찍어보니 알수 있었고, JSP 페이지에서 JAVA의 다른 클래스를 사용하려면

<%@ page import="java.util.*" %>  이런식으로 임포트 해줘야 한다.

소요시간은

필터가 걸려있어서 나왔다.

 

============================================================================================

JSTL(JSP Standard Tag Library)

접두사 "c" 형식화 "fmt" 

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

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

태그들이 저장되어 있다

<c:set> <c:if>  

 

사용하는 이유는 이것을 사용하지 않고 JSP를 이용하여 나타낸다면

<% if(msg !=null) { %>

          msg = ${param.msg}

<% }else{ %>

         메시지가 없습니다.

<% } % 이렇게 나타내야 한다. 

그렇기 때문에 태그라이브러리를 사용함으로써 간결하게 사용할수있다.

 

============================================================================================

즉 JSP에서 <%= 값 %> 을 없애기 위해서 사용하는게 EL ${ } 이고 

<% %> 을 없애기 위해 사용하는게 JSTL 이다 <c:set> <c:if> <c:forEach> 등등

 

============================================================================================

Filter

공통적인 요청 전처리와 응답후 처리에 사용. 로깅, 인코딩 등 

 

Filter

1. 전처리                               1번 서블릿 : 2.처리

2. 서블릿호출 ------>              2번 서블릿 : 2.처리

3. 후처리                               3번  서블릿 : 2.처리

 

Filter2개일경우

Filter1                               Filter2

1. 전처리                         1. 전처리

2. Filter2 호출                  2. 서블릿 호출 ---------->       서블릿 2. 처리 ==> 처리 후 Filter2 후처리 ===> Filter1 후처리 응답

3. 후처리                          3. 후처리

 

 

=> Spring의 AOP와 비슷하다.

el.jsp 호출시에 ==> 자동으로 필터가 거쳐가는것을 확인 할 수 있다.

 

'dev > Servlet' 카테고리의 다른 글

[Servlet] Servlet 특징  (0) 2022.05.27
[Servlet] Servlet, ServletContainer  (0) 2022.01.18