JSP공부 (7)
2024-10-17 00:51:04

표준 태그 라이브러리

  • Jsp Standard Tag Library의 약자
  • JSP에서 개발자가 추가할 수 있는 커스텀 태그를 모아놓은 표준
    • <jsp:include> 와 같은 태그를 개발자가 추가할 수 있는 태그
  • 역할
    • 스크립틀릿 코드의 사용빈도 감소
    • 더욱 간결하고 이해하기 쉬운 JSP 코드를 작성 가능
  • 종류
라이브러리 주요 기능 접두어 관련 URI
코어 변수 지원
흐름제어
URL 처리
c http://java.sun.com/jsp/jstl/core
XML XML 코어
흐름 제어
XML 변환
x http://java.sun.com/jsp/jstl/xml
국제화 지역
메시지 형식
숫자 및 날짜 형식
fmt http://java.sun.com/jsp/jstl/fmt
데이터베이스 SQL sql http://java.sun.com/jsp/jstl/sql
함수 컬렉션 처리
String 처리
fn http://java.sun.com/jsp/jstl/functions

JSTL 코어 태그

변수 설정이나 if-else 와 같은 논리 처리에 사용되는 스크립트 코드를 대체하는 태그를 제공한다

 

taglib 디렉티브 추가

<%@  taglib prefix="c" uri="htp://java.sun.com/jsp/jstl/core" %>

