SSENI's
search
sseni
말하는 감자에서 자라기
Today
Yesterday
[웹서버프로그래밍] 2022.03.29 JAVA Applet, JSP 내장객체
- 웹 브라우저 내에서 수행되는 자바 프로그램
- main() 없음
- Applet 클래스로부터 상속받아야 함 (항상 public)
- init, start, paint, stop, destroy, update
# HTML에서 애플릿으로 파라미터 전달
- 애플릿 getParameter() 메소드
- HTML 에서는 파라미터를 전달하기 위해 <param name="변수이름" value="변수값"> 문장을 기술
※ 자바 프로그램 내에서 사용되는 변수의 이름과 HTML의 name 부분이 동일해야 함
# 애플릿 함수 실행되는 순서

Servlet, JSP, JDBC
# JSP 내장객체
- JSP 내에서 선언하지 않고 사용할 수 있는 객체
- 구조적으로 JSP가 서블릿 형태로 자동 변환된 코드 내에 포함되어 있는 멤버 변수, 메서드 매개변수 등 각종 참조 변수(객체)를 말함
- request, response, pageContext, session, application, out, config, page, exception
request : HTML 폼 요소의 선택 값 등 사용자의 입력 정보를 읽으려고 사용
response : 사용자 요청에 대한 응답을 처리하려고 사용
pageContext : 현재 JSP 실행에 대한 context 정보를 참조하려고 사용
session : 클라이언트의 세션 정보를 처리하려고 사용
application : 웹 서버의 애플리케이션 처리와 관련된 정보를 참조하려고 사용, 자료를 공유할 때도 사용
out : 사용자에게 전달하기 위한 output 스트림을 처리하려고 사용
config : 현재 JSP의 초기화 환경을 처리하려고 사용
page : 현재 JSP의 클래스 정보를 보려고 사용
exception : 예외 처리를 하려고 사용
# JSP 내장 객체의 구조적 특징
서블릿으로 변경된 JSP 코드는 모두 _jspService() 메서드에 위치

- page, request, session, application 내장 객체를 이용한 속성 관리 기법
- setAttribute, getAttribute()로 생명 주기를 다룸
# request
- javax.servlet.http.HttpServletRequest 클래스에 대한 참조 변수
- 브라우저에서 서버로 전달되는 정보를 처리하기 위해 사용

checkbox -> 다중 선택 가능, 값을 getParameterValues에서 배열로 전달
# 서블릿 구조와 생명주기
GET 방식 >
- 서버에 있는 정보를 클라이언트로 가져오기 위한 방법
ex. HTML 이나 이미지 등을 웹 브라우저에서 보기 위한 요청
- 최대 240 Byte 까지 데이터 전달 가능
- 서버에서 QUERY_STRING을 통해 전달됨. '속성-값' 형태, '&'는 여러 속성 값을 전달할 때 연결해주는 문자열
POST 방식 >
- 서버로 정보를 올리기 위해 설계된 방법
ex. HTML 폼에 입력한 내용을 서버에 전달하기 위한 요청
- 데이터 크기 제한 X
- URL에 매개변수가 노출되지 않음
[실습1] request 테스트 폼
- request_form.html
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>ch06 : request_form.html</TITLE>
<script>
document.cookie = "test=OK.";
</script>
</HEAD>
<BODY>
<div align=center>
<H2>request 테스트 폼 </H2>
<HR>
<form name=form1 method=post action=request_result.jsp>
<table border=1 cellspacing="1" cellpadding="5">
<tr>
<td>이름</td>
<td><input type=text size=10 name=username></td>
<tr>
<td>직업</td>
<td>
<select name=job >
<option selected>무직</option>
<option>회사원</option>
<option>전문직</option>
<option>학생</option>
</select>
</td>
<tr>
<td>관심분야</td>
<td>
<input type=checkbox name=favorite value="정치">정치
<input type=checkbox name=favorite value="사회">사회
<input type=checkbox name=favorite value="정보통신">정보통신
<tr><td colspan=2 align=center><input type=submit value="확인"><input type=reset value="취소"></td></tr>
</table>
</form>
</div>
</BODY>
</HTML>
- request_result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<% request.setCharacterEncoding("UTF-8"); %>
<HTML>
<HEAD>
<TITLE>ch06 : request_result.jsp</TITLE></HEAD>
<BODY>
<div align="center">
<H2>request 테스트 결과 - 1</H2>
<HR>
<table border=1 cellspacing="1" cellpadding="5">
<tr>
<td>이름</td>
<td><%=request.getParameter("username")%> </td>
<tr>
<td>직업</td>
<td><%=request.getParameter("job")%></td>
<tr>
<td>관심분야</td>
<td>
<%
// getParameterValues 메서드를 이용해 "favorite" 로 설정된 form 의 체크박스 값들을 모두 읽어옴.
String favorites[] = request.getParameterValues("favorite");
/*
// 배열의 크기만큼 루프롤 돌면서 값을 출력함.
for(int i=0; i<favorites.length;i++) {
out.println(favorites[i]+"<BR>");
}
*/
// java 5.0 코드
for(String favorite: favorites) {
out.println(favorite+"<BR>");
}
%>
</table>
<HR>
<H2>request 테스트 결과 - 2</H2>
<table border=0><tr><td>
1. 클라이언트 IP 주소 : <%= request.getRemoteAddr() %> <BR>
2. 요청 메서드 : <%= request.getMethod() %> <BR>
<%
Cookie cookie[] = request.getCookies();
%>
3. <%= cookie[0].getName() %> 에 설정된 쿠키값 : <%=cookie[0].getValue() %><BR>
4. 프로토콜 : <%= request.getProtocol() %>
</td></tr>
</table>
</div>
</BODY>
</HTML>
<script>
document.cookie = "test=OK.";
</script>
"myname=SSENI" 로 저장하고 실행하면

