기본 개념
JSP는, 결국 서블릿으로 바뀐다!!!!고 생각하면 된다.
(톰캣이 JSP를 서블릿으로 바꾼다)
HTML과 비슷하다고 해서 HTML처럼 동작하는게 아니다. 서블릿과 동작 방식이 같다!
따라서, JSP 파일을 작성할 때 종종 하면 좋은 생각은, "이 코드가 서블릿으로 바뀐 상태는 무엇일까?"
를 생각해보면 코드 이해가 빨라진다.
기본 예제 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>sum10</title>
</head>
<body>
<%
int total = 0;
for(int i = 1; i <= 10; i++){
total = total + i;
}
%>
1부터 10까지의 합 : <%=total %>
</body>
</html>
식
1. 선언식 : <%! %>
- JSP 페이지 내에서 필요한 멤버변수나 메서드가 필요할 때 선언
- 서블릿으로 바뀌었을 때, service() 메서드로 들어가는 식이 아니라, 그 바깥 부분의 코드를 작성하고 싶을 때
2. 스크립트릿 : <% %>
- 일반적으로 가장 많이 사용되는 부분
- 프로그래밍 코드를 적는 부분
- 여기에 선언된 변수는, 지역변수
- 즉, 화면에 출력할 내용(=응답 결과에 포함할 부분을 넣을 때 사용하는 부분)
- 서블릿으로 바뀌면, service() 메서드로 바뀌는 부분
3. 표현식 : <%= %>
- 화면에 출력하고 싶은 변수(=응답 결과)를 넣는 곳이라고 생각하면 된다
- 서블릿으로 바뀌면, out.println()이 된다고 생각하면 된다.
4. 주석
- html, 자바, jsp 주석 전부 사용 가능
JSP의 실행순서
JSP 코드에 맞는 서블릿 객체가 있다면 -> 서블릿 라이프사이클 따라간다
JSP 코드에 맞는 서블릿 객체가 없다면 -> JSP엔진이 서블릿으로 바꾼 후 -> 서블릿 라이프사이클 따라간다
JSP 내장객체
- JSP를 실행하면 서블릿 소스가 생성되고 실행된다.
- JSP에 입력한 대부분의 코드는 생성되는 서블릿 소스의 _jspService() 메소드 안에 삽입되는 코드로 생성된다.
- _jspService()에 삽입된 코드의 윗부분에 미리 선언된 객체들이 있는데, 해당 객체들은 jsp에서도 사용 가능하다.
- response, request, application, session, out과 같은 변수를 내장객체라고 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
StringBuffer url = request.getRequestURL();
out.println("url : " + url.toString());
out.println("<br>");
%>
</body>
</html>
- 내장 객체를 활용하여, request나, out이라는 변수를 선언하지 않았는데도 바로 사용한 것을 볼 수 있다.
'Java' 카테고리의 다른 글
[Java] import static (0) | 2022.09.24 |
---|---|
자바 웹 애플리케이션이란? (스프링, 스프링부트 아님) (0) | 2022.09.16 |
HttpServletRequest 객체, HttpServletResponse 객체 (0) | 2022.09.16 |
[java] java 코딩 컨벤션, 적절한 코딩 스타일 (0) | 2022.09.07 |
[Java] try-with-resource (0) | 2022.09.06 |