기능 분류 태그 설 명
변수 지원 set JSP에서 사용할 변수를 설정한다
remove 설정한 변수를 제거한다
흐름 제어 if 조건에 따라 내부 토드를 수행한다
choose 다중 조건을 처리할 때 사용한다
forEach 컬렉션이나 Map의 각 항목을 처리할 때 사용된다
forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용한다
URL 처리 import URL을 사용하여 다른 자원의 결과를 삽입한다
redirect 지정한 경로로 리다이렉트 한다
url URL을 재작성한다
기타 태그 catch 익셉션을 처리할 때 사용
out JspWriter에 내용을 출력한다

 

  • 변수 지원 태그 - <c:set>, <c:remove>
    • EL 변수의 값이나 EL 변수의 프로퍼티 값을 지정할 때 사용
    • set
      • <c:set var="변수명" value="값" [scope="영역"] />
      • <c:set var="변수명" [scope="영역"] > 값 </c:set>
      • <c:set target="대상" property="프로퍼티 이름" value="값" />
      • <c:set target="대상" property="프로퍼티 이름"> 값 </c
    • remove
      • <c:remove var="변수명" [scope="영역"/>
      • 주의 : 삭제할 변수의 scope를 지정해주지 않으면 동일한 이름으로 저장된 모든 영역(request, response, page, application)의 변수를 삭제한다.
  • 흐름 제어 태그 - <c:if> <c:choose> <c:forEach> <c: forToken>
    • if
      • 자바 언어의 if 블록과 유사한 기능을 제공
      • <c:if test="조건"> --- </c:if>
    • choose / when / otherwise
      • 자바의 switch 구문과 if-else 블록을 혼합한 형태
      • 다수의 조건문을 하나의 블록에서 수행할 때 사용
      • <c:choose>
             <c:when test=“${member.level == ‘trial’}”>
                  . . .
             </c:when>
             <c:otherwise>
                  . . .
             </c:otherwise>
        </c:choose>
    • forEach 
      • 배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할 때 사용
      • 자바의 for, do-while 등을 대신해서 사용할 수 있다
      • < c:forEach var=“변수” items=“아이템">
             . . .
             ${변수 사용}
             . . .
        < /c:forEach>
    • forToken
      • 주어진 문자열을 구분자로 나누어  토큰으로 만듦
      • < c:forTokens var=“토큰” items=“문자열“ delims=“구분자”>
             ${token}의 사용
        < /c:forTokens>
    • url 처리 태그 url - redirect
      • URL 관련 처리를 위한 태그
      • URL 생성 : <c:url>
        • <c:url value="URL" [var="변수명" scope="영역">
                <c:param name="이름" value="값"/>
          </c:url>
        • 리다이렉트 처리 : <c:redirect>
          • <c:redirect url="URL 변수/ 경로"/>
    • out
      • JspWriter에 대이터를 출력할 때 사용되는 태그
      • <c:out value="값" [escapeXml="(true/false)"]
      • escapeXml의 값이 true면 특정 문자가 변환되어 출력된다

JSTL 국제화 태그

  • 특정 지역에 따라 알맞은 메시지를 출력해야 할 떼 사용
  • JSP 페이지에서 다양한 언어에 맞는 메시지 출력 기능을 제공

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt>

 

기능 분류 태그 설 명
로케일 지정 setLocale Locale을 지정한다
requestEncoding 요청 파라미터의 캐릭터 인코딩을 지정한다
메시지 처리 bundle 사용한 번들을 지정한다
message 지역에 알맞은 메시지를 출력한다
setBundle 리소스 번들을 읽어와 특정 변수에 저장한다
숫자 및 날짜 포맷팅 formatNumber 숫자를 포맷팅한다
formatDate Date 객체를 포맷팅한다
parseDate 문자열로 표시된 날짜를 분석해서 Date 객체로 변환
parseNumber 문자열로 표시된 날짜를 분석해서 숫자로 변환
setTimeZone 시간대 정보를 특정 변수에 저장한다
timeZone 시간대를 지정한다

 

  • <fmt:setLocale> : 국제화 태그들이 사용할 로케일을 지정
  • <fmt :requestEncoding> : 요청 파라미터의 캐릭터 인코딩을 지정

'JSP공부' 카테고리의 다른 글

표현 언어 Expression Language  (0) 2024.10.04
JavaBeans 자바빈  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03
2024-10-04 05:00:36

표현 언어(EL)란

  • 다른 형태의 스크립트 언어로서 스크립트 요소 중 하나이다.
  • 표현식보다 간결하고 편리하다
  • 기능
    • JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
    • 수치 연산, 관계 연한, 논리 연산자 제공
    • 자바 클래스 메소드 호출 기능 제공
    • 쿠키, 기본 객체의 속성 등 JSP 를 위한 표현 언어늬 기본 객체 제공
    • 람다식을 이용한 함수 정의와 실행
    • 스트림 API를 통한 컬렉션 처리
    • 정적 메소드 실행
  • 구성
    • ${ expression }
  • EL 에서 사용할 수 있는 기본 객체
기본 객체 설 명
pageContext JSP의 pageContext 기본 객체와 동일하다
pageScope pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
requestScope request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
sessionScope session  기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
applicationScope application  기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
param 요청 파라미터의 <파라미터 이름, 값> 매핑을 저장한 Map 객체
paramValues 요청 파라미터의 <파라미터 이름, 값 배열> 매핑을 저장한 Map객체
header 요청 정보의 <헤더 이름, 값> 매핑을 저장한 Map 객체
headerValues 요청 정보의 <헤더 이름, 값 배열> 매핑을 저장한 Map 객체
cookie <쿠키 이름, Cookie> 매핑을 저장한 Map 객체
initParam 초기화 파라미터의 <이름, 값> 매핑을 저장한 Map 객체

 

예제

<%@ 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>
<%
	request.setAttribute("name", "홍길동");
	session.setAttribute("ID", "admin");
	application.setAttribute("appValue", "EL Object");
%>

<h3>
 요청 URI : ${pageContext.request.requestURI}<br>
 code의 파라미터 : ${param.code }<br>
 쿠키의 JSESSIONID 값 : ${cookie.JSESSIONID.value}<br>
 request의 name 속성: ${requestScope.name }<br>
 session의 ID 속성: ${sessionScope.ID }<br>
 application의 appValue 속성: ${applicationScope.appValue}<br>
	request의 name 속성 : ${name }<br>
	session의 ID 속성 : ${ID }<br>
</h3>
</body>
</html>

include혹은 forward로 받은 param이 없기 때문에 code의 파라미터는 공백

EL의 기본 연산자

  • 수치 연산자 : +, -, *, / (또는 div), % (또는 mod), 단항연산자(-)
    • 자바 연산자와 동일
    • 수치 연산자는 정수 타입과 실수 타입에만 적용
    • 숫자 타입과 객체를 수치 연산자와 함께 사용하는 경우
      • 해당 객체를 숫자로 변환 후 연산 수행
      • $ {"10" + 1} => 11
  • 비교 연산자 : ==, !=, <, >, <=, >=
    • 자바 연산자와 동일
    • 문자열을 비교할 경우 String.compateTo() 메소드 사용
    • ${ value == "홍길동" } 으로 사용 가능
  • 논리 연산자 : && (and), || (or), ! (not)
  • empty 연산자 : 검사할 객체가 텅 빈 객체인지 검사
    • empty<값>
    • <값> 이 null 이면 true
    • <값> 이 빈 문자열 ("") 이면 true
    • <값> 이 길이가 0인 배열이면 true
    • <값> 이 빈 Collection이면 true
    • 이 외의 경우에는 false 
  • 비교 선택 연산자 : <수식> ? <값> : <값2>
  • 문자열 연결
    • + 연산자를 이용한 문자열 연결은 불가능
    • += 연산자를 통해 문자열 연결
  • 세미콜론 연산자
    • 세미콜론 연산자를 이용하면 두 개의 식을 붙일 수 있다.
    • ex) ${ 1 + 1; 10 + 10 }  => 출력 결과는 20
  • 할당 연산자
    • 할당 연산자를 이용하면 코드를 사용하여 EL 변수를 생성할 수 있다.
    • ex) ${ var = 10 }
    • 주의점 : 할당 연산자도 출력 결과를 생성하므로, 할당만 원할 경우 세미콜론(;)  후에 빈 문자열 ('')로 출력을 안보이게 해야함

