Servlet
표준을 기반으로 작성된 웹 어플리케이션 개발 언어HTML
내에 Java
를 작성하여 동적으로 웹페이지를 생성하여 브라우저에게 돌려주는 페이지Servlet
으로 변환된 후 실행🖥 HelloJSP.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello JSP?</title>
</head>
<body>
<%
String name = "BZeromo";
%>
<h2>Hello JSP!</h2>
<h4>안녕하세요. <%=name %>입니다.</h4>
</body>
</html>
🔷 JSP 동작
🔷 JSP 구성요소
EL
)종류 | 사용용도 | 형식 |
---|---|---|
스크립트릿(Scriptlet) | 자바코드 작성 | <% %> |
선언(declaration) | 변수와 메소드를 선언 | <%! %> |
표현식(expression) | 계산식이나 함수를 호출한 결과를 문자열 형태로 출력 | <%= %> |
주석(comment) | JSP 페이지 설명 작성 | <%-- --%> |
지시자(directive) | JSP 페이지 속성 지정 | <%@ %> |
🔷 스크립트릿(Scriptlet)
<%
int A = 10;
int B = 20;
int sum = A + B;
out.print(A+"+"+B+"="+sum);
%>
🔷 선언부(Declaration)
<%!
int A = 10;
int B = 20;
String name = "BZeromo";
public int add (int A, int B) {
return A + B;
}
public int abs(int A) {
return A > 0 ? A : -A;
}
%>
<%out.println(add(A,B));%><br>
<%out.println(abs(B));%><br>
🤷♂️ 왜 메서드와 변수를 따로 선언부에서 선언함?
💡 스크립트릿에서 선언한 변수는 지역 변수이기 때문에 요청이 올 때마다 초기화되지만 선언부에서 선언한 변수와 메서드는 처음 응답 시 생성되는 인스턴스 내에 포함되기 때문에 서블릿이 죽기 전에는 초기화되지 않는다. 페이지 재 요청시 변수나 메서드의 변화를 원하지 않는다면 반드시 선언부에서 선언해야한다.
🔷 표현식(Expression)
<%=name %>
<%=A+B %>
<%=add(A,B) %>
💡 out.print()와 동일하다.
🔷 주석문(Comment)
<%-- JSP로 주석을 달면 클라이언트에게 노출되지 않아용 --%>
<%
// 이렇게 해도 클라이언트에게 노출되지 않아용
// 위의 방법은 서블릿으로 변환되어도 넘어가지 않지만 이 방법은 자바 주석으로 넘어가용
%>
🔷 지시자(Directive)
🔷 지시자(Directive)-page
JSP 페이지 실행 매개변수를 제어
출력처리, 오류처리 등의 내용을 포함
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 오류가 나면 지정한 페이지로 이동 시키기 --%>
<%@ page errorPage="error.jsp" %>
<%-- 오류가 나면 지정한 메시지 띄우기 --%>
<%@ page isErrorPage="true" %>
<%= exception.getMessage()%>
🔷 지시자(Directive)-include
<%@ include file="/template/header.jsp"%>
<%@ include file="/template/section.jsp"%>
<%@ include file="/template/footer.jsp"%>
🔷 지시자(Directive)-taglib
😭 이건... 나중에 공부해보자...
🔷 JSP에서는 서버 정보 및 요청, 응답에 대한 데이터를 조회, 조작하기 위한 객체를 제공하고 있다.
🔷 JSP 기본 객체 영역(Scope)
Page(PageContext)
<Request(request)
<session(session)
<application(application)
Page(PageContext)
: 하나의 페이지 정보를 담고 있는 영역, 페이지가 바뀌면 새로운 객체가 생성됨
Request(request)
: 하나의 요청을 처리할 때 사용되는 영역, 응답이 완료되면 사라진다.
session(session)
: 하나의 웹 브라우저와 관련된 영역, 로그인 정보 등을 저장한다.
application(application)
: 웹 어플리케이션 영역, 어플리케이션이 시작되면 종료될 때 까지 유지된다.
🔷 JSP 기본 객체 영역 메서드
🔷 요청을 받아서 화면을 변경하는 방법
RequestDispatcher dispatcher = request.getRequestDispatcher("이동할 페이지");
dispatcher.forward(request, response);
resonse.sendRedirect("location");
❗ location 앞에
/
를 다는 순간 context root가 사라진다. 그래서 슬래시를 달기 위해서는response.getContextPath()+"/location"
로 바꿔줘야한다.
❗ 리다이렉트 방식은 새로운 브라우저의 요청을 받아 처리하기 때문에 이전 브라우저의 요청에서 받았던 매개변수 등은 모두 사라진다.