JSP
■ JSP : Java Server Pages의 약자.
□ Java를 기반으로 하는 서버 측 동적 웹페이지. HTML에 JAVA를 넣어 동적 웹페이지를 작성한다.
클라이언트의 요청에 따라 서버가 응답결과를 HTML 문서로 만들어 브라우저로 보여주는 것.
Spring 등의 프레임워크와 결합하여 개발 가능하다.
JSP가 실행되면 자바 서블릿(Servlet)으로 변환되고, 웹 어플리케이션 서버에서 동작하면서 필요한 기능을 수행한다.
참고로, JSP는 서블릿으로 변환 후 사용자에게 HTML 형태의 코드만 전송하고 태그의 내용이 사용자에게 보이지 않는다.
□ JSP 와 서블릿 : JSP는 HTML 안에 JAVA가, 서블릿은 JAVA 안에 HTML이. JSP가 편하다.
JSP가 서블릿의 단점을 보완한 것. 기본을 HTML으로 하고 필요한 부분만 JAVA 코드를 넣는다.
(찾아보니 JSP와 MVC 패턴을 같이 쓰면 좋다는데 이거는 곧 배울 것 같다.. )
(서블릿은 C에 적합하다?? 로직이 들어가니까..)
[JSP 구조]
<%@ 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>
</body>
</html>
JSP 파일을 처음 생성하면 이러한 구조로 만들어진다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
■ page ~ : "지시어"를 뜻한다.
===> 즉, JSP는 HTML 상단에 페이지 "지시어"가 추가된 형태를 의미한다.
====> JSP에서는 HTML, JAVA 언어를 동시에 사용할 수 있다.

□ JSP는 프론트에 해당하기 때문에 webapp 패키지에 생성한다.
[주석 구별]
<!-- HTML 주석 -->
<%-- JSP 주석 --%>
□ 주석을 숨겨야 할 때는 보이는 HTML 주석 대신 보이지 않는 JSP 주석을 사용하도록 하자.
[ Scriptlet ]
: JSP에서 Java 코드를 작성하고 실행할 수 있도록 돕는 코드 블록.
지시어 | <%@ %> | 페이지 속성 지정 |
주석 | <%-- --%> | 주석 |
선언 | <%! %> | 변수, 메서드 선언 |
표현식 | <%= %> | 결과값 출력 |
스크립트릿 | <% %> | 자바 코드 생성 |
액션 태그 | <jsp:action> </jsp.action> | 자바빈 |
※ JSP 예제 - JSP 파일만 사용
아래를 보면 HTML 파일 안에 <% %>로 JAVA 코드를 삽입하고 있다는 걸 알 수 있다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 다이나믹 프로젝트와 톰캣 버전이 안맞아서 에러;;;; 프로젝트 버전을 톰캣에 맞춰줌 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 예제 02</title>
</head>
<body>
<!-- 사용자가 post 요청 == 계산버튼을 눌렀을 때만 이 로직을 진행하도록 하는 if문 추가 -->
<!-- 화면을 보여달라고 요청하는 것 또한 get 요청이다. -->
<!-- post 요청이 아닐 경우에는 xxxx -->
<% // 자바 코드 작성
int res= 0;
if(request.getMethod().equals("POST")){ // POST 요청을 받았을 때만 수행(즉, 계산 버튼을 눌렀을 때)
int num1=Integer.parseInt(request.getParameter("num1")); // 요청에서 받아온 문자열 파라미터 num1을 정수로 변환
int num2=Integer.parseInt(request.getParameter("num2")); // 요청에서 받아온 문자열 파라미터 num2를 정수로 변환
String op=request.getParameter("op"); // 요청으로 연산자 받아옴
if(op.equals("+")){
res=num1+num2;
}
else if(op.equals("-")){
res=num1-num2;
}
else if(op.equals("x")) {
res=num1*num2;
}
else if(op.equals("/")) {
res=num1/num2;
}
}
%> <%-- 여기까지 자바 코드 --%>
<%--<%@ %> --%> <!-- 얘는 표현식을 나타낼 때 사용 -->
<!-- Scriptlet : JSP에서 Java 코드를 작성하고 실행할 수 있도록 돕는 코드 블록 -->
<!-- 처음에 페이지 들어갔을 떄는 작동 x. 입력하고 계산하기 눌러야 그때 post 요청을 받고 위 로직이 작동한다.-->
<form method="POST">
<!-- action을 입력하지 않으면 내 페이지로 돌아오게 된다. -->
<input type="text" name="num1"> <br>
<select name="op">
<option>+</option>
<option>-</option>
<option>x</option>
<option>/</option>
</select> <br>
<input type="text" name="num2"> <br>
<input type="submit" value="계산">
</form>
<hr>
계산결과 : <%= res %> <%-- 표현식 사용 --%>
</body>
</html>
계산결과 : <%= res %> <%-- 표현식 사용 --%>
이 부분이 표현식(Expression)을 사용하는 부분!
표현식은 실행결과 값이 하나만 남는 문장을 뜻하며, 결과값이 하나만 나오는 값을 화면에 표시해줄 때 사용한다.
스크립틀릿으로 out.println()을 사용하는 것과 유사하며, 단순히 바로 값을 출력할 때 사용한다.
[ 자바 빈 (Bean) ]
: JSP 내에서 사용 가능한 자바 객체, 또는 계산 로직을 담고 있는 하나의 클래스. --> 로직 함수화 (모듈화)
□ 멤버변수, getter/setter 등으로 구성
□ 클래스에 해당하므로 일반 클래스를 작성하는 방법과 동일.
※ JSP, 자바빈을 함께 이용한 예제
1. JSP
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean class="calc.CalcBean02" id="cb" />
<%-- CalcBean02 cb = new CalcBean02(); --%>
<jsp:setProperty property="*" name="cb" />
<%-- cb.setXxx() --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>계산기 예제 03</title>
</head>
<body>
<%
cb.calc();
%>
<form method="POST">
<input type="text" name="num1"> <select name="op"><option>+</option><option>-</option></select> <input type="text" name="num2"> <br>
<input type="submit" value="계산">
</form>
<hr>
계산결과 : <jsp:getProperty property="res" name="cb" />
<%-- cb.getRes() --%>
</body>
</html>
해당 파일에는 사용자가 데이터를 입력할 폼을 만들어주는데 action을 통해 /calc2로 보낸다.