<%@ 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>
<jsp:useBean id="calc" class="Week6.calc"/>
<jsp:setProperty name="calc" property="*"/>
<body>
<h3>EL 연산자 결과</h3>
<br>
x = ${calc.num1 }, y = ${param.num2 }<br>
x + y = ${requestScope.num1 + calc.num2 }<br>
x - y = ${pageScope.num1 + param.num2 }<br>
x * y = ${paramValues.num1[0] * calc.num2 }<br>
x / y = ${calc.num1 / calc.num2 }<br>
x % y = ${calc.num1 % calc.num2 }
<hr>
x와 y가 모두 양수입니까? ${calc.num1 > 0 && calc.num2 > 0 }<br>
x와 y가 같습니까? ${calc.num1 == calc.num2 }
<hr>
${id ="admin"}<br>
${strArr = ['가', '나', '다']; '' }<br>
strArr의 값은 ${strArr }입니다.
<hr>
${var == "admin" }<br>
${strArr[0] += strArr[1] += strArr[2] }<br>
</body>
</html>

 


람다식

람다식 호출 방법

  • 람다식은 함수의 일종
  • 람다식을 할당한 greaterThan을 함수처럼 호출
    •  ${ greaterThan = (a, b) -> a > b ? true : false; '' }
    • ${ greaterThan(1, 3) }
  • 람다식을 특정 변수에 할당하지 않고 바로 호출 가능
    • ${ ((a,b) -> a > b ? true : false)(1, 3) }
  • 재귀 호출도 가능
    • ${ factorial = (n) -> n == 1 ? 1 : n * factorial(n - 1); '' }
    • $ {factorial(5) }

<%@ 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>
<h3>람다식 예제</h3>
1. 두 개의 숫자 중 큰 수 찾기<br>
${max = (a, b) -> a > b ? a : b;'' }
(3, 5) 중 큰 수 = ${max(3, 5) }<br><br>

2. 두 문자열이 같은지 체크하기<br>
${strEQ = (str1, str2) -> str1 == str2; '' }
("admin", "홍길동") 두 문자열은 같은가? ${strEQ("admin", "홍길동") }<br><br>

3. 피타고라스의 정리<br>
${Func = (a, b) -> Math.sqrt(a*a + b*b); '' }
두 변의 길이가 3, 4인 직각 삼각형의 빗변의 길이는 ${Func(3, 4) }이다<br>
</body>
</html>

 

스트림 API 

  • EL문은 for문이나 while 문과 같은 반복문을 제공하지 않는다.
  • EL 3.0 버전부터는 컬렉션 객체를 위한 스트림 API가 추가되었다.
  • 세미콜론 연산자와 할당 연산자를 사용하면 EL 만으로 표현 가능
    • ${ lst = [1, 2, 3, 4, 5]; sum = lst.stream().sum();'' }
  • 스트림(stream)은 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복문
    • 기본 형식

  • stream()을 이용한 스트림 생성
    • List를 포함한 java.util.Collection 타입의 객체에 대해 stream() 메소드를 실행하면 EL 스트림 객체를 생성한다
    • 일단 스트림을 생성하면 스트림 객체를 이용해서 중간 변환과 최종 연산을 통해 새로운 결과를 생성할 수 있다.

사용 가능한 메소드

  • distinct() 중복 제거
  • filter() 원하는 조건에 맞는 데이터 추출
  • map() 데이터 변환
  • sorted() 데이터 정렬
    • 내림차순으로 정렬하고 싶은 경우에는 sorted() 메소드에 값을 비교할 때 사용할 람다식을 전달한다
    • (x1, x2) -> x1 < x2 ? 1 : -1
    • 두 값을 비교해서 순서를 바꿔야 한다면 1, 그렇지 않다면 -1
  • limit() 데이터 개수 제한
  • toList(), toSet(), toMap() : 자료 구조로 리턴
  • sum() : 합계
  • count() : 계수
  • average() : 평균
  • min(), max() : 최소값, 최대값

<%@ 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>
	${varList = [2, 11, 7, 4, 8, 5, 8]; '' }
	${varList.stream().distinct().toList() }<br>
	${varList.stream().filter(x -> x % 2 == 0).toList() }<br>
	${varList.stream().sorted((x1, x2) -> x1 < x2 ? 1 : -1).toList() }<br>
	${varList.stream().sorted().toList() }<br>
	${varList.stream().sum() }<br>
	${varList.stream().count() }<br>
	${varList.stream().average().get() }<br>
	${varList.stream().min().get() }<br>
	${varList.stream().max().get() }<br>
	${varList.stream().map(x -> x * x).toList() }<br>
	
	
