싱글톤(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개의 저장소 있음

  1. 접근범위
  2. 생존기간

저장소

  1. 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 : 미리초기화 (호출 전에 미리 만들어 둠)
  • 번호 : 우선순위
  1. 정확
  2. 경로 맵핑
  3. 확장자 맵핑
  4. 디폴트 맵핑 : 모든 주소와 맵핑

 

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에서 쉽게 처리할 수 있게 해줍니다.

  1. Core 태그 라이브러리: 반복문과 조건문 등의 기본적인 로직을 처리하는 태그들을 제공합니다.
  2. Formatting 태그 라이브러리: 날짜, 시간, 숫자 등의 데이터를 포맷팅하는데 사용되는 태그들을 제공합니다.
  3. XML 태그 라이브러리: XML 데이터를 처리하는데 사용되는 태그들을 제공합니다.
  4. 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

매개변수이름 얻어오는 법

  1. reflection API : -parametars옵션 사용(자바 버전 8이상이어야)
  2. classs file 사용(구) (1번 실패하면 이거 사용)

반환타입

  1. void 타입일 때 : getMapping의 주소의 jsp로 view를 해석함
  2. return “view” 있을 때 : 해당 jsp의 뷰로 해석함 ((가장 많이 사용))
  3. 반환타입이 ModelAndView 일 때 : 매개변수로 model을 주지 않고 메서드 안에서 ModelAndView mv = new ModelAndView(); 이처럼 변수 생성 후 모델에 저장 : mv.addObject(”month”,month); 결과를 보여줄 view를 지정하기 : mv.setViewName(”yoil”); return mv;
@Controller
public class YoilTellerMVC {
	@RequestMapping("/getYoilMVC") //http://localhost/ch2/getYoilMVC?year=2023&month=7&day=19
	public ModelAndView main(int year, int month, int day) throws IOException {

		ModelAndView mv = new ModelAndView();

		//1 유효성 검사 
		if(!isValid(year, month, day))
			return "yoilError";
		
		
		//2. 작업
		char yoil = getYoil(year, month, day);
		
		
		//3.계산한 결과를 모델에 저장 > view반환 
		mv.addObject("year", year);
		mv.addObject("month", month);
		mv.addObject("day", day);
		mv.addObject("yoil", yoil);

		//view 지정
		mv.setViewName("yoil");
		//model도 함께 반환
		return "mv";
	}

'Server > spring' 카테고리의 다른 글

서블릿과 jsp  (0) 2023.08.22
HTTP 프로토콜과 GET, POST  (0) 2023.08.22
  • 프로토콜 : 서로 간의 통신을 위한 약속, 규칙 = 주고받을 데이터에 대한 형식을 지정한 것

HTTP ( hyper text transfer protocol) - 텍스트 기반의 프로토콜 (상태 유지 ㄴㄴ 클라이언트 정보 저장 ㄴㄴ > 쿠키나 세션 이용해서 정보 저장)

status code : 200번대 성공, 300번대 재요청, 400번대 클라이언트 오류, 500번대 서버오류 , 100번대 정보교환

  • 요청메시지 방식 : GET, POST

GET : 바디 없음, 서버한테 리소스 가져오기 위함(read) data는 queryString으로 보냄(URL) 링크공유 등

POST : 서버에 전송할 data를 바디에 담아 전송(write) 게시판 글쓰기, 로그인, 회원가입, 파일첨부 등 (form tag사용)

암호화 시키려면 https이용

  • 바이너리 > 텍스트로 바꾸어서 파일 전송 : 64진법 Base64 (2의6승 6비트) (단점 용량커짐) / cf. ASCII 128진법 (0부터127까지 8비트) , mime 사용 (type, subtType)
  • html에서 외부 파일을 로드하지 않고 data URL scheme을 사용하여 이미지 로드ex) data:image/jpeg;base64,/9j/4AAQSkZJRgABAQE …
  • data URL scheme:mime;인코딩유무/
  • data:[<mediatype>][;base64],<data> : base64생략 가능

'Server > spring' 카테고리의 다른 글

서블릿과 jsp  (0) 2023.08.22
컨트롤러 메서드 반환  (0) 2023.08.22

+ Recent posts