서블릿으로 화면 구현 시 문제점
기존 서블릿에는 자바 코드를 기반으로 문자열을 사용해 html와 자바스크립트로 화면을 구현했다.
JSP는 이와 반대로 html, css, 자바스트립트를 기반으로 JSP 요소들을 사용해 화면을 구현한다.
서블릿 자바+화면구현디자인 분리가 안되어있음 유지보수에 합리적이지 않다.
JSP => view 부분을 JSP단으로 분리
처리하는 기능, 화면디자인 분리했다.
자바빈(클래스의 또 다른 용어)
JSP는 view단을 위해 존재하고 Servlet은 Controller역할(클라이언트에서 받았을때 필터링)을 한다.
JSP의 3단계 작업과정
클라이언트가 웹브라우저로 JSP를 호출하면 JSP-> .java로 변경됨 => 컴파일자동(class) => 브라우저에 응답 (반복
JSP의 내장객체
new를 해주지않아도 사용가능한 객체
기본 작성 경로 예제
<%-- <%@부분은 페이지 지시자이다. 페이지 속성이나 improt할때 자주 사용함. --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>안녕하세요. JSP파일입니다.</h1>
<h1>정답은 HTML코드로 합니다.</h1>
</body>
</html>
<!-- 실제 hello_jsp.java, hello_jsp.class파일을 확인하는 경로
C:\workspace-jsp\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\Chap05_JSP-01\org\apache\jsp -->
경로 java, class 파일위치
C:\workspace-jsp\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\Chap05_JSP-01\org\apache\jsp
스크립트릿 사용 예제
<%JAVA%> 예제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>스크립트릿</title>
</head>
<body>
<%
int i = 0;
while(true){
i++;
//out 내부객체
out.println("2 * " +i+ " = " +2*i+ "<br/>");
%>
======================================<br/>
<%
if(i >= 9)
break;
}
%>
</body>
</html>
<%= %> 표현식 예제
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
%>
<!-- 표현식으로 출력 -->
<h1>현재시간 : <%=hour%>시 <%=minute%>분 <%=second%>초입니다.</h1>
</body>
</html>
스크립트릿 중간에 html 넣기 예제
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
%>
<!-- 표현식으로 출력 -->
<h1>현재시간 : <%=hour%>시 <%=minute%>분 <%=second%>초입니다.</h1>
<%
if(hour >= 12) {
%>
<h2>오후입니다.</h2>
<%
}else {
%>
<h2>오전입니다.</h2>
<%
}
%>
</body>
</html>
<%! %> 선언문
전역으로 선언됨
표현식에는 ;을 붙이지 않음
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>선언문, 표현식</title>
</head>
<body>
<%!
int i = 10;
String str = "이순신";
public int add(int x, int y){
return x+y;
}
%>
<!-- 표현식에는 ;을 붙이지 않음 -->
<%=i %><br/>
<%=str %><br/>
<%=add(100,2) %>
</body>
</html>
스크립트릿 스코프 예제
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>선언문, 표현식</title>
</head>
<body>
<%-- 선언부는 전역스코프 --%>
<%!
public int sum() {
int total = 0;
for(int i=0; i<=100; i++){
total += i;
}
return total;
}
%>
<%
String str = "1부터 100까지의 합";
%>
<h2><%= str %>은 <b><%=sum() %>입니다.</b></h2>
<!-- 1부터 100까지의 합에 3을 곱하면 15150입니다. -->
<h2><%= str %>에 3을 곱하면 <b><%=sum() * 3 %>입니다.</b></h2>
<!-- 1부터 100까지의 합에 1000을 나누면 5.05가 됩니다. -->
<h2><%= str %>에 1000을 나누면 <b><%=sum() / 1000.0 %>가 됩니다.</b></h2>
</body>
</html>
스크립트릿 예제
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>선언문, 표현식</title>
</head>
<body>
<%!
int i = 10;
String str = new String("abcde");
public int add(int x, int y){
return x+y;
}
%>
id값 : <% out.println(i + "<br/>"); %>
str값 : <% out.println(str + "<br/>"); %>
add(100, 500)값 : <% out.println(add(100, 500)); %>
</body>
</html>