Loading...

Web / / 2022. 2. 23. 12:43

Web 13강. 서블릿 파일

반응형

 

package site.metacoding.servletproject;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// http://localhost:80/index.jsp (URL)
// http://localhost:80/test (URI 식별자 요청) URI 사용하려면 어노테이션 필요
@WebServlet("/test")
public class TestServlet extends HttpServlet { // 상속

	@Override
	protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

	}

	// /test 요청을 받으면
	// 사용자에게 받은 http body, http header 정보를 HttpServletRequest req에 담고
	// 그 친구한테 응답될 빈 객체 HttpServletResponse resp를 만들어서
	// 주소창에 엔터를 치면 아파치/톰캣이 doGet(req, resp); 담아서 메서드 호출
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("Get요청됨");

		String name = "Jaewon";

		// printWriter에는 \n, flush 까지 내부에 적용되어 있음
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<h1>Hello EveryOne " + name + "</h1>");
		out.println("</body>");
		out.println("</html>");

		// 원형
//		BufferedWriter writer = new BufferedWriter(
//				new OutputStreamWriter(resp.getOutputStream()));
//		writer.write("asdfas\n");
//		writer.flush();
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

	}

	@Override
	protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

	}

}

자바에 html을 섞는 게 편할까,

html에 자바코드를 넣는 게 편할까?

 

후자가 훨씬 편하다!

 

최초에 웹 개발을 할때는 자바에 html 코드를 집어넣었는데

너무 불편해서 나온게 jsp이다.

 

실제로 jsp파일이 컴파일되면

서블릿 파일로 바뀌게 되는 것이다.

 


 

목적 : html 파일은 정적인 페이지니까

동적 페이지 만드는 기술 배우기

 

최초 : 소켓 기반으로 나온 서블릿 기술

-> 요청이 들어오면 버퍼로 응답

 

응답 시에 html 코드를 만들어서 응답하는 게 힘들다.

 

 

중간 : JSP 기술(톰캣이 가지고 있는 jasper 라이브러리)

-> .jsp 파일을 만들면

html 코드 기반에 자바 코드를 섞을 수 있다.

 

이렇게 만들어만 놓으면

내가(톰캣) .jsp 파일을 서블릿 .java 파일로 변경해주겠다.

 

더 이상 서블릿 파일을 직접 만들지 않아도 된다.

 


 

http://localhost:80/index.html

(1) 요청

(2) 아파치 - 내가 응답할게 끝!

 

http://localhost:80/index.jsp

(1) 요청

(2) 아파치 - 내가 할 수 있는 일이 아니네

(3) 톰캣 - 위임 받음

(4) 톰캣 - index.jsp파일 -> index_jsp.java(서블릿 파일)

자바 파일 컴파일되고 실행됨

(5) 버퍼로 응답하고 끝

 


 

a.jsp, b.jsp, c.jsp 파일 3개 모두

DB 연결이 필요한 파일들이다.

 

url로 요청하여 파일을 찾아가는 방식 : 모델 1 방식(최초)

단점 : 공통 코드를 만들지 못함

 

어차피 DB 커넥션은 서버 입장에선 하나만 만들어두고

코드를 공유하면 된다.

 

중간에 공통 코드를 만들어두고 싶다.

 

url 방식은 파일을 다이렉트하게 찾아가기 때문에

코드를 재사용하기 힘들다.

 

만약 3개의 파일이

1. 문자 인코딩

2. 특정 IP 차단

3. 1초에 100번 요청하는 클라이언트 차단

 

이런 공통적인 로직을 처리를 해야 할 때

 

파일을 찾아가기 전 중간에 하나

거쳐가는 정거장을 두고,

정거장을 타고 파일로 접근하면

코드 공유가 가능하다.

 

이를 Front Controller라고 한다.

 

이 컨트롤러에서 공통적인 처리를 한 다음,

파일을 read 하여 버퍼에 담아준다.

 

파일마다 1번, 2번, 3번 로직을

다 적어야 하는 것을 막아준다.

 

이렇게 다 적으면 유지보수가 어려워지고

디자이너와 협업하기가 힘들어진다.

 

컨트롤러를 사용하면

자바 처리를 모두 컨트롤러로 하고,

파일은 순수하게 view의 용도로 사용할 수 있다.

 

 

 

[출처]

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com


메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형