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
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9