</body>
</html>

 

'JSP공부' 카테고리의 다른 글

표준 태그 라이브러리 JSTL  (0) 2024.10.17
JavaBeans 자바빈  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03
2024-10-04 03:24:30

자바빈의 개요

  • 자바빈은 속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준
    • JVM 메모리의 객체 데이터를 바이트 형태로 변환하는 기술
  • JSP에서는 속성을 표현하기 위한 용도로 사용
  • 현재까지 작성해온 JSP 페이지의 문제점
    • JSP 페이지에 화면 표출 부분과 데이터 핸들링 부분이 혼재
    • 동일한 데이터를 사용할 경우 페이지마다 코드가 반복됨
    • JSP 페이지와 데이터 로직을 분리해거 모듈화하는 작업이 필요
    • JSP 페이지의 데이터 속성 부분을 분리
    • 자바빈을 이용한 코드 재사용으로 프로그램의 효율을 높임
    • 프로그램 유지 보수 관리도 용이자바빈을 사용하는 목적

작성 순서

  1.  package 명 기술
  2. 사용할 package import
  3.  JavaBean 클래스 선언
    • 클래스명 규칙
    • 첫 글자는 영문 대문자로 시작하고, 나머지는 소문자를 사용
    • 단어를 여러 개 합칠 때는 시작되는 단어의 첫 글자를 대문자로
  4. 자바빈의 속성(property, 멤버 변수) 선언
    • 각 속성들의 접근 제한자는 private로 선언해야 한다
  5. 자바빈의 메소드 선언
    • 속성들에 접근하기 위한 getter(), setter() 메소드는 접근 제어자를 public으로 선언해서 작성
package Week5;

public class MemberInfo {
	// 자바빈 클래스
	// 속성(property)은 반드시 private
	
	private String id;
	private String password;
	private String name;
	private String registerDate;
	private String email;
	// property를 읽기 위한 getter,
	// 쓰기 위한 setter가 필요
	// getter와 settet는 소문자로 이루어져있다가 가져와야 할 데이터가 대문자로 되어있어야만 인식한다.
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(String registerDate) {
		this.registerDate = registerDate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

 

<jsp:useBean> 태그를 이용한 자바 객체 사용

  • JSP 페이지의 주된 기능은 데이터를 보여주는 것이다.
  • 게시판의 글 목록보기,  글 읽기, 회원 정보 보기 등 자바빈과 같은 클래스에 담아서 값을 보여주는 것이 일반적.

자바빈을 사용하기 위한 3가지 액션 태그

자바빈 액션 태그 설 명
<jsp:useBean> 자바빈 객체를 생성하는 액션 태그
<jsp:setProperty> 생성된 자바빈 객체에 프로퍼티 값을 저장하는 액션 태그
<jsp:getProperty> 생성된 자바빈 객체에서 저장된 프로퍼티 값을 가져오는 액션 태그

 

<jsp:useBean> 액션 태그를 사용하여 객체 생성하기

<jsp:useBean id="[빈 이름]" class="[자바빈 클래스 이름]" scope="[범위]" />

액션 태그 속성 설 명
id JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름을 지정
class 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 입력
scope 자바빈 객체를 저장할 영역을 지정
page, request, session, appliction 중 하나를 값으로 가진다.
기본값은 page

 

ex) <jsp:useBean name="member" class="week5.MemberInfo" scope="request" />

<jsp:setProperty> & <jsp:getProperty>

<jsp:setProperty> 액션 태그를 사용하면 생성한 자바빈 객체의 프로퍼티 값을 변경 할 수 있다.

액션 태그 속성 설 명
name 프로퍼티의 값을 변경할 자바빈 객체의 이름을 지정한다.
<jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용한다
property 값을 지정할 프로퍼티의 이름을 지정한다
value 프로퍼티의 값을 지정한다
표현식 (<%= 값 %>)이나 EL(${값}) 을 사용할 수 있다

 

ex) <jsp:setProperty name="member" property="name" value="홍길동">

 

<jsp:getProperty> 액션 태그를 사용하면 생성한 자바빈 객체의 프로퍼티 값을 읽어올 수 있다.

액션 태그 속성 설명
name <jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용한다
property 출력할(값을 읽어올) 프로퍼티의 이름을 지정한다

 

ex) <jsp:getProperty name="member" property="name">

'JSP공부' 카테고리의 다른 글

표준 태그 라이브러리 JSTL  (0) 2024.10.17
표현 언어 Expression Language  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03
2024-10-03 18:38:56

include 디렉티브