<% Cookie cookie[] = request.getCookies(); %>
<%= cookie[0].getName() %> 에 설정된 쿠키값 : <%=cookie[0].getValue() %>
Cookie : "test=OK" 하나만 저장되어 있음


# response 내장객체
- request와 반대되는 개념, 사용자 응답과 관련된 기능을 제공
- 사용자 요청(request)를 처리하고 응답을 다른 페이지로 전달

[실습2] forward 액션, sendRedirect 테스트
- page_control.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD><TITLE>ch06 : page_control.jsp</TITLE></HEAD>
<BODY>
<H2>forward, sendRedirect 테스트</H2>
<HR>
<form method=post action=forward_action2.jsp>
forward action : <input type=text name=username>
<input type=submit value="확인">
</form>
<form method=post action=response_sendRedirect.jsp>
response.sendRedirect : <input type=text name=username>
<input type=submit value="확인">
</form>
</BODY>
</HTML>
- page_control_end.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><TITLE>ch06 : page_control_end.jsp</TITLE></HEAD>
<BODY>
<div align="center">
<H2>forward action 및 sendRedirect() 결과</H2>
<HR>
지금 보이는 화면은 page_control_end.jsp 에서 출력한 결과 입니다.
<HR>
이름 : <%= request.getParameter("username") %> <BR>
전화번호 : <%= request.getParameter("tel") %>
</div>
</BODY>
</HTML>
- response_sendRedirect.jsp
<% response.sendRedirect("page_control_end.jsp"); %>
- forward_action2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:forward page="page_control_end.jsp">
<jsp:param name="tel" value="000-000-0000" />
</jsp:forward>



- forward 액션은 최종적으로 전달되는 페이지 파라미터 HTML 폼 입력값 등을 함께 전달
- sendRedirect()는 단순히 지정된 페이지로 최종 화면이 이동됨
forward : 브라우저 URL에 최초 요청된 페이지 URL
sendRedirect : 최종 전달된 페이지의 URL이 표시됨
# out 내장객체
- 출력 스트림, 사용자 웹 브라우저로 출력하기 위한 내장 객체
- 스크립트릿에서 브라우저로 텍스트를 출력하는 데 사용
- 서버 콘솔이 아닌 사용자에게 전달 (브라우저로 전달)

[실습3] out 내장객체 - 버퍼 크기 출력
- out.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD><TITLE>ch06 : out.jsp</TITLE></HEAD>
<BODY>
<div align="center">
<H2> out 내장객체의 사용 </H2>
<HR>
1. 설정된 버퍼크기 : <%= out.getBufferSize() %> <BR>
2. 남아있는 버퍼크기 : <%= out.getRemaining() %> <BR>
<% out.flush(); %>
3. flush 후 남아있는 버퍼크기 : <%= out.getRemaining() %> <BR>
<% out.clear(); %>
4. clear 후 남아있는 버퍼크기 : <%= out.getRemaining() %> <BR>
<% out.close(); %>
5. close 후 남아있는 버퍼크기 : <%= out.getRemaining() %> <BR>
</div>
</BODY>
</HTML>

- clear 후 버퍼크기는 아예 보여지지 않음
# session 내장객체
-HTTP 프로토콜이 비연결형 프로토콜이기 때문에 한 페이지가 출력된 다음에는 클라이언트와 서버의 연결이 끊어짐
i) 페이지를 이동해도 보관해야 할 정보가 있다면 ? Cookie와 Session으로 해결
- ssesion 은 접속하는 사용자별로 따로 생성되고 일정시간 유지 후 소멸
- setAttribute() 메서드를 이용해 임의의 값을 저장해놓고 활용할 수 있음

세션이 주로 사용되는 경우 >
1. 사용자 로그인 후 세션을 설정하고 일정시간이 지난 경우 다시 사용자 인증을 요구할 때
2. 쇼핑몰에서 장바구니 기능을 구현할 때
3. 사용자의 페이지 이동 동선 등 웹 페이지 트래킹 분석 기능 등을 구현할 때
[실습4] session 내장객체 활용
- ssesion.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD><TITLE>ch06 :session.jsp</TITLE></HEAD>
<BODY>
<div align="center">
<H2>session 예제 </H2>
<HR>
<% // 스크립트릿
// isNew() 메서드를 이용해 최초세션설정을 확인하고 있다.
if(session.isNew()) { // 세션이 새로 만들어졌다면
out.println("<script> alert('세션이 해제되어 다시설정합니다.') </script>");
session.setAttribute("login","홍길동");
}
%>
# <%= session.getAttribute("login") %> 님 환영 합니다.!!!!<BR>
1. 세션 ID : <%= session.getId() %> <BR>
2. 세션 유지시간 : <%= session.getMaxInactiveInterval() %> <BR>
</div>
</BODY>
</HTML>


| [웹서버프로그래밍] 2022.03.23 Assign 02 (0) | 2022.04.05 |
|---|---|
| [웹서버프로그래밍] 2022.04.05 JSP 내장객체(2), 핸들러 함수, 데이터 입력 여부 검사 (0) | 2022.04.05 |
| [웹서버프로그래밍] 2022.03.22 JSP 지시어, 액션, 스크립트릿 (0) | 2022.03.22 |
| [웹서버프로그래밍] 2022.03.17 Assign 01 (0) | 2022.03.17 |
| [웹서버프로그래밍] 2022.03.15 자바 웹 프로그래밍 개발환경 구축 (0) | 2022.03.15 |