📍 2.1 JSP 개요
JSP(Java Server Page)와 서블릿
- JSP는 HTML 내에 자바 코드를 삽입하여 동적 페이지를 생성하는 스크립트 언어
- 서블릿은 자바를 이용한 동적 페이지를 생성하는 서버 프로그래밍 기술
→ 서블릿 실행을 위해서는 톰캣과 같은 서블릿 컨테이너가 필요함
서블릿 구현 코드
public class HelloWorldServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset= UTF-8");
PrintWrite out = response.getWriter();
out.println("<HTML><HEAD><TITLE>JSP </TITLE></HEAD>");
out.println("<BODY><H2>Hello World : 헬로월드</H2>");
out.println("오늘의 날짜와 시간은 : " + new java.util.Date());
out.println("</BODY></HTML>");
}
}
JSP 구현 코드
<%@ page language="java" contentType="text/html;
charset=UTF-8" pageEncoding="UTF-8"%>
<HTML>
<HEAD>
<TITLE>1부터 100까지의 합</TITLE>
</HEAD>
<BODY>
<%
int total = 0;
for (int cnt = 1; cnt <= 100; cnt++)
total += cnt;
%>
1부터 100까지 더한 값은?
<%=total%>
</BODY>
</HTML>
- HTML 문서 사이에 JSP 문법의 코드(디렉티브, 스크립트릿, 표현식)가 삽입되는 형태로 작성
- 이때 HTML 코드는 웹 브라우저로 그대로 전송되지만, JSP 문법 코드는 실행 후 결과 HTML 코드를 웹 브라우저로 전송
JSP 특징
- JSP 또는 다른 서블릿과 데이터를 쉽게 공유할 수 있다.
- 자바의 모든 기능과 빈즈라는 자바 컴포넌트를 사용할 수 있다.
JSP는 3가지 형태의 태그를 제공
- 스크립트 태그 : 자바 코드를 넣어 프로그램이 수행하는 기능을 구현
- 디렉티브 태그 : JSP 페이지에 대한 정보를 컨테이너에게 제공
- 액션 태그 : XML 형태의 태그로, JSP 페이지 간 제어
📍 2.2 JSP 스크립트 태그
스크립트 태그
스크립트 태그 | 형식 | 설명 |
선언문 (declaration) | <%! ... %> | 자바 변수나 메소드를 정의 |
스크립트릿 (scriptlet) | <% ... %> | 자바 로직 코드를 작성 |
표현식 (expression) | <%= ... %> | 변수, 계산식, 메소드 호출 결과를 문자열 형태로 출력 |
- JSP 페이지를 서블릿 클래스 변환할 때 사용
- 컨테이너(톰캣)는 자바 코드가 삽입되어 있는 스크립트 태그를 처리하고, 나머지는 HTML 코드나 일반 텍스트로 간주
1. 선언문 태그
- 메서드나 전역 변수를 선언하기 위한 구문
- JSP가 서블릿으로 변환된 자바 코드에서는 모든 내용이 _jspService() 메서드에 들어가기 대문에 JSP에서 선언한 변수는 지역 변수가 된다.
- 구조적으로 JSP에서 자바 코드를 사용하는 것은 권장되지 않기 때문에 서언문의 사용을 권장하지 않는다.
2. 스크립트릿 태그
- JSP 문서 내에서 자바 코드를 기술하는 부분 (이 태그 역시 자바 코드를 사용하기 때문에 권장 X)
- 현재는 MVC 패턴에 따라 웹 프로그램을 개발할 경우, JSP에게는 View 역할만 줌
3. 표현식 태그
- 간단한 데이터 출력이나 메서드 호출에 이용
- 표현식보다는 표현언어 사용을 권장
선언문 태그 vs. 스크립트 태그
선언문 태그 | 스크립트 태그 |
변수와 메서드 선언 | 메소드 없이 변수만을 선언 |
서블릿 프로그램으로 변환될 때 _jspService() 메소드 외부에 배치 | 서블릿 프로그램으로 변환될 때 _jspService() 메소드 내부에 배치 |
📍 2.3 JSP 처리 과정의 이해
JSP가 서블릿으로 컴파일되고 실행되는 과정
- JSP가 서블릿 컨테이너(톰캣)에 의해 자바 소스로 변환됨
- 이후 다시 클래스 파일로 컴파일됨
- HelloWorld.jsp → HelloWorld_jsp.java → HelloWorld_jsp.class
HelloWorld_jsp.java의 jspService() 메서드 선언 부분
public void _jspService(HttpServletRequest request, HttpServlet Response response)
throws java.io.IOException, ServletException
- request, response를 파라미터로 받고 있다.
- request와 response는 JSP 내장 객체 중 하나로, 사용자의 요청을 처리하는데 필요한 기본적인 요소이다.
개발자가 작성한 JSP 코드 부분
out.write("<BODY>");
out.write("\r\n현재 날짜와 시간은 : ");
out.write(new java.util.Date());
out.write("\r\n");
out.write("</BODY>\r\n");
out.write("</HTML>");
- JSP 파일에서 개발자가 작성한 코드는 모두 out.write() 형태로 처리된다.
JSP 프로그램 유형
유형 1
- 빈즈 클래스를 사용하지 않고 스크립트릿만을 사용하는 방법
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<%
int num1 = 0, num2 = 0, result = 0;
if (request.getMethod().equals("POST")) {
String op = request.getParameter("operator");
num1 = Integer.parseInt(request.getParameter("num1"));
num2 = Integer.parseInt(request.getParameter("num2"));
if (op.equals("+")) {
result = num1 + num2;
} else if (op.equals("-")) {
result = num1 - num2;
} else if (op.equals("*")) {
result = num1 * num2;
} else if (op.equals("/")) {
result = num1 / num2;
}
}
%>
<html>
<head>
<meta charset="UTF-8">
<title> 계산기 </title>
</head>
<body>
<div align="center">
<H3>계산기 : 스크립트릿 사용 </H3>
<HR>
<form name=form1 action="calculate.jsp" method=post>
<input type="text" NAME="num1" width=200 size="5">
<select NAME="operator">
<option selected>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select>
<INPUT TYPE="text" NAME="num2" width=200 size="5">
<input type="submit" value="계산" name="B1">
<input type="reset" value="다시입력" name="B2">
</form>
<HR>
계산결과 : <%=result %>
</div>
</body>
</html>
유형 2
- 빈즈 클래스와 <jps:useBean> 액션 태그를 사용하는 방법
public class CalcBean {
// 멤버변수
private int num1 = 0, num2 = 0;
private String operator = "";
private int result;
// 계산기능 메서드
public void calculate() {
if (operator.equals("+")) {
result = num1 + num2;
} else if (operator.equals("-")) {
result = num1 - num2;
} else if (operator.equals("*")) {
result = num1 * num2;
} else if (operator.equals("/")) {
result = num1 / num2;
}
}
public void setNum1(int num1) {
this.num1 = num1;
}
public void setNum2(int num2) {
this.num2 = (num2);
}
public void setOperator(String operator) {
this.operator = operator;
}
public void setResult(int result) {
this.result = result;
}
public int getResult() {
return result;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html >
<jsp:useBean id="calc" class="jspbook.ch02.CalcBean"/>
<jsp:setProperty name="calc" property="*"/>
<% calc.calculate(); %>
<html>
<head>
<meta charset="UTF-8">
<title> 계산기</title>
</head>
<body>
<div align=center>
<H3> 계산기 : 빈즈 사용 </H3>
<HR>
<form name=form1 action="calculate2.jsp" method=post>
<INPUT TYPE="text" NAME="num1" width=200 size="5">
<SELECT NAME="operator">
<option selected>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</SELECT>
<INPUT TYPE="text" NAME="num2" width=200 size="5">
<input type="submit" value="계산" name="B1">
<input type="reset" value="다시입력" name="B2">
</form>
<HR>
계산결과 :
<jsp:getProperty name="calc" property="result"/>
</div>
</body>
</html>
'CS > 웹서비스' 카테고리의 다른 글
[웹서비스] JSP 디렉티브 태그와 액션 태그 (0) | 2023.09.30 |
---|---|
[웹서비스] 서블릿 구조 (0) | 2023.09.30 |
[웹서비스] 웹 기술 환경에 대한 이해 (0) | 2023.09.29 |