지정한 페이지를 현재 위치에 포함시킴

처리 방식


 

액션 태그

  • 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그
  • JSP 페이지에서 페이지와 페이지 사이를 제어
  • 다른 페이지의 실행 결과 네영을 편제 페이지에 포함
  • 자바 빈즈(JavaBeans) 등의 다양한 기능을 제공
  • XML 형식 <jsp : ... />을 사용
액션 태그 형식 설명
forward <jsp:forward --- /> 다른 페이지로의 이동과 같은 페이지 흐름을 제어
include <jsp:include --- /> 외부 페이지의 내용을 포함하거나 페이지를 모듈화
useBean <jsp:useBean --- /> JSP 페이지에 자바빈즈를 설정합니다
setProperty <jsp:setProperty --- /> 자바빈즈의 프로퍼티 값을 설정합니다
getProperty <jsp:getProperty --- /> 자바빈즈의 프로퍼티 값을 얻어옵니다
param <jsp:param --- /> <jsp:forward>, <jsp:include>. <jsp:plugin> 태그에 인자를 추가
plugin <jsp:plugin --- /> 웹 브라우저에 자바 애플릿을 실행. 자바 플러그인에 대한 OBJECT 또는 EMBED 태그를 만드는 브라우저별 코드 생성
element <jsp:element ---/> 동적 XML 요소를 설정합니다

 

<jsp:include> 액션 태그

지정한 문서를 태그의 위치에 포함시킴

 

처리 방식

 

<jsp:include> 액션 태그와 include 디렉티브의 차이

비교 항목 액션 태그 디렉티브
처리시간 요청 시간에 처리 JSP 파일을 자바 소스로 변환할 때 처리
기능 별도의 파일로 요청 처리 흐름을 이동 현재 파일에 삽입시킴
데이터 전달 방법 request 기본 객체나 <jsp:param>을 이용한 파라미터 전달 페이지 내의 변수를 선언할 후, 변수에 값 저장
용도 화면의 레이아웃의 일부분을 모듈화할 때 사용  다수의 JSP 페이지에서 공통으로 사용되는 변수를 지정하는 코드나 저작권과 같은 문장을 포함한다

 

<jsp:include> 액션 태그와 모듈화

  • 일반적인 웹 사이트는 상단메뉴, 좌측메뉴, 중앙내용, 하단 메뉴 등의 요소로 구성
  • 상단, 하단 메뉴 - 모든 페이지에서 동일
  • 좌측 메뉴, 중앙 내용 - 페이지에 따라 달라진다

예제

<%@ 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>
<!-- layout.jsp -->
<table border = "1" cellpadding = "0" cellspacing="0" width="400">
<tr>
	<td colspan="2"> 
		<jsp:include page="top.jsp"/>
	</td>
</tr>
<tr>
	<td width="100" valign="top">
		<jsp:include page="left.jsp"/>
	</td>
	<td wdith="300" valign="top">
		<jsp:include page="right.jsp"/>
	</td>
</tr>
<tr>
	<td  colspan="2">
		<jsp:include page="bottom.jsp"/>
	</td>
</tr>
</table>

</body>
</html>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- layout.jsp -->
<table border = "1" cellpadding = "0" cellspacing="0" width="400">
<tr>
	<td colspan="2"> 
		
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- top.jsp -->
상단 메뉴 : <a href="">HOME</a>&nbsp;<a href="">INFO</a>
</body>
</html>
	</td>
</tr>
<tr>
	<td width="100" valign="top">
		
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- left.jsp -->
좌측 메뉴
<br>
<ul>
	<li>sub1</li>
	<li>sub2</li>
	<li>sub3</li>
</ul>
</body>
</html>
	</td>
	<td wdith="300" valign="top">
		
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- right.jsp -->
레이아웃 1
<br><br>

<table width="100%" border="1" cellpadding="10" cellspacing="10">
	<tr>
		<td>
			모델번호
		</td>
		<td>
			MQ7E2KHA
		</td>
	</tr>
	<tr>
		<td>
			가격
		</td>
		<td>
			1,000,000원
		</td>
	</tr>
</table>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- rightSub.jsp -->

<table width="100%" border="1" cellpadding="10" cellspacing="10">
	<tr>
		<td>타입</td><td>iPhone</td>
	</tr>
	<tr>
		<td>특징</td>
		<td>
			수려한 디자인

		</td>
	</tr>
</table>
</body>
</html>
</body>
</html>
	</td>
</tr>
<tr>
	<td  colspan="2">
		
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- bottom.jsp -->
하단 메뉴 : 소개 | 도움말 | 약관 | 사이트맵
</body>
</html>
	</td>
</tr>
</table>

</body>
</html>

 


<jsp:forward> 액션 태그

하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달 할 때 사용

 

예제

