TODAY TOTAL
Back-End (44)
[JSP] 9. 표준 태그 라이브러리(JSTL)

 

1. 표준 태그 라이브러리(JSTL)

 

JSP는 스크립트릿과 표현식 등의 스크립트 코드와 HTML, 코드가 뒤섞이게 되는데, 이렇게

뒤섞인 JSP 코드는 알아보기가 쉽지 않다. 예를 들면

 

<%
	if (list.size() > 0) {
    for(int i = 0; i <list.size();i++ {
    Data data = (Data)list.get(i);
%>

<%= data.getTitle() %>
	...
<%
 } else {
%>
	데이터가없습니다.
<%
	}
%>

이런 경우 스크립트 코드와 HTML 코드가 섞이면서 가독성이 엄청 나빠진다

 

그러면 이렇게 바꿔보면?

 

<ctag:if test="!empty ${list}">
  <ctag:foreach varName="data" list=’’${list}">
	${data;title}
  </ctg:foreach>
</ctag:if">
<ctag:iftest=”empty ${list}">
	데이터가없습니다.
<ctag>

와 진짜 깔끔해 간결, 가독성도 좋다. 이것이 커스텀 태그(ctag)이다

 

 

색칠을 칠한 것은 많이 사용한다.

 

 

  • 코어 태그

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

 

코어 태그를 사용할려면

<%@ taglib prefix = "c" url = "http://java.sun.com/jsp/jstl/core" %> 를 추가해줘야 한다.

 

 

<c:forEach> 태그

 

forEach 태그는 배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리 할 때 사용된다.

 

 

기본적인 사용방법

<c:forEach var = "변수" items = "아이템">
...

<tr>
	<td align = "right" bgcolor = "#ffffff">
    ${변수사용}
    </td>
...
</c:forEach>

 

(%@ page contentType = ”text/html; charset=utf-8” %>
<%@page import="java.util.HashMap” %>
<%@ taglib prefix=”c” uri=”http: //java.sun.com/jsp/jstl/core” %>
<%
HashMap<String,Object> mapData =new HashMap<String,Object>();
mapData.put(’'name”, ”최범균");

	mapData.put('today”, new java.util.Date());
%>
<c:set var=”intArray” value=”<%= new int[] {1,2,3,4,5} %>” />
<c:set var=”map” value=”<%= mapD。t。%>” />
<html>
<head><title>forEach 태그</title> </head>
<body>
<h4>1부터 100까지 홀수의 합</h4>
<c:set var=”sum” value=”O” />
<c:forEach var=”i” begin="!" end=”100" step=”2”>
//변수 i의 값을 1부터 100까지 2씩 증가한다.

<c:set var=”sum” value=”${sum+ i}” />
</c:forEach>
결과 =${sum}

<h4>구구단: 4만</h4)
<ul>
<c:forEach var=”i” begin=”l” end=”9”>
//변수 i의 값을 1부터 9까지 1씩 증가한다.

<li>4 * $에 = ${4 * i}
</c:forEach>
</ul>

<h4>int형 배열 </h4>

<c:forEach v。r="i” items=”${intArray}” begin="2” end=”4” varStatus=”status”>
//배열 intArray의 인덱스 2부터 4까지의 요소의 값을 변수 i에 저장한다.
//루프상태 값을 변수 status에 저장한다.

${status.index}-${status.count}-[${i}] <br />
</c:forEach>

<h4>Map</h4>

<c:forEach var=”i” items=”${map}'>
//Map의 각 원소를 나타내는 Map,Entry를 i에 저장한다.

${i.key} = ${i.value}<br>
</c:forEach>
</body>
</html>

 

<c:forEach> 태그의 속성 설명 요약

 

<c:forTokens> 태그

 

forTokens 태그는 java.util.StringTokenizer 클래스와 같은 기능을 제공하는 태그

 

<%@ page contentType = ”text/html; charset=utf 8” %>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp /jstl/ core" %>

<html>
<head><title>forTokens 태그</title></head>
<body>

	콤마와 점을 구분자로 사용:<br>
	<c:forTokens var=”token”
		items=”빨강색,주황색,노란색,초록색,파랑색,남색.보라색”
		delims=”,.’>
	${token}
	<fc:forTokens)

</body>
</html>

 

  • 국제화 태그

국제화 태그는 특정지역에 따라 알맞은 메시지를 출력해야 할 때 사용한다.

한글 브라우저에서는 한글메시지 출력, 영문 브라우저에서는 영문 메시지를 출력해야 할때 국제화 태그를 사용한다.

 

 

국제화 태그 라이브러리

  • 숫자 및 날짜 포맷팅 처리 태그

 

숫자와 날짜를 포맷팅할 때 사용하는 태그는 다음과 같다.

 

 

<fmt:formatNumber> 태그

 

숫자를 양식에 맞춰 출력한다.

 

 

<fmt:formatNumber value = "숫자값" [type = "값타입"] [pattern="패턴"] 
[currentCode="통화코드"] [currencySymbol="통화심볼"] 
[groupingUsed = "(true | false)"] [var = "변수명"][scope = "영역"] />

 

 

<fmt:formatDate> 태그

 

날짜 정보를 담고 있는 객체를 포멧팅하여 출력할 때 사용

 

 

<fmt:formatDate value = "날짜값"
[type = "타입"] [dateStyle = "날짜스타일"] [timeStyle = "시간스타일"]
[pattern = "패턴"] [tumeZone="타임존"]
[var = "변수명"][scope = "영역"] />

 

 

 

 

 

 

'Back-End > JSP' 카테고리의 다른 글

[JSP] 회원 정보 만들기-1  (0) 2021.07.20
[JSP] 회원 정보 만들기 전  (0) 2021.07.16
[JSP] 7. 표현 언어(Expression Language)  (1) 2021.06.19
[JSP] 6. 쿠키와 세션  (1) 2021.06.12
[JSP] 5. 자바빈과 <jsp:useBean> 액션 태그  (0) 2021.06.09
  Comments,     Trackbacks
[JSP] 7. 표현 언어(Expression Language)

 

1. 표현 언어(Expression Language)

 

표현 언어는 값을 표현하는 데 사용하는 스크립트 언어로, JSP의 스크립트 요소를 보완하는 역할을 한다.

 

  • JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
  • 수치 연산, 관계 연산, 논리 연산자 제공
  • 자바 클래스 메서드 호출 기능 제공
  • 쿠키, 기본 객체의 속성 등 JSP를 위한 표현 언어의 기본 객체 제공
  • 람다식을 이용한 함수 정의와 실행(EL 3.0)
  • 스트림 API를 통한 컬렉션 처리 (EL 3.0)
  • 정적 메서드 실행 (EL 3.0)

 

굳이 왜 쓰지?

 

표현언어(EL)를 사용하면 JSP 표현식을 사용하는 것보다 간결한 코드를 사용해서 값을 출력할 수 있다.

 

<%--표현식 -->
<%= member.getAddress().getZipcode() %>

<%--표현언어 -->
${member.address.zipcode}

실제 프로젝트에서는 표현식보다 표현 언어를 사용한다고 한다.

하지만 아직 잘 모르겠다 ㅜ 그래도 엄청 간결해져서 코드가 깔끔할 것같다.

 

EL은 이렇게 쓴다 ${expr}

expr부분은 문법에 따라 값을 표현하는 식

액션태그나 커스텀 태그뿐만 아니라 비스크립트 요소 부분에서도 값을 출력하기 위해 사용 할 수 있다.

 

EL에서 사용할 수 있는 기본 객체

 

<%@ page contentType = ”text/html; charset=utf-8” %>
<%
	request. setAttribute("name","최범균");
%>
<html>
<head> <title> EL Object</title> </head>
<body>

요청 URI: ${pageContext.request. request URI} <br>

request의 name 속성: ${requestScope.name} <br>
code 파라미터: ${param. code}

</body>
</html>

EL언어는 객체에 저장된 값에 접근할 때 점(.)이나 대괄호([])를 사용한다.

 

 

  • 비교연산자

문자열을 비교할 경우 String.compareTo() 메서드를 사용한다.

 

${someValue == '2004'}

--------------------------------------------------------

(someValue.compareTo("2004") == 0)과 같은 의미

 

 

  • 비교 선택 연산자

<수식> ? <값1> : <값2>

 

<수식>의 결과값이 true이면 <값1>을 리턴하고, false이면 <값2>를 리턴한다.

 

 

  • 컬렉션
<%
	List<Long> values = Arrays.asList(1L,2L,5L,10L); //List 생성 위한 자바 코드
%>
<%-- vals 변수에 values 값을 할당 --%>
<c:set var = "vals" value = "<%= values %>" />
${myfunc:sum(vals)}

//EL 3.0버전부터 EL식에서 직접 List,Map,Set 타입의 객체를 생성 할 수 있다.

<c:set var = "vals" values = "${[1,2,5,10]}" />
${myfunc:sum(vals)}

//vals가 필요 없다면 더 간단하게 표현 가능

${myfunc:sum([1,2,5,10])}

 

Map 타입의 컬렉션 객체를 생성할 때에는 다음 구문 사용

{'name' : '홍길동','age' : 20}

 


  • 함수를 정의한 TLD 파일 작성

TLD는 Tag Library Descriptor의 약자로서 이 파일은 태그 라이브러리에 대한 설정 정보를 담고 있다.

 

TLD 파일을 작성해야 하고, web.xml 파일도 설정해야 하고, taglib 디렉티브도 설저해야 한다.

메서드를 호출할 때에도 TLD 파일에 설정한 이름을 사용해야 한다.

 

  • 람다식

(파라미터1, 파라미터2) -> EL식

 

a가 b보다 큰 경우 true를 리턴하고 크지 않다면 false를 리턴한다.

 

<a,b> -> a > b ? true : false

 

greaterThan(1,3)을 실행하면, greaterThan에 해당하는 람다식

 

${greaterThan(1,3)} -> 1 > 3 ? true : false -> false

 

람다식은 재귀호출도 가능하다.

 

${factorial = (n) -> n == 1 ? 1 : n * factorial(n-1); "}

${factorial(5) }

 

 

 

  Comments,     Trackbacks
[JSP] 6. 쿠키와 세션

 

 

1. 쿠키(Cookies)

 

 

쿠키는 웹 브라우저가 보관하는 데이터.

바보

웹 브라우저는 웹 서버에 요청을 보낼 때 쿠키를 함께 전송

 

웹 서버는 웹 브라우저가 전송한 쿠키를 사용해서 필요한 데이터를 읽을 수 있다.

 

쿠키는 웹 서버와 웹 브라우저 양쪽에서 생성 할 수 있는데

JSP에서 생성하는 쿠키는 웹서버에서 생성하는 쿠키다.

 

 

쿠키 동작 방식

 

  • 쿠키 생성

 

<%
	Cookie cookie = new Cookie("cookieName", "cookieValue");
    <%-- 쿠키정보를 담고 있는 Cookie 객체를 생성 
    response.addCookie(cookie); --%>
%>

 

쿠키의 유효시간

 

쿠키의 유효시간을 지정해주지 않으면 웹 브라우저를 종료할때 같이 삭제된다.

 

유효시간을 지정하려면 setMaxAge() 메서드를 사용한다. (초단위로 지정)


웹 사이트에 로그인/로그아웃 기능이 있는데 

로그인 상태를 확인할 때 가장 많이 사용하는 것이 '쿠키' 이다.

 

 

  1.  로그인에 성공하면 특정 이름을 갖는 쿠키를 생성한다.
  2. 해당 쿠키가 존재하면 로그인한 상태라고 판단한다.
  3. 로그아웃하면 해당 쿠키를 삭제한다.

 

  • 로그인 처리
<!-- loginForm.jsp -->
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>로그인 폼</title>
</head>
<body>
	
	<form action ="<%=request.getContextPath() %>/member/login.jsp"
	method="post">
	아이디 <input type = "text" name ="id" size ="10">
	암호 <input type = "password" name = "password" size ="10">
	<input type = "submit" value ="로그인">
	</form>
	
</body>
</html>

 

<!-- login.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "util.Cookies" %>
    <%
    	String id = request.getParameter("id");
    	String password = request.getParameter("password");
    	
    	if(id.equals(password)) {
    		<%--ID와 암호가 같으면 로그인에 성공한 것으로 판단 --%>
    		response.addCookie(
    				Cookies.createCookie("AUTH",id,"/",-1));
    	
    	%>
<!DOCTYPE html>
<html>
<head>
<title>로그인 성공</title>
</head>
<body>
	로그인에 성공했습니다.
</body>
</html>
<%
	}else{ //로그인 실패시
%>
	<script>
		alert("로그인에 실패했습니다.");
	history.go(-1);
	</script>
	<%
		}
	%>

 

  • 로그인 여부 판단

 

<!-- loginCheck.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import = "util.Cookies" %>
   <%
   		Cookies cookies = new Cookies(request);
   %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그인 여부 검사</title>
</head>
<body>
	<%
		if(cookies.exists("AUTH")) {
	%>
	아이디 "<%= cookies.getValue("AUTH") %>"로 로그인한 상태
	<%
		}else {
	%>
	로그인하지 않은 상태
	<%
		}
	%>
</body>
</html>

 

  • 로그아웃 처리

 

<!-- logout.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "util.Cookies" %>
<%
	response.addCookies(
			Cookies.createCookies("AUTH","","/",0)
            <%-- 유효시간을 0으로 지정 --%>
			);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>로그아웃</title>
</head>
<body>
	로그아웃하셨습니다.
</body>
</html>

 


2. 세션(Session)

 

 

쿠키와의 차이점은 세션은 웹 브라우저가 아니라 서버에 값을 저장한다

로그인한 사용자 정보를 유지하기 위한 목적으로 세션을 사용

 

쿠키는 웹 브라우저가 보관하는 데이터 / 세션은 서버에 값을 저장

 

세션은 웹 브라우저와 연관된 서버 영역 저장 공간이다

 

  • 세션 생성
<%@ page session = "true" %>
<!-- true로 지정해주면 세션 생성 -->
<%
	...
    session.setAttribute("userInfo", userInfo);
    ...
%>

 

  • 세션 기본 객체

세션을 사용한다는 것은 기본 객체를 사용한다는 것을 말함

 

메서드 리턴 타입 설명
getId() String 세션의 고유 ID를 구한다. (세션 ID)
getCreationTime() long 세션의 생성된 시간을 구한다 (단위, 1/1000초
getLastAccessedTime() long 웹 브라우저가 가장 마지막에 세션에 접근한 시간을 구한다. (단위, 1/1000초)

 

  • 기본 객체 속성 사용
<!-- setMemberInfo.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%  session.setAttribute("MEMBERID", "madvirus");
	session.setAttribute("NAME", "최범균");
    <%-- 세션의 속성에 정보를 저장 --%>
%>
<!DOCTYPE html>
<html>
<head>
<title>세션에 정보 저장</title>
</head>
<body>
	세션에 정보를 저장하였습니다.
</body>
</html>

 

  • 세션 종료

 

<!-- closeSession.jsp -->

<%@ page contentType = "text/html; charset = UTF-8" %>
<%
	session.invalidate();
    <%-- 세션유지할 필요없으면 세션을 종료 --%>
%>
<html>
<head><title>세션 종료</title></head>
<body>
	세션을 종료
</body>
</html>
  Comments,     Trackbacks
[JSP] 5. 자바빈과 <jsp:useBean> 액션 태그

 

 

1. 자바빈(JavaBeans)

 

속성,변경 이벤트, 객체 직렬화를 위한 표준. JSP에서는 속성을 표현하기 위한 용도로 사용.

복잡한 자바코드를 줄이고 프로그램 재사용성을 증가시킨다.

 

  • 멤버변수마다 Get,Set이 존재해야 한다
  • 생성자는 매개변수가 존재하지 않아야 한다

 

<jsp:userBean> 

 

<jsp:useBean id="이름" class ="자바빈 class 명" scope ="사용범위"/>

 

<jsp:setProperty>

 

<jsp:setProperty name ="이름" property="속성명" value = "설정할 값"/>

<jsp:setProperty name = "이름"property="속성명" param = "파라미터명"/>

 

package yoon;

import java.util.Date;

public class MemberInfo {
	
	
	private String id;
	private String password;
	private String name;
	private Date registerDate;
	private String email;
	
	
	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 Date getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(Date registerDate) {
		this.registerDate = registerDate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
}

 

<jsp:setProperty>와 <jsp:getProperty> 예제

 

//Form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>회원가입 입력 폼 </title>
</head>
<body>
<form action="/chap08/processJoining.jsp" method="POST">
	<table border = "1" cellpadding="0" cellspacing="0">
	
<tr>
	<td>아이디</td>
	<td colspan="3"><input type = "text" name = "id" size = "10"></td>
	</tr>
	<tr>
		<td>이름 </td>
		<td><input type = "text" name = "name" size = "10"></td>
		<td>이메일</td>
		<td><input type = "text" name = "email" size = "10"></td>
		</tr>
		<tr>
			<td colspan = "4" align ="center">
			<input type="submit" value ="회원가입">
			</td>
			</tr>
		</table>
	</form>
</body>
</html>

//

POST방식으로 ↓jsp파일로 전달

전달받은 데이터를 MemberInfo 클래스의 객체에 저장해서 화면에 출력한다.

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html>
<%
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="memberInfo" class="yoon.MemberInfo" />
<jsp:setProperty name="memberInfo" property="*" />
//파라미터 값을 memberInfo 자바빈 객체의 프로퍼티 값으로 저장한다.
<jsp:setProperty name="memberInfo" property="password"
	value="<%=memberInfo.getId()%>" />
    
<html>
<head>
//

<meta charset="UTF-KR">
<title>가입</title>
</head>
<body>

	<table width="400" border="1" cellpadding="0" cellspacing="0">
		<tr>
			<td>아이디</td>
			<td><jsp:getProperty name="memberInfo" property="id" /></td>
            //

			<td>암호</td>
			<td><jsp:getProperty name="memberInfo" property="password" /></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><jsp:getProperty name="memberInfo" property="name" /></td>
			<td>이메일</td>
			<td><jsp:getProperty name="memberInfo" property="email" /></td>
		</tr>
	</table>
</body>
</html>

 

 

'Back-End > JSP' 카테고리의 다른 글

[JSP] 7. 표현 언어(Expression Language)  (1) 2021.06.19
[JSP] 6. 쿠키와 세션  (1) 2021.06.12
[JSP] 4. 페이지 모듈화와 요청 흐름 제어  (0) 2021.06.09
[JSP] 3. 에러처리  (0) 2021.06.06
[JSP] 2. 버퍼와 기본객체  (0) 2021.06.05
  Comments,     Trackbacks
[JSP] 4. 페이지 모듈화와 요청 흐름 제어
1. <jsp.include> 액션 태그

 

jsp.include는 화면 구성 요소의 코드 중복 문제를 없앨 때 사용할 수 있는 것이

바로 <jsp.include> 액션 태그이다.

 

<jsp.include> 액션 태그의 동작 방식

  1. main.jsp가 웹 브라우저의 요청을 받는다.
  2. [출력 내용A]를 출력 버퍼에 저장한다.
  3. <jsp.include>가 실행되면 요청 흐름을 sub.jsp로 이동한다.
  4. [출력 내용B]를 출력 버퍼에 저장한다.
  5. sub.jsp의 실행이 끝나면 요청 흐름이 다시 main.jsp의 <jsp.include>로 돌아온다.
  6. <jsp.include> 이후 부분인 [출력 내용C]를 출력 버퍼에 저장한다.
  7. 출력 버퍼의 내용을 응답 데이터를 전송한다.

 

<jsp.include page = "포함할페이지" flush = "true" />

page : 포함할 페이지 경로를 지정

flush : true면 출력 버퍼를 플러시, false는 반대

 

// info.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>INFO</title>
</head>
<body>
	<table width =100% border = 1 cellpadding=0 cellspacing=0>
<tr>
	<td> 제품번호</td> <td>XXXX</td>
</tr>
<tr>
	<td> 가격</td> <td>10,000원</td>
</tr>
</table>

<jsp:include page="infoSub.jsp" flush ="false">
	<jsp:param value="A" name="type"/> <!--info.jsp에 이름이 타입이고 값이 A인 파라미터를 추가로 전달한다.  -->
</jsp:include>
</body>
</html>

 

//infoSub.jsp

<%@ contentType="text/html; charset=UTF-8"%>
<%

	String type = request.getParameter("type"); // info.jsp에서 전달한 type 파라미터의 값을 읽어온다
	if(type == null) { // type 파라미터가 null이면 반환한다.
		return;
	}
%>
<br>
<table width = "100%" border = "1" cellpadding="0" cellspacing="0">
<tr>
	<td>타입</td>
	<td><b><%= type %> </b> </td>
</tr>
<tr>
	<td>특징</td>
	<td>
<% if(type.equals("A")) { %>
	강한 내구성.
<% } else if(type.equals("B")) { %>
	뛰어난 대처 능력
	<% } %>
		</td>
	</tr>
</table>

 

<jsp:param>액션 태그는 <jsp:include> 액션 태그의 자식 태그로 추가한다.

<jsp:param> 의 name 속성과 value 속성은 각각 포함할 페이지에 새로 추가할 파라미터의 이름과 값을 입력한다.

 

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

 

 

<jsp:forward> 액션 태그는 하나의 JSP 페이지에서 다른 JSP 페이지로 요청 처리를 전달할때 사용

<jsp:forward>의 요청 흐름

  1. 웹 브라우저 요청을 from.jsp에 전달한다.
  2. from.jsp는 <jsp:forward> 액션 태그를 실행한다.
  3. <jsp:forward> 액션 태그를 실행하면 요청 흐름이 to.jsp로 이동한다.
  4. 요청 흐름이 이동할 때 from.jsp에서 사용한 request 기본 객체와 response 기본 객체가 to.jsp로 전달
  5. to.jsp가 응답 결과를 생성한다.
  6. to.jsp가 생성한 결과가 웹 브라우저에 전달된다.

 

<jsp:forward page = "이동할 페이지"  />

 

 

'Back-End > JSP' 카테고리의 다른 글

[JSP] 6. 쿠키와 세션  (1) 2021.06.12
[JSP] 5. 자바빈과 <jsp:useBean> 액션 태그  (0) 2021.06.09
[JSP] 3. 에러처리  (0) 2021.06.06
[JSP] 2. 버퍼와 기본객체  (0) 2021.06.05
[JSP] 1. 기본 코드 구조와 request,response 처리  (0) 2021.06.05
  Comments,     Trackbacks
[Java] 2. 조건문과 반복문

 

 

1. 조건문

 

 

if문

if (조건식) {

실행문;

}

 

int score =93;

if(score >= 90) {
system.out.println("점수가 90보다 큽니다.");
system.out.println("등급은 A 입니다.");
}else if(score >= 80) { if 말고 또 써줄땐 else if
system.out.println("점수가 80~90보다 큽니다.");
system.out.println("등급은 A 입니다.");
}else //그 나머지들을 출력합니다. 
system.out.println("점수가 형편없습니다.");
system.out.println("등급은 D 입니다.);
}

 


switch문

switch(변수) {

case 값1 :

break;

 

clase 값2 :

break;

 

default:

 

String yyeo = "C";

		switch(yyeo) {
		case "A":
		case "a": //결과가 같은거면 같이 써도 된다.
		System.out.println("우수회원");
		break;
		case "B":
		System.out.println("정회원");
		break; // "B"면 멈춰!
		default: //나머지
			System.out.println("준회원");
		}

 

for문

for(초기화식;조건식;증감식){

실행문

}

//중첩으로 써도 된다.

//짝수만 골라내기
for(int i=1; i < 10; i++) {
			if(i % 2 != 0){
		    	continue; // 2로 나눠서 0이 아닌건 넘어가기
			}
			System.out.println(i);
		}

 

while문

while(조건식) {

실행문;

 

int sum = 0;
		int i = 1;
		
		while(i<=100) { //i를 100까지 반복
			sum += i;
			i++;
		}
		System.out.println("1~" + (i-1) + "합 : " + sum);
        
//do-while문
do {
			sum += i;
			i++;
		}while(i<=100);
		System.out.println("1~" + (i-1) + "합 : " + sum);
        
        
        

둘 다 결과값은 같지만, while문은 조건문을 검사 후 루프를 돌지만

do-while문은 먼저 루프를 돌고 조건을 검사한다.

 

'Back-End > Java' 카테고리의 다른 글

[Java]1. 변수와 타입  (0) 2021.06.03
[Java] 0. 첫걸음에 대한 준비  (0) 2021.06.02
  Comments,     Trackbacks
[JSP] 3. 에러처리

 

1. 에러페이지는 왜 표시할까?

 

개발과정에서 오류 내용은 어떤 에러인지를 확인하고 바로 잡을 수 있기 때문에 

에러 화면을 보는 것이 도움이 된다.

 

하지만 사용자 입장에선 썩 좋진 않다. 신뢰하지 않게 되기도 하고 일부 코드가

노출 가능성이 있기 떄문에 보안상으로도 좋지 않다.

 

에러페이지를 노출하고 싶지 않다면 try-catch를 이용해 오류마다 응답을 생성

할수 있다.

 

<%@ page contentType = ”text/html; charset=utf-8” %>
<html>
<head><title> 파라미터 출력 </title></head>
<body>

name 파라미터 값:
<% try { %>
’ <%= request. getParameter('name"). toUppercase() %> <%-- 오류 발생 --%>
<%} catch(Exception ex) { %>
name 파라미터가 올바르지 않습니다. <%-- 오류가 발생하면 출력된다 --%>
<%}%>
<body>
</html>

 

 

(%@ page isErrorPage = ”true” %>

isErrorPage 속성값을 "true"로 지정하면 JSP페이지는 에러페이지가 된다.

exception 객체를 이용할 수 있게 되어 예외에 대한 정보를 얻을 수 있다.

 

 

2. 응답상태 코드별로 작성 

 

<error-page>
	<error-code>404</error-code>
	<location>/error/error404.jsp</location>
</error-page>

WEB-INF\web.xml에 넣기

 

 

3. 버퍼와 에러페이지

 

에러페이지는 버퍼가 플러시 되기 전에 처리되어야 함

오류가 발생하기 전에 버퍼가 플러시 될 가능성이 있다면 버퍼 크기를 늘려서

에러가 발생하기 전에 버퍼가 플러시 되지 않도록 해야 한다.

  Comments,     Trackbacks
[JSP] 2. 버퍼와 기본객체

 

 

1.JSP 처리 과정

 

JSP 처리 과정

 

WAS(Web Application Server)는 웹 서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현 하여

다양한 역할을 수행할 수 있는 서버를 말한다.

또 여기서 웹 컨테이너란? 클라이언트의 요청이 있을 때 내부의 프로그램을 통해 결과를 만들어내고 이것을

다시 클라이언트에 전달해주는 역할을 하는 것이 웹 컨테이너이다.

JSP에 해당하는 서블릿이 존재하지 않을 경우

- JSP 페이지로부터 자바 코드를 생성한다.

- 자바 코드를 컴파일해서 서블릿 클래스를 생성한다.

- 서블릿에 클라이언트 요청을 전달한다.

- 서블릿이 요청을 처리한 결과를 응답으로 생성한다.

- 응답을 웹 브라우저에 전송한다.

JSP에 해당하는 서블릿이 존재하는 경우 ( 1.1 ~ 1.3 거친 경우)

- 서블릿에 클라이언트 요청을 전달한다.

- 서블릿이 요청을 처리한 결과를 응답으로 생성한다.

- 응답을 웹 브라우저에 전송한다.

즉, JSP 페이지를 요청할 때에는 JSP를 직접 실행하는 것이 아니라, JSP를 자바 소스 코드로 변환한 뒤

컴파일해서 생성한 서블릿을 실행하는 것이다.

 

버퍼가 다 차면 자동으로 데이터를 전송함

 

버퍼(Buffer)는 응답결과를 저장했다가 한 번에 웹 브라우저에 전송하는 것

<%@ page buffer = "1kb" autoFlush "false" %>

page buffer : 버퍼의 크기를 지정해주는 것이고 default 값은 8kb이다. 안써도 실행은 된다.

autoFlush : (true) 버퍼가 다 차면 버퍼를 플러시 하고 계속 작업

(false) 버퍼가 다 차면 익셉션을 발생시키고 작업 중지

 

2. 기본 객체

 

8가지 기본 객체와 오류페이지만 사용하는 exception 객체

 

기본 객체 8가지와 오직 오류페이지에서만 사용할 수 있는데 exception

out 기본 객체는 언제 사용할까?

 

 

<% if(grade > 10) { %>
<%= gradeStringA %>
<% }else if (grade > 5) { %>
<%= gradeStringB %>
<% } %>
--------------------------------
//if-else블록과 스크립트를 구분하기 위한 태그(<%와 %>)때문에 코드가 복잡하다
//하지만 out 객체를 사용하면 좀 더 간편해진다.
--------------------------------
<%
   if (grade > 10){
       out.println(gradeStringA);
   } else if(grade > 5) {
       out.println(gradeStringB);
   }
%>

 

하지만 out 객체를 직접 응답 결과를 생성한 경우가 많지 않고, 복잡해지는 경우 아니라면

out 객체를 사용하지 않는 것이 좋다.

 

application 기본 객체가 제공하는 자원 접근 메소드

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import = "java.io.*" %>
<html>
<head>
<title>절대 경로 사용하여 자원 읽기</title>
</head>
<body>

<%
	char[] buff = new char[128];
	int len = -1;
	
	String filePath = "C:\Users\ducjs\Desktop\chap5\notice.txt";
//절대 경로
	try(InputStreamReader fr = new InputStreamReader(
	new FileInputStream(filePath), "UTF-8")) {
//notice.txt로부터 내용을 읽어오는 스트림을 생성한다
		while ((len = fr.read(buff)) != -1{
			out.print(new String(buff, O, len));
		}
	} catch(IOException ex) {
		out.println("익셉션 발생 : " + ex.getMessage());
	}
%>

</body>
</html>

 

3.JSP 기본객체와 영역

 

application 기본 객체가 제공하는 자원 접근 메소드

 

- PAGE 영역 : 하나의 JSP 페이지를 처리할 때 사용되는 영역

- REQUEST 영역 : 하나의 HTTP 요청을 처리할 때 사용되는 영역

- SESSION 영역 : 하나의 웹 브라우저와 관련된 영역

- APPLICATION 영역 : 하나의 웹 어플리케이션과 관련된 영역

 

 

application 기본 객체가 제공하는 자원 접근 메소드

 

PAGE 영역은 한번의 클라이언트 요청에 대해서 하나의 JSP 페이지를 범위로 갖는다.

REQUEST 영역은 한본의 웹 브라우저 요청, 브라우저가 웹 서버에 전송하는 요청이

하나의 REQUEST 영역이 됨

SESSION 영역은 하나의 웹 브라우저와 관련되어 있고, 하나의 웹 브라우저와 관련된 모든 요청은

하나의 SESSION 영역에 포함된다.

APPLICATION 영역은 하나의 웹 어플리케이션과 관련된 전체 영역을 포함한다.

모든 요청 그리고 브라우저의 세션은 모두 하나의 APPLICATION 영역에 속함

  Comments,     Trackbacks