반응형
12-24 00:25
Today
Total
«   2024/12   »
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 31
관리 메뉴

개발하는 고라니

[JSP] JSP 본문

Web/JSP-Servlet

[JSP] JSP

조용한고라니 2021. 4. 14. 10:10
반응형

< 용어 정리 >

언어 : 절차, 프로그램을 작성하는 명령어 집합

플랫폼 : (한정적으로) 언어로 작성한 절차가 동작되는 환경, 기반

API : 프로그램과 플랫폼을 연결해주는 인터페이스

 

Web Server : 클라이언트의 요청을 받아 정적인 문서를 반환해주는 역할

WAS : 웹 어플리케이션을 실행해주는 역할, JSP는 문서가 아닌 실행이 필요한데, 이를 실행해준다.

 

Servlet : 페이지 기반의 서버 페이지를 만드는 플랫폼

JSP (Java Server Page)

HttpServlet을 상속받으면 service라는 메서드를 Override 할 수 있는데, 이는 GET/POST 구분 없이 실행되는 메서드이다. 이때 GET과 POST를 구분하는 방법은 service의 인자로 받는 request의 메서드 중 getMethod()를 이용한다.

request.getMethod()의 반환 값은 "GET", "POST", "PUT", "DELETE"가 될 수 있겠다.

 

따라서 service 메서드 내에서 POST요청일 때 다루고 싶은 내용은

if(request.getMethod().equals("POST")){

}

내부에 넣으면 된다.

 

사실 doGet() 메서드나 doPost()메서드를 재정의하면 되긴 한다.

Servlet의 Life Cycle

init() : HttpServlet의 초기화 메서드

service() : Servlet 객체는 1개만 생성되고, 10명이 요청을 해도 하나의 service()가 개별적인 스레드로 실행이 된다. 1:N 형태

destroy() : 마무리할 때의 코드

POST에서 보낸 데이터 유지

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
		
		String x = request.getParameter("x");
		String y = request.getParameter("y");
		  
		int xVal = 0;
		int yVal = 0;
        
		int result = 0;
		
		if(y != null && !y.equals(""))
			yVal = Integer.parseInt(y);
		  
		if(x != null && !x.equals(""))
			xVal = Integer.parseInt(x);
		  
		result = xVal + yVal;
		
		response.sendRedirect("/add");
	}

Servlet 코드에서 어떤 url을 GET 요청을 하고 싶다면 response의 sendRedirect를 사용한다. 하지만 이렇게만 하면 doPost에서 처리한 결과 result는 유지하지 못한다. 어떻게 해야할까?

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
		System.out.println("POST");
		
		String x = request.getParameter("x");
		String y = request.getParameter("y");
		  
		int xVal = 0;
		int yVal = 0;
		int result = 0;
		
		if(y != null && !y.equals(""))
			yVal = Integer.parseInt(y);
		  
		if(x != null && !x.equals(""))
			xVal = Integer.parseInt(x);
		  
		result = xVal + yVal;
		
//		get요청하며 get을 처리하는 로직에게 내가 만든 값 또는 상태를 전달할 수 있는 방법이 필요하다.
//		1) 파일을 이용하는 방법
//		2) 서블릿의 저장소(Application / Session / Cookies / ..)를 이용하는 방법
//		3) QueryString을 이용하는 방법
		
//		지금 예제에서는 3번을 이용
		
		response.sendRedirect("/add?result=" + result);
	}

JSP의 내장 객체

pageContext / session / application / request - 저장소

pageContext : 현재 페이지가 살아있는 동안

request : 두 서블릿 간의 저장소 (A가 B를 포워딩?리다이렉트? 할 때)

session : 사용자 별 저장할 수 있는 공간 (기본 시간 30분)

application : 전역, 모든 사용자, 모든 서블릿이 공유

 

out / page 

out : 문자열 출력 도구

page : 현재 서블릿 객체

 

Jasper

html을 servlet/jsp로 만들어주는 도구

기존에 우리는 java 파일에서 request로부터 Writer를 얻어 write()라는 메서드를 통해 브라우저로 출력을 했다.

		  PrintWriter out = response.getWriter();
		  
		  out.write("<!DOCTYPE html>");
		  out.write("<html>");
		  out.write("<head>");
		  out.write("<meta charset=\"UTF-8\">");
		  out.write("<title>Insert title here</title>");
		  out.write("</head>");
		  out.write("<body>");

위와 같이 입력하지 않아도 된다.

 

다음은 .jsp파일을 요청하면 나타나는 흐름이다.

calc.jsp 요청
-> Tomcat(Web Server) : .jsp 파일은 Jasper로 Servlet을 만들어줄게 (서블릿 파일을 요청했다면 jasper를 사용하지 않음)
-> Jasper : jsp를 읽어 Servlet 클래스를 생성하고 service() 출력 코드 구현
-> Compile
-> Load
-> service() 호출

장점 : jsp를 수정 시 서버를 재시작 하지않아도 반영됨 (유지보수가 편함)

단점 : jsp를 요청 -> jasper가 컴파일 -> 로드 -> 실행 (시간이 조금 걸림)

Tomcat의 이해

이클립스는 톰캣의 origin 폴더에 jsp 파일을 두지 않는다. 그럼 어떻게 이를 컴파일해서 서블릿으로 만들어줄까? 이를 배포하는 폴더가 server path(작업 디렉토리)이다. 실제로 Server path를 찾아가보면, 톰캣의 폴더 구조와 유사함을 알 수 있다. Server path는 톰캣 디렉토리의 복사본이라 이곳은 마음대로 수정되어도 괜찮다.

JSP 코드 블럭

<% %> : 스크립트릿 코드 블럭
<%= %> :  표현식 코드 블럭 == (out.print(출력할 것))
<%! %> : 메서드 선언 코드 블럭
<%@ %> : 지시, 메타 데이터 코드 블럭

 

 

반응형

'Web > JSP-Servlet' 카테고리의 다른 글

[JSP/Servlet] 파일 업로드 및 저장  (3) 2021.05.26
[JSP] Ajax로 JSON 전송  (0) 2021.05.06
[JSP] JDBC  (0) 2021.04.21
Comments