- JSP는 컨테이너에서 자바로 변환되는 과정을 거치므로 JSP에서 제공하는 스크립트 요소를 이용하면 조건이나 상황에 맞게 HTML 태그를 선택적으로 전송할 수 있음 => 화면을 동적으로 구현 가능
(cf. HTML태그 : 바로 브라우저로 전송되어 조건에 따라 화면을 동적으로 구현할 수 없음)
12.1 JSP 스크립트 요소
- 스크립트 요소 : <% %> 기호 안에 자바 코드로 구현하여 JSP 페이지에서 여러 가지 동적인 처리를 제공하는 기능
- <% %> : 스크립트릿
<스크립트 요소의 종류>
1. 선언문 : JSP에서 변수나 메서드 선언
2. 스크립트릿 : JSP에서 자바 코드를 작성
3. 표현식 : JSP에서 변수의 값을 출력
12.2 선언문 사용하기
- 선언문 : JSP 페이지에서 사용하는 멤버 변수나 멤버 메서드를 선언할 때 사용
- 선언문 안의 멤버는 서블릿 변환 시 서블릿 클래스의 멤버로 변환 => JSP안에서 자유롭게 접근 가능
- 형식 : <%! 변수or메서드선언 %>
- html 코드 이전에 작성
- JSP가 처음 나온 초기에 자바 코드로 선언해서 사용
ex)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%! String name="듀크";
public String getName(){return name;}%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>선언문 연습</title>
</head>
<body>
<h1>안녕하세요 <%=name %>님!!</h1>
</body>
</html>
12.3 스크립트릿 사용하기
- 초기에 jsp에서 자바코드로 화면의 동적 기능을 구현. 지금은 거의 사용되지 않음
- 형식 : <% 자바코드 %>
ex)
<%! String name= "이순신";
public String getName(){return name;}%>
<%String age=request.getParameter("age"); %>
<!-- 요청의 바인딩은 ?뒤에 key=value로 함, 여기선 ?age=20 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>스크립트릿 연습</title>
</head>
<body>
<h1>안녕하세요 <%=name %>님!!</h1>
<h1>나이는 <%=age %>살 입니다!!</h1>
- JSP의 스크립트 요소는 브라우저로 전송되지 않고 브라우저로 전송되기 전에 컨테이너에서 자바 코드로 변환 됨
- 즉, 변수 등 스크립트 요소는 브라우저로 전송되지 않음
- 브라우저는 HTML 태그, CSS, 자바스크립트만 전달 받음
- 서블릿의 _jspService() 메서드 안의 자바 코드로 변환됨
12.4 표현식 사용하기
- 표현식 : JSP페이지에서 변수나 메서드의 결괏값 등을 브라우저에 출력
- 형식 : <%= 값or변수명or자바식 %>
- 서블릿으로 변환될 때 out.print(~)로 변환됨
- 자바 변수나 자바식 뒤에 ;를 붙이면 안됨
ex)
<h1>안녕하세요 <%=name %>님!!</h1> <!-- 변수 -->
<h1>나이는 <%=age %>살 입니다!!</h1>
<h1>키는 <%=180 %>cm입니다!!</h1> <!-- 값 -->
<h1>나이+10은 <%=Integer.parseInt(age)+10 %>살입니다!!</h1>
<!-- 자바식, 여기선 변수값이 필요하므로 요청시 바인딩 안하면 오류남 -->
12.5 JSP 주석문 사용하기
1. HTML 주석 : <!-- -->
- HTML 태그에 대한 주석문
- <!DOCTYPE html> 안에서 사용
- 브라우저로 전송 됨
2. 자바 주석 : /* */ 나 //
- 스크립트릿 <% %>안에서 사용
- 서블릿에 자바 주석문으로 표시 되고 브라우저에 전송되진 않음
ex)
<%//String age=request.getParameter("age"); %>
3. JSP 주석 : <%-- --%>
- JSP 페이지에 대한 주석문
- <html><body> 안에서 사용
- 자바 파일(서블릿)로 변환될 때 코드로 변환되지 않음
ex)
<h1>나이는 <%--<%=age %>--%>살 입니다!!</h1>
12.6 스크립트 요소 이용해 실습하기
로그인하기1
<body>
<%response.setContentType("utf-8");
String user_id=request.getParameter("user_id");
String user_pw=request.getParameter("user_pw");
%> <%-- 변수 선언도 스크립트릿 안에 다함; => 선언문에서는 멤버변수!!--%>
<h1>결과 출력</h1>
<h1>아이디 : <%=user_id %></h1>
<h1>비밀번호 : <%=user_pw %></h1>
</body>
로그인하기2 - 아이디 유무 검사
<%request.setCharacterEncoding("utf-8");
String user_id=request.getParameter("user_id");
String user_pw=request.getParameter("user_pw");
%>
<%if(user_id.length()==0 || user_id==null) {%> <!-- 자바코드(스크리트릿 안 코드)에서는 변수이름을 그냥 쓰면 됨 -->
아이디를 입력하세요<br>
<a href='login.html'>로그인하기</a>
<%} else{ %>
<h1>환영합니다. <%=user_id %>님!!!</h1>
<%} %>
<!-- if/else 바디, 즉 html코드 부분을 제외하고 스크립트릿 사용-->
로그인하기3 - 관리자/일반회원 검사
...
<%} else if(user_id.equals("admin")) {%>
<h1>관리자로 로그인 했습니다.</h1>
<form> <!-- input을 쓰려면 <form>안에 써야 하는듯-->
<input type="button" value="회원정보 삭제하기">
<input type="button" value="회원정보 수정하기">
</form>
<%} else{%>
<h1>환영합니다. <%=user_id %>님!!!</h1>
<% }%>
* JSP 프리컴파일 기능 : jsp도 최초요청 시 변환 과정을 거치는데 JSP Precompile 기능을 제공해 미리 JSP를 컴파일할 수 있다.
12.7 내장 객체(내장 변수) 기능
JSP 페이지의 내장 객체(내장 변수) : JSP가 서블릿으로 변환될 때 컨테이너가 자동으로 생성시키는 서블릿 멤버 변수
- 종류
- request / response / out / session
- application(컨텍스트 정보)
- pageContext(페이지에 대한 정보)
- page(서블릿 인스턴스)
- config
- exception(예외 처리)
=> JSP에서는 자동으로 세션 객체를 생성해주므로 getSession() 등을 호출할 필요가 없고 바로 객체 쓰면 됨
내장 객체들의 스코프 : 객체를 공유하는 범위
- page => 해당 JSP 페이지
- request => 같은 요청을 공유 하는 JSP 페이지
- session => 같은 브라우저
- application => 같은 어플리케이션
첫번째 jsp - request객체 보내기
<%
request.setAttribute("name", "이순신");
request.setAttribute("address","서울시 강남구");
RequestDispatcher dispatcher=request.getRequestDispatcher("request2.jsp");
dispatcher.forward(request,response);
%>
<!DOCTYPE html>
<html>
..
두번째 jsp - request객체 받아서 바인딩된 속성 가져오기
<%
String name=(String)request.getAttribute("name");
String address=(String)request.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>두 번째 JSP</title>
</head>
<body>
<h1>이름은 <%=name %>입니다.</h1>
<h1>주소는 <%=address %>입니다.</h1>
<out 내장 객체 이용해 데이터 출력하기>
<%=name %> , <%=age %>
<% out.println(name +" , "+age); %>
<!-- 두 코드의 결과는 동일하다. -->
12.8 JSP 페이지 예외 처리하기
JSP 페이지에서 오류가 발생하면 예외 처리 페이지를 이용해 예외 처리를 할 수 있다.
- 예외 처리 담당 JSP 만들고 (+디렉티브 태그 속성 중 isErrorPage="true")
-> 일반 JSP 페이지 만들기 (+디렉티브 태그 속성 중 errorPage="예외처리JSP.jsp")
- exception 내장 객체를 이용해 에러 메세지 출력 가능
예외 처리 jsp ex)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러 페이지</title>
</head>
<body>
===== toString() 내용 =====<br>
<h1><%=exception.toString() %></h1> <!-- =를 붙여야 함에 주의!! -->
===== getMessage() 내용 =====<br>
<h1><%=exception.getMessage() %></h1>
===== printStackTrace() 내용 =====<br>
<h1><%exception.printStackTrace(); %></h1>
<h3>숫자만 입력 가능합니다. 다시 시도하세요.
<a href='add.html'>다시 하기</a></h3>
</body>
</html>
<JSP 페이지의 오류 페이지 종류>
- 404 오류 : 요청한 JSP 페이지가 없을 때 발생하는 오류
- 500 오류 : 컨테이너에서 JSP 페이지 처리 중에 오류가 발생할 때 표시되는 오류
>> web.xml에서 여러 오류에 따른 예외 페이지를 지정할 수 있다.
~ 형식~
<error-page>
<error-code>에러코드(ex. 400)</error-code>
<location>에러처리jsp 경로</location>
</error-page>
이렇게 등록하면 errorPage, isErrorPage 속성을 지정해줄 필요가 없음
* 만약 한 개의 JSP 페이지에서 페이지 디렉티브의 errorPage 속성과 web.xml이 같이 지정되어 있으면 errorPage가 우선
12.9 JSP welcome 파일 지정하기
- 주소창에 jsp나 서블릿을 일일이 브라우저에 요청하지 않고, 컨텍스트 이름으로만 요청하면 홈페이지가 나오게 하기
>> web.xml의 <weclome-file>로!!
- 지정한 순서대로 찾아 홈페이지로 보여줌
- 형식
<welcome-file-list>
<welcome-file>= jsp 또는 html 파일 이름1 </welcome-file>
<welcome-file>= jsp 또는 html 파일 이름2 </welcome-file>
..
</welcome-file-list>
>>이렇게 하면 ~/pro12(컨텍스트 이름)/으로만 검색해도 지정한 파일이 자동으로 나옴
- 실제 서비스를 제공할 때
웹 사이트에 대한 도메인 이름을 구하기 -> 브라우저에서 도메인 이름으로 요청 -> 컨텍스트 이름으로 재요청하도록 설정
12.10 스크립트 요소 이용해 회원 정보 조회하기
- 스크립트 요소를 이용해 데이터베이스의 회원 정보를 조회한 후 JSP 페이지에 출력해보자
member.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.util.*"
import="sec02.ex01.*"
pageEncoding="UTF-8"%> <%-- dao, vo객체를 위해서 임포트 --%>
<!DOCTYPE html>
<html>
<head>
<style>
h1{
text-align:center;
}<!-- <h1> 태그의 텍스트를 중앙에 정렬함-->
</style>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
<h1>회원 정보 출력</h1>
<%
request.setCharacterEncoding("utf-8");
MemberVO memberVO=new MemberVO();
memberVO.setName(request.getParameter("name"));
MemberDAO dao=new MemberDAO();
List<MemberVO> members=dao.listMembers(memberVO);
%>
<table border='1' width='800' align='center'>
<tr align='center' bgcolor='#FFFF66'>
<td>아이디</td>
<td>비밀번호</td>
<td>이름</td>
<td >이메일</td>
<td>가입일자</td>
</tr>
<%
for(int i=0;i<members.size();i++){
MemberVO member=members.get(i);
String id=member.getId();
String pw=member.getPwd();
String name=member.getName();
String email=member.getEmail();
Date joinDate=member.getJoinDate();
%>
<tr align=center>
<td><%= id %></td>
<td><%= pw %></td>
<td><%= name %></td>
<td><%= email %></td>
<td><%=joinDate %></td>
</tr>
<%
}
%>
</body>
</html>
'BackEnd > JSP' 카테고리의 다른 글
15장. JSP 페이지를 풍부하게 하는 오픈 소스 기능 (0) | 2022.02.23 |
---|---|
14장. 표현 언어와 JSTL - ②JSTL (0) | 2022.02.22 |
14장. 표현 언어와 JSTL - ①표현언어 (0) | 2022.02.22 |
13장. 자바 코드를 없애는 액션 태그 (0) | 2022.02.21 |
11장. JSP 정의와 구성 요소 (0) | 2022.02.19 |
Comment