싱글톤(1개의 인스턴스만 가짐 ,재활용함 , 요청이 올 때마다 새로운 객체를 만들지 않음)
spring은 객체를 미리 만들어둠
.jsp요청이 들어오면 JspServlet이 받아서 서블릿 인스턴스가 존재하지 않으면 .java 로 변환 후 컴파일 하여 .class로 만들고 인스턴스를 생성함(jspInit()초기화) 후 인스턴스로 만들어져 응답함(_jspService()) 단 수정시에 첫번째 호출로 다시 돌아가서 처음부터 다시 진행됨
JSP의 기본객체 : 생성하지 않고 사용할 수 있는 객체
ex) request, response, session, application, config , out, page 등등
Service() 메서드의 기본변수로 선언되어있기 때문
JSP( java server pages) = 서블릿으로 자동변환됨 / 위치는 src/main/webapp/ .jsp
java code in HTML
ex) 값출력 <%= dfdf%>
service 메서드 안으로 들어감 ( 지역변수)
인스턴스 변수나 메서드는 클래스 안으로 들어감 <%! dfdfdff%>
HTTP 특징- 상태정보를저장하지 않는다 == stateless ≠ stateful
그래서 필요한게 저장소 (map형태) , 범위에 따라서 4개의 저장소 있음
- 접근범위
- 생존기간
저장소
- pageContext
- lv(지역변수) 저장 (+기본객체 : request , response 등) / 범위는 page 안에서만 읽쓰 가능
- EL : ${ } 쓰기 위함
2. application
- 접근범위 : webapp전체에서 접근 가능(servlet Context 전체) , 전체 1개만 존재
- map에서 쓰기 - setAttribute(), 읽기 - getAttribute()
- 프로그램 전체에서 사용하는 데이터 저장
3.session
- 클라이언트마다 하나씩 존재, 세션 객체가 유지되는 동안 페이지 간 접근 가능 (메모리부담 큼 사용 최소화할 것)
- request 객체 사용할 수 있는지 고려해보고 안되면 session 사용
- 페이지마다 접근 가능
4. request
- 요청이 처리되는 동안만 존재, 부담 적음
- forward통해서 데이터를 다른 페이지로 전달 가능 , 제일 먼저 고려해볼 것 그게 안되면 세션 선택해서 저장했다가 가능한 빨리 지워서 메모리 부담 줄이기
URL 패턴 4개
- @WebServlet 으로 서블릿을 URL에 맵핑할 때 사용 == (spring에서는 @Request Mapping)
- 서블릿 : lazy init(늦은 초기화) , loadOnStartup : 미리초기화 (호출 전에 미리 만들어 둠)
- 번호 : 우선순위
- 정확
- 경로 맵핑
- 확장자 맵핑
- 디폴트 맵핑 : 모든 주소와 맵핑
EL (Expression Language) ${}
- <%= 값 %> >> ${값} 이렇게 간단히 쓰려고
- jsp file 지우는 법 https://rayakeem.tistory.com/3
- el에서는 lv(지역변수) 쓸 수 없음 그래서 객체에 저장을 해야함 (setAttribute)
Person person = new Person();
request.setAttribute("person", person);
request.setAttribute("name", "rayakeem");
request.setAttribute("list", new java.util.ArrayList());
person이 lv, request객체에 map형태로 저장해서 body부분에서 사용 가능.
get메서드 사용해서 person.car.color로 사용 가능 (getter : 메서드를 통해 객체의 속성,값 가져옴) (setter: 외부에서 값 설정함)
person.getCar().getColor()=<%=person.getCar().getColor()%> <br>
person.getCar().getColor()=${person.getCar().getColor()} <br>
person.getCar().getColor()=${person.car.color} <br>
request객체에서 메서드 사용 (pageContext 존재의 이유 - lv 사용하기 위함)
id=<%=request.getParameter("id")%> <br>
//el에서는 request lv 사용 불가. 따라서 아래처럼 pageContext써줘야 함
id=${pageContext.request.getParameter("id")} <br>
id=${param.id} <br>
//위 코드에서 id=<%=request.getParameter("id")%>는 request 객체에서 "id"라는 이름의 파라미터 값을
가져와서 출력하는 것입니다. 예를 들어, 위와 같이 http://example.com/mypage.jsp?id=123로 요청을
보낼 경우, 화면에는 id=123이 출력됩니다. id는 요청 URL에서 파라미터 이름이고, 123은 해당 파라미터의 값입니다. 이렇게 JSP 페이지는 request 객체를 통해 클라이언트로부터 전달된 파라미터 값을 가져와서 처리할 수 있습니다.
JSTL - java코드를 JSP에 넣는 것은 가독성을 떨어뜨리고 유지보수를 어렵게 함, 이를 해결하기 위해 JSTL사용, JSTL은 다양한 태그를 제공하여 반복문, 조건문, 데이터 포맷팅 등과 같은 일반적인 로직을 JSP에서 쉽게 처리할 수 있게 해줍니다.
- Core 태그 라이브러리: 반복문과 조건문 등의 기본적인 로직을 처리하는 태그들을 제공합니다.
- Formatting 태그 라이브러리: 날짜, 시간, 숫자 등의 데이터를 포맷팅하는데 사용되는 태그들을 제공합니다.
- XML 태그 라이브러리: XML 데이터를 처리하는데 사용되는 태그들을 제공합니다.
- SQL 태그 라이브러리: 데이터베이스 연동에 사용되는 태그들을 제공합니다.
<title>JSTL</title>
</head>
<body>
<c:set var="to" value="10"/>
// EL에서는 lv 사용불가 ${lv} 안됨, key value 형태로 키와 값 저장
<c:set var="arr" value="10,20,30,40,50,60,70"/>
//c:out 태그 : 파라미터 값에 html태그가 들어오게 되면 스크립트 공격발생할 수 있음.
//html태그라고 해석하지 않고 텍스트로 인식할 수 있도록 c:out 태그 사용하여 공격방어
<c:if test="${param.msg != null}"> //msg=<p>asdf<p>
msg=${param.msg} //msg= asdf
msg=<c:out value="${param.msg}"/> //msg=<p>asdf<p>
</c:if>
-Filter
- 서블릿에서 중복코드 있을 때 filter가 공통적인 요청 전처리와 응답 후처리들을 가져감. (관리 용이)
- 로깅, 인코딩 등 (처리부분을 서블릿이, 뷰 부분을 뷰가 나눠 가지듯이)
- 코드의 분리, AOP랑 비슷
- 필터가 여러개일 수 있음. 필터가 전처리 하다가 필터 호출하면 그 필터가 서블릿 호출 이런식,,,스택방식으로 호출 처리됨
'Server > spring' 카테고리의 다른 글
| 컨트롤러 메서드 반환 (0) | 2023.08.22 |
|---|---|
| HTTP 프로토콜과 GET, POST (0) | 2023.08.22 |