JSP(Java Server Page)는 브라우저에서 자바 데이터와 html, css, js코드와 혼용해서 개발 가능하게 하는 기술이다. Servlet을 이용한 기술로 JSP파일은 최초로 client가 요청할 시 servlet파일로 변화시켜(web container가 해줌) 컴파일해 실행시킨다. 또한 개발의 용이함을 위해 몇가지 내장객체를 미리 제공해준다.(HttpServletRequest : request, HttpServletResponse : response...)
jsp가 html파일과 가장 큰 차이점은 자바코드를 적용할 수 있다는 점이다. 그리고 jsp는 백엔드 언어, html은 프론트 언어로 jsp는 server에서 실행 후 결과만 문자열로 브라우저에 응답하고 html은 브라우저에서 실행 후 결과를 브라우저 상에 출력한다.
jsp태그
jsp scripting tag
page지시자 : jsp설정정보를 정의
<%@ page @%>
주석 : 도움말을 적기위한 주석처리, html주석()과 달리 client에게 넘어가지 않으므로 보안이 필요한 주석에 사용하면 된다.
<%-- --%>
declaration tag : 멤버변수나 메서드를 정의
<%! %>
scriptlet tag : service() doGet() doPost() 정의
<% %>
expression tag : 브라우저상에서 출력
@ $로 표현할 때 주의사항 @
나는 $로 변수를 참조할 때 있는 그대로의 변수를 가져온다고 생각했다.
// response에 setAttribute로 key가 "key1", value가 "value1"(String타입인 것임!!!)로 담겨 날아왔고, 이를 스크립팅태그로 받아서 써본다.
console.log(${requestScope.key1});
// 출력 결과는? --> 당연히 String타입 "value1"이 나오지 않나?
이때, 출력화면이 무조건 String타입 value1이 나오지는 않는다. 만약 value1이 "1"이었다면 number타입 1로 출력이 되고, value1이 "[1,2,3]"이었다면 Object타입(Array) [1,2,3]으로 출력된다. 그리고 value1이 String타입 "안녕"이었다면? 이때는 출력되지 않고 에러가 발생한다. 그 이유가 무엇일까?
이는 아마 $를 이용해 변수를 참조할 때 양 옆의 큰따움표(")를 제거한채로 해석해서 그런 것 같다.(정확하지는 않아서 이에 대한 공부가 더 필요하다.)
// < 이해를 위해 실험해본 예제들 >
// 1.response 보내는 문서 안
request.setAttribute("practice1", 1); // 1)숫자
request.setAttribute("practice2", "1"); // 2)문자열(안에 숫자로만이루어짐)
String[] arr = {"1","2","3"};
request.setAttribute("practice3", arr); // 3)배열
request.setAttribute("practice4", "안녕"); //4)문자열
// 2.request 받는 문서 안
console.log(${requestScope.practice1}); // 1) 양끝 큰따움표(") 제거 : (원래없었으므로) 1 출력, 타입은 number
console.log(${requestScope.practice2}); // 2) 양끝 큰따움표(") 제거 : 1 출력, 타입은 number
console.log(${requestScope.practice3}); // 3) 양끝 큰따움표(") 제거 : (원래없었으므로) {"1","2","3"} 출력, 타입은 Object(array)
console.log(${requestScope.practice4}); // 4) 양끝 큰따움표(") 제거 : 안녕 출력해야 하지만, 문자열은 큰따움표없이 출력할 수 없음.
//안녕 은 문자열 취급이아니라 변수 취급이다.
//즉,변수 안녕을 불러와 출력한다.(안녕변수가 없으면 에러 발생)
<%= %>
- jsp action tag
- RequestDispatcher
- forward : 요청, 응답 객체가 이동되는 servlet에서 유지
<jsp:forward page="이동할주소"/>
- include : 요청, 응답 객체가 이동되는 servlet에서 유지
<jsp:include page="이동할주소">
- EL tag
- 비교연산 : ${ 비교연산식 }
- requestScope, sessionScope
- jstl tag
- 별도의 library설정이 필요하다
- <c:if>,<c:forEach begin="" end="" step="" var="">, <c:choose><c:when><c:otherwise> 등등이 존재한다.