[Web] JSP

soyeon·2022년 7월 26일
0
post-thumbnail

Servlet이 가지는 가장 큰 단점 😥
: response에 포함된 결과 HTML을 Java program 내에서 기술한다.
=> 이를 해결하기 위해 JSP 등장😊

JSP는 HTML과 유사하게 생겼다. 확장자는 .jsp를 사용한다.

JSP의 mechanism

  1. client가 .jsp를 request로 호출한다.

  2. web server가 먼저 request를 받는다. jsp 파일을 요청하고 있기 때문에 request를 servlet container로 forwarding 시킨다.

  3. 첫번째 호출인 경우, hello.jsp 파일을 java 파일(servlet 파일)로 바꾼다.
    결국 jsp도 servlet인 것이다.

  4. compile 하면 hello_jsp.class 파일이 만들어지고, 이를 통해 servlet instance를 만들 수 있게 된다. 이 instance에는 doGet, doPost가 없다.

  5. Thread가 _jspService()를 호출한다. get 방식, post 방식을 구분하지 않는다.

JSP = Servlet

JSP를 Servlet으로 translation 해서 사용 하는 것이 성능이 더 좋다!
구현도 쉽고, 성능도 좋다.

JSP는 어떻게 만드나요?

  1. 주석
    : <%-- 주석 --%>

  2. directive
    : <%@ 지시어 %>

  3. declaration
    : <%! 변수,method %>
    servlet class이 field와 method로 들어간다.

  4. scriptlet
    : <% 일반 Java 코드 %>
    _jspService() method로 들어간다.

  5. expression
    : <%= 식 %>
    out.println()의 인자로 들어간다.

간단한 연습 코드

  • index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	이름을 입력하세요<br><br>
	<form action="http://localhost:8080/html/hello.jsp" method="POST">
		이름 : <input type="text" name="userName"><br>
		<input type="submit" value="서버로 전송">
	</form>
</body>
</html>
  • hello.jsp
<%@ page language="java" 
		 contentType="text/html; charset=UTF-8"
    	 pageEncoding="UTF-8"
    	 import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8");
	String name = request.getParameter("userName");
%>
	이것은 소리없는 아우성!!!<br><br>
	받은 데이터는 : <%= name %>
</body>
</html>

<실행 결과>

JSP의 내장 객체

: JSP 코드 내에서 그냥 사용할 수 있는 객체

  1. request -> HTTPServletRequest class type의 객체

  2. response -> HTTPSevletResponse class type의 객체

  3. out -> PrintWrtier 객체

  4. session -> HTTPSession class 객체
    : web client당 1개씩 할당된다. client의 작업을 지속적으로 tracking 한다.

  5. application -> ServletContext 객체
    : 모든 Servlet에 의해 공유되는 객체

  6. page -> this

Servlet이 가지는 또 다른 단점 😥
: Layered Architecture를 따르지 않는다.
=> 이를 해결하기 위해 MVC 등장😊

Layered Architecture를 적용해야 해서 JSP의 역할이 줄어들었다.
이후로 프론트엔드 백엔드로 나뉘면서 더욱 사용이 줄어들고 있다.

🙄 Layered Architecture

  • Presentation Layer
  • Business Logic Layer
  • Persistence Layer
  • Database Layer

0개의 댓글