GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the JSP

[JSP] Servlet => JSP 차이

Backcoder 2022. 8. 9. 20:53

[[ JSP ]]
: Java Server Pages ( = Jakarta Server Pages )

웹 개발 발전 단계 : Servlet => JSP => MVC

< 서블릿 한계 >
- 웹 프론트단이 복잡해지면서 자바에서 PrintWriter 가지고 " " 따옴표 써가며 구현하기가 빡세다.
- 서블릿에 자바 비지니스로직과 뷰단코딩이 같이 섞여 있다보니, 가독성도 떨어지고
개발 후 유지 관리 불편함
=> [ Java 클래스 내부에 HTML 이 " " 따옴표로 포함된 형태 ]

=> 역발상

=> [ HTML 내부에 Java 클래스<% %> 로 포함시키자 ] : JSP

< JSP >


1. 기본적으로 HTML 파일 처럼 사용
- WebApp 폴더에 저장 ( .jsp 파일 ) < = > 서블릿 : Java 폴더

- HTML / CSS / JS 다 그냥 원래 HTML 사용하 듯 사용
<html> </html>
<style> <style>
<script> </script>

- Java 비지니스 로직 문장 이 들어가야 할 때,
=> <% 자바문장 %> 안에서 사용하는 것!

- 비지니스로직과 뷰단 분리
( 섞여있는건 똑같은데 <% %> 이걸로 구분이 되니깐 )
- 비지니스JSP/ 뷰단JSP 따로 개발하고 RequestDispatcher 로 합쳐서 사용




2. Request / Response
- 근데, HTTP 로 클라이언트단에서 요청 읽어오고, 응답하려면

@WebServlet("/bank")
public class BankServlet extends HttpServlet {

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


HttpServlet 상속해서 doGet/Post 로 사용하던 request, response 객체 필요한데, 이거 없이 어떻게 HTTP 통신해?

Tomcat ( JSP Container ) 형님 :
" 마, 그건 이따가 내가 알아서 해줄게.
JSP에서는 그냥 바로 편하게 request / response 로 사용해라! "

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>loginprocess</title>
</head>
<body>

<%
String id = request.getParameter("id");
String pw = request.getParameter("pw");
%>

- 정말 바로 사용할 수 있다. 왜?

 

[내장객체]
Servlet에서 필수적으로 사용하던 객체들을 몇 개 골라서 

( request / response / out / session / application / exception . . . ) 

JSP에 [ 내장객체 ] 로 미리 넣어뒀기 때문이다. 

JSP 에서는 이 내장객체로 일단 편하게 사용할 수 있고, 

나중에 JSP 파일 실행하면


=> Tomcat (JSP container) 형님이
1) JSP 파일(내부 모든내용) => 자바 Servlet 클래스 코드변환해준다.
=> .java
( 이때, JSP 에서 내장객체로 편하게 사용했던 것 들을

자동으로 정식 Servlet 코드로 변환해주는 것 )

2) 컴파일 해준다.
=> .class

3) 이 실행결과, 즉 Servlet으로 HTTP 통신해서 브라우저로 응답되는 방식
( JSP 는 편하게 작성하게 만들어주는 일종의 도구 )

 

 

3. URL Mapping
- 서블릿 처럼 @WebServlet( "url ") URL 맵핑이 아니라,
파일 자체로 올리는 방식이다.

http://localhost:8090/webServlet_war/LoginService.jsp
: ip 포트 / 컨텍스트명 / jsp파일명


- 마치, static 정적인 파일들만 파일명으로 받는 식인데,
=> 대신, 로직이 들어간 자바 코드를 이용해서
조건에 따라 동적으로 맵핑된다.