from.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>
<!-- from.jsp -->
이 페이지는 from.jsp가 생성한 것입니다.
<jsp:forward page="to.jsp"/>

</body>
</html>

to.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>
<!-- to.jsp -->
이 페이지는 to.jsp가 생성한 것 입니다.
</body>
</html>

결과

<jsp:forward> 액션 태그와 출력 버퍼

 

'JSP공부' 카테고리의 다른 글

표현 언어 Expression Language  (0) 2024.10.04
JavaBeans 자바빈  (0) 2024.10.04
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03
JSP 개요  (1) 2024.10.02
2024-10-03 02:02:10

JSP 

  • 서블릿의 단점을 보완하기 위한 스크립트 방식의 표준 기술
  • 서버 쪽 모듈을 개발하기 위한 기술
  • JSP 기본 구조
    • HTML 문서 사이에 Java 문법의 코드가 삽입되는 형태로 작성된다
  • 실행
    • JSP 페이지에 있는 HTML 코드는 웹 브라우저 그대로 전송
    • JSP 문법의 코드는 웹 컨테이너 쪽에서 실행되고 그 결과만 웹 브라우저로 전송

- JSP 처리 과정

 

- JSP 구성 요소

  • 디렉티브 (Directive) - 지시자

  • <%@ 로 시작해서 %>로 끝난다
  • JSP 페이지에 대한 정보를 지정한다
  • JSP가 생성하는 문 거의 타입, 출력, 버퍼의 크기, 에러 페이지 등
  • JSP 페이지에서 필요로 하는 정보를 설정한다
  • Page 지시자
  • JSP 페이지가 어떤 문서를 생성하는지
  • 어떤 자바 클래스를 사용하는지 
  • 세션에 참여하는지 
  • 출력 버퍼의 존재 여부 등을 알 수 있음
속성 설명 기본 값
language 현재 JSP 페이지가 사용할 프로그래밍 언어를 설정 java
contentType 현재 JSP 페이지가 생성할 문서의 콘텐츠 유형을 설정 text/html
pageEncoding 현재 JSP 페이지의 문자 인코딩을 설정 ISO-8859-1
import
현재 JSP 페이지가 사용할 자바 클래스를 설정  
info 
현재 JSP 페이지에 대한 설명을 설정  
  • include 지시자
  • JSP 페이지의 특정 영역에 다른 문서를 포함시킨다.
  • 불러올 대상은 file 속성을 이용해서 지정한다
  • 지정된 속성 값은 지시자가 속하는 JSP 페이지를 기준으로 한 상대적인 URL로 해석된다
<%@ 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>
<!-- Include.jsp -->

<h3>가장 여행하고 싶은 곳은?</h3>
<h4>1.프랑스</h4>
<h4>2.헝가리</h4>
<h4>3.이탈리아</h4>
<h4>4.캐나다</h4>
<h4>5.호주</h4>
<br>
<hr>

<%@ include file="2_dateTime.jsp" %> <!-- 원하는 곳 어디든 파일을 삽입할 수 있음 -->
</body>
</html>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- Include.jsp -->

<h3>가장 여행하고 싶은 곳은?</h3>
<h4>1.프랑스</h4>
<h4>2.헝가리</h4>
<h4>3.이탈리아</h4>
<h4>4.캐나다</h4>
<h4>5.호주</h4>
<br>
<hr>


<!-- include된 dateTime.jsp의 코드 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- dateTime.jsp -->



<h3>
	오늘은 2024 년
		10 월
		3 일입니다
</h3>
<h4>현재 시각 : 03:23:47</h4>

</body>
</html> <!-- 원하는 곳 어디든 파일을 삽입할 수 있음 -->
</body>
</html>

  • 스크립트 요소
  • 스크립틀릿
  • <%로 시작해서 %>로 끝난다.
  • JSP 페이지에서 JAVA 코드를 실행할 때 사용

 

  • 표현식
  • <%= 로 시작해서 %>로 끝난다
  • 사이에 자바식이 들어갈 수 있다.
  • 상수나 변수 이름 하나로 구성될 수도 앗다.
  • 연산자를 포함할 수도 있다.
  • 리턴값이 있는 메서드 호출이 가능하다.

 

  • 선언부
  • <%!로 시작해서 %>로 끝난다.
  • 사이에 자바 메서드 작성이 가능하다
  • 선언부의 함수는 자바 메서드 문법 구조와 동일하다

스크립트 변수의 범위

  • 스크립틀릿에서 선언된 변수
  • 지역변수에 해당
  • 별도로 선언된 메소드 부분에서는 사용 불가능
  • 자동 초기화가 안되어 반드시 초기화해줘야 함
  •  선언문에서 선언된 변수나 메서드
  • 전역변수에 해당된다
  • JSP 페이지 내 어디에서든지 사용 가능
  • 자동 초기화

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<%@ 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>
<!--  Variable Range -->
<!-- 
    선언부 - 전역변수
    스크립틀릿 - 지역변수
 -->
<h3> 변수의 범위</h3>
<%!
    // 선언부
    String strVar;
%>
<%!
    // 선언부 - 메소드 선언
    String getStr() {
    strVar = "전역변수입니다";
    return strVar;
}
%>
<%
    // 스크립틀릿
    String strVar2 = "지역변수입니다.";
// 주석처리 하면 밑의 표현식이 에러가 남(자동초기화를 지원하지 않아서!)
%>
<%!
/*     String getStr2() {
    //return strVar2; 지역변수를 다른 메소드에서 반환할  없다.
    return "a";
} */
%>
<br>
선언문에서 선언한 변수 strVar = <%= getStr() %>
<br>
스트립틀릿에서 선언한 변수 strVar2 = <%= strVar2 %><!-- //화면에 출력하는거 까지는 괜찮다 -->
 
</body>
</html>
cs

 


JSP 기본 객체

JSP는 웹 애플리케이션 프로그래밍을 하는데 필요한 기능을 제공

기본 객체 실제 타입 설명
request javax.servlet.http.HttpServletRequest 클라이언트의 요청 정보를 저장
response javax.servlet.http.HttpServletResponse 응답 정보를 저장
pageContext javax.servlet.jsp.PageContext JSP 페이지에 대한 정보를 저장
session javax.servlet.http.HttpSession HTTP 세션 정보를 저장

 

request 기본 객체

  • 속성
  •  JSP 페이지에서 가장 많이 사용되는 기본 객체
  • 웹 브라우저의 요청 정보를 제공
  • 기능
  • 클라이언트와 관련된 정보 읽기
  • 서버와 관련된 정보 읽기
  • 클라이언트가 전송한 요청 파라미터 읽기
  • 클라이언트가 전송한 쿠키 읽기
  • 속성 처리
메소드 리턴 타입 설명
클라이언트 및 서버 정보 관련 메소드
getRemoteAddr() String 웹 서버에 연결한 클라이언트의 IP 주소를 구한다
getContentLength() Long 클라이언트가 전송한 요청 정보의 길이를 구한다
getCharacterEncoding() String 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구한다
getContentType() String 클라이언트가 요청 정보를 전송할 때 사용한 컨텐츠 타입을 구한다
getMethod() String 웹 브라우저가 요청한 URL에서 경로를 구한다
요청 파라미터 관련 메소드
getParameter(String name) String 이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 null을 리턴한다
getParameterValues(String name) String[] 이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴한다
getParameterNames() java.util.Enumeration 웹 브라우저가 전송한 파라미터의 이름 목록을 구한다
getParameterMap() java.util.Map 웹 브라우저가 전송한 파라미터의 맵을 구한다. 맵은 <파라미터 이름, 값>의 쌍으로 구성된다.
Header 관련 메소드
getHeader(String name) String 지정한 이름의 헤더 값을 구한다
getHeaders(String name) java.util.Enumeration 지정한 이름의 헤더 목록을 구한다
getHeaderNames() java.util.Enumeration 모든 헤더의 이름을 구한다
getIntHeader(String name) int 지정한 헤더 값을 정수 값으로 읽어온다
getDateHeader(String name) long 지정한 헤더의 값을 시간 값으로 읽어온다

 

response 기본 객체

  • 속성
    •  request 기본 객체와 반대 기능을 수행
    • 웹 브라우저에 보내는 응답 정보를 담는다
  • 기능
    • 헤더 정보 입력
    • 리다이렉트 기능
메소드 설명
addDateHeader(String name, long date) name 헤더에 date를 추가한다
addHeader(String name, String value) name 헤더에 value를 추가한다
addIntHeader(String name, int value) name 헤더에 정수 값 value를 추가한다
setDateHeader(String name, long date) name 헤더의 값을 value로 지정한다
setHeader(String name, String value) name 헤더의 값을 value로 지정한다
setIntHeader(String name, int value) name 헤더의 값을 정수 값 value로 지정한다
containsHeader(String name) 이름이 name인 헤더를 포함하고 있으면 true, 그렇지 않으면 false 라턴

 

'JSP공부' 카테고리의 다른 글

표현 언어 Expression Language  (0) 2024.10.04
JavaBeans 자바빈  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
Servlet  (0) 2024.10.03
JSP 개요  (1) 2024.10.02
2024-10-03 00:31:58

Servlet

- JSP 표준이 나오기 전에 만들어진 표준

- Java에서 웹 어플리케이션을 개발 할 수 있도록 하기 위해 만들어짐

- Java 클래스를 뭽에서 호출 및 실행할 수 있도록 한 표준

- Javax.Servlet.HttpSerVlet을 상속받아 작성

 

SerVlet 호출 과정

GET

  • 주소에 매개변수가 붙어서 호출하는 방식 (?으로 구분)
  • <a> 태그를 이용해서 페이지를 호출하는 경우
  • 자바스크립트를 이용해서 호출하는 경우
  • <form> 태그에서 명시적으로 GET방식으로 호출하는 경우
  • 데이터는 최대 255자 이내이며, 보안성이 취약
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 
<br>
<h1>get 방식으로 부르는 페이지 입니다.</h1>
<br>
 
<form action = "HelloWorld" method = "get">
    <input type = "submit" value ="확인"> 
</form>
 
 
 
</body>
</html>
cs

POST

  • = <form> 태그에서 명시적으로 POST방식으로 호출하는 경우
  • = 주소에 매개변수가 붙어있지 않아 보안성이 우수
  • = 데이터의 크기에 제한이 없음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 
<h1>post 방식으로 부르는 페이지입니다.</h1>
<br>
 
<form action="HelloWorld" method="post">
    <input type="submit" value="확인">
</form>
 
</body>
</html>
cs

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package week2;
 
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/HelloWorld"// action이 여기에 있는 내용을 찾음
public class HelloWorld extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public HelloWorld() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // get 방식으로 호출한 경우 실행하는 메소드
        response.setContentType("text/html; charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>Hello World Servlet doGet() 페이지입니다.</h1>");
        out.println("</body></html>");
        out.close();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       // post 방식으로 호출한 경우 실행하는 메소드
        response.setContentType("text/html; charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>Hello World Servlet doPost() 페이지입니다.</h1>");
        out.println("</body></html>");
        out.close();
    }
}
cs

 

결과

 

 

response.setContentType("text/html;Charset=utf-8"); 

request.setCharacterEncoding("utf-8");

// Post방식으로 매개변수를 줄 때 반드시 써줘야 한다.

 

 

 

'JSP공부' 카테고리의 다른 글

표현 언어 Expression Language  (0) 2024.10.04
JavaBeans 자바빈  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
JSP 개요  (1) 2024.10.02
2024-10-02 23:31:23

클라이언트와 서버 구상도

구성요소 역할
웹 서버 웹 브라우저의 요청을 받아서 결과를 반환.
프로그램 처리가 필요하다면 웹 어플리케이션 서버를 이용하거나 프로그램을 호출하여 처리.
HTML, CSS, JavaScript를 웹 브라우저에게 반환.
어플리케이션 서버 필요한 기능을 수행하고, 웹 서버에게 결과를 전달.
데이터 베이스 데이터를 저장함.

 

웹 서비스 요청 / 응답

HTTP 프로토콜 이용

- TCP/IP 기반으로 웹에서 사용하는 프로토콜로, 요청(request)과 응답(response)데이터를 전송하는 방식

 

HTTP 요청 구성 요소

- HTTP 메소드(실행할 액션)

- 접근하고자 하는 URL

- form  파라미터

 

HTTP 응답 구성 요소

- 상태 코드

- 컨텐츠 타입 및 내용

 

URL

클라이언트가 웹 서버에 존재하는 자원(정보, 파일)을 검색하고 해석하는데 필요한 네트워크 서비스의 표현식

[프로토콜]://[호스트][:포트]/[경로][파일명][.확장자][쿼리문자열]

ex) http://naver.com:80/index.html

포트 번호는 프로토콜의 기본 포트인 경우 생략이 가능하다.

 

어플리케이션 프로그램 실행     CGI VS WAS

 

CGI 방식 

- 웹 서버가 어플리케이션을 직접 호출하는 구조.

- 하나의 요청에 하나의 프로세스를 만들고 처리하는 구조.

 

WAS 방식

- 웹 서버가 직접 어플리케이션 프로그램을 처리하는  게 아닌, 웹 어플리케이션 서버(was)에 처리를 넘기고, was가 프로그램을 처리.

- 여러명의 사용자가 같은 페이지를 요청하면, 하나의 어플리케이션에 하나의 프로세스만 생성하여, 사용자의 요청을 스레드로 처리함.

 

JSP

기능 

- DBMS와 같은 Back-End Server와 연동하여 데이터를 가공한 결과를 웹 상의 최종 사용자에게 전달 가능

- 여러 조건에 따라 표출 할 수 있도록 동적 처리 기능 제공

 

특징

- 객체지향적

- 플랫폼 독립적

- 네트워크 지향적

- 강력한 보안성

- 친숙한 코드

-멀티 스레드 기능

'JSP공부' 카테고리의 다른 글

표현 언어 Expression Language  (0) 2024.10.04
JavaBeans 자바빈  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03