jsp 스크립트
jsp 스크립트는 jsp파일 내에서 자바 코드를 삽입하는 방법이다.
삽입된 스크립트는 웹 컨테이너에서 jsp파일이 servlet으로 컴파일될 때 service 메소드로 삽입된다.
그리고 파싱된 html의 소스코드에서는 소스 코드에서 배제되므로 보안 상으로 안전하다.
선언 태그
멤버 변수 혹은 메서드를 선언할 수 있는 태그다.
여기서 선언된 변수는 라이프 사이클 내내 유지된다. 즉, service 메소드의 매 호출 마다 초기화되지 않고 유지된다.
형식 | <%! 코드 %>
주석 태그
html 주석 태그
클라이언트 소스 코드 쪽에 남는 일반적인 html 주석이다.
형식 | <!-- html 주석 -->
단축키 | ctrl shift c
JSP 주석 태그
서버 단에서만 볼 수 있는 주석 태그다.
형식 | <%-- jsp 주석 --%>
(<%-- 까지 치면 자동 완성 된다.)
스크립트릿 태그
모든 자바 코드가 사용 가능하다.
중간중간에 htm을 넣는 방식도 있는데, 아래 예시와 같다.
<body>
hello jsp
<%
int num = -1;
if (num > 0) {
%>
<p>number is big</p>
<%
} else {
%>
<p>number is small</p>
<%
}
%>
</body>
선언 태그와 스크립트릿 태그 간 차이
두 태그는 스크립크 코드 간 변수를 선언하고 값을 공유할 수 있다.
차이는 전자는 전역 변수이자 멤버 변수이고 후자는 지역 변수이다.
또한, 선언 스크립트에서는 메서드 선언이 가능하다.
라이프 사이클의 측면에서 멤버 변수는 jsp 파일이 서버에서 가동되는동안 존속하지만,
지역 변수는 jsp파일이 호출될 때 마다 초기화된다.
그 이유는 jsp는 _jsp.java라는 servlet으로 컴파일되는데, 멤버변수는 init()으로 가고 로컬 변수는 service() 내에 있다. service()는 클라이언트이 요청마다 매번 초기화되므로 로컬 변수도 초기화된다.
// 멤버 변수와 지역 변수간 차이에 대한 예시
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
hello jsp
// 전역 변수 a
<%!
int a=0;
%>
// 로컬 변수 b
<%
int b=0;
a++;
b++;
%>
// a는 jsp가 서버에 올라간 이후로 계속 존속
// b는 로컬 변수로, jsp 파일이 응답될 때 마다 초기화
<%
out.println(a);
out.println(b);
%>
</body>
</html>
참고
System.out은 jsp에서 제대로 작동하지 않으므로, html 코드를 추가할 거면 <% out.println(num); %>을 사용하면 된다.
표현식 태그
표현식, 값만 입력가능한 태그다.
html의 태그 내에 값을 동적 삽입하기 용이하다.
형식 | <%=num%>
html 태그 내 동적 삽입 예시 | <p>num is <%=num%></p>
주의사항
스크립트 간에는 중첩하여 작성이 안된다. 즉, 스크립트 내에 다른 스크립트를 넣을 수 없다.
또한, 태그 내에서 표현식 태그가 아닌게 들어오면 안될 가능성이 크다. (아직 모든 경우를 찾아보진 못해서 추가 확인이 필요하다)
지시어
page의 처리 방법에 대한 지시 사항
jsp에서 라이브러리를 임포트할 때도 사용
형식 | <%@ 처리어 키=벨류%>
ex) page : 페이지 기본 설정
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
ex) include : jsp 파일 삽입
<%@include file="/header.jsp" %>
ex) taglib: 외부 라이브러리 uri 삽입
<%@taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
jsp 파일에서 자동완성을 위한 템플릿 추가 방법
window- preference – web- jsp file - templates
JSP 내장객체와 config 객체 및 aplication 객체(데이터 공유)
내장 객체란, 리퀘스트, 리스폰스처럼, import 없이 바로 사용가능한 객체를 말한다.
내장 객체는 파일 내에 자동으로 선언되어 있으므로 선언 스크립트에서 의도치 않은 중복을 주의해야 한다.
JSP request, response
- jsp는 servlet으로 컴파일되므로 request,response 객체를 사용할 수 있다.
- jsp form은 특정 페이지 경로 외에도 다른 파일로 직접 전송이 가능하다.
<form action="dest.jsp" method="get“>
// 경로 사용하는 부분에 대한 추가 공부가 필요하다.
JSP를 컴파일하는 과정에서 HTML 문법상 이상하다 싶은 부분은 알아서 변경되기도 한다.
예컨대, p태그 내에 p 태그를 넣으면 이를 잘못된 것으로 판단해서 내부의 p를 바깥으로 빼낸다.
config 객체( 특정한 파일에서만 공유 )
config 객체는 지정된 파일 간에 데이터를 공유할 수 있도록 설정한 것을 말한다.
주로 adminid 같은 값을 빌드 단계에서 jsp 간에 공유할 수 있는 값으로 설정할 때 사용한다.
형식
web.xml에서 공유할 jsp를 선택하고 데이터 공유
<!--@web.xml-->
<servlet>
<servlet-name>adminHome</servlet-name>
<jsp-file>/adminHome.jsp</jsp-file>
<init-param>
<param-name>adminId</param-name>
<param-value>taey</param-value>
</init-param>
<init-param>
<param-name>adminPassword</param-name>
<param-value>1234</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>adminHome</servlet-name>
<url-pattern>/admin/home</url-pattern>
</servlet-mapping>
jsp 파일에서 config 내장 객체를 이용하여 접근 가능하다.
주의사항으로는 선언 태그에서는 config 내장 객체에 접근할 수 없다.
그 이유는 선언 태그가 컴파일되어 들어가는 init 메소드에서는 아직 config 내장 객체가 생성되지 않았기 때문이다.
(다만, 이 부분은 좀 더 공부해봐야 알 것 같다.)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<p>this is admin page</p>
<%!String adminId;
String adminPassword;%>
<%
adminId = config.getInitParameter("adminId");
adminPassword = config.getInitParameter("adminPassword");
%>
<p>
admin id :
<%=adminId%></p>
<p>
admin password
<%=adminPassword%></p>
</body>
</html>
application 객체( 모든 파일에서 공유하기 )
이 객체에서 데이터를 공유하면 앱 내 모든파일에서 사용가능하다.
보편적으로 사용하는 이미지 정적 데이터 경로나 서버 ip 등을 공유할 때 사용한다.
형식
web.xml 파일에서 공유 설정
<!--web.xml-->
<context-param>
<param-name>imgDir</param-name>
<param-value>/static/img</param-value>
</context-param>
jsp, servlet 파일에서 읽어오기
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<p>this is admin page</p>
<%!
String imgDir;
String serverPort;%>
<%
imgDir = application.getInitParameter("imgDir");
serverPort = getServletContext().getInitParameter("serverPort");
%>
<p>
imgDir :
<%=imgDir%></p>
<p>
serverPort
<%=serverPort%></p>
</body>
</html>
추가로 속성 설정하기
다른 곳에서 application 객체에 속성을 추가하거나 변경하면, 다른 파일에서 그것을 받아 볼 수 있다.
<%
getServletContext().setAttribute("videoDir", "/dir/video");
%>
<%
String a = (String)application.getAttribute("videoDir");
%>
참고자료
config 객체의 생명주기
'java > jsp & sevlet' 카테고리의 다른 글
[jsp&servlet] cookie, session (0) | 2024.05.04 |
---|---|
[jsp&servlet] error page 설정 방법 (0) | 2024.05.04 |
servlet의 기본 사용법1(request, response, life cycle, form 처리) (0) | 2024.05.01 |
[jsp&sevlet] 동적 웹 프로젝트 생성 방법(JSP, servlet) 및 URL 매핑 (0) | 2024.05.01 |
[jsp, servlet] Apache Tomcat의 사용 이유 & 서버 설정(WS, WAS) (0) | 2024.04.23 |