JSP #3

jjinny_0609·2023년 3월 22일
0

JSP

목록 보기
3/6

jsp:useBean 액션 태그

JavaBean은 자바 객체를 설계하는 규약 중 하나로, getter/setter 메서드를 포함하는 특별한 클래스입니다. JavaBean은 다른 Java 클래스에서 사용될 수 있도록 속성 값을 캡슐화하고, 재사용성을 높이며, 자바 빈 규약을 따르는 도구들이 이를 적극적으로 활용하며, 자바 기반의 웹 프로그래밍에서 많이 사용됩니다.

JSP에서 자바빈은 주로 웹 페이지에서 사용되는 데이터 모델을 정의하고, 비즈니스 로직을 처리하는 데 사용됩니다. 예를 들어, 회원 정보를 저장하는 자바빈 클래스를 작성하면, JSP에서 이를 활용하여 회원 가입 폼, 로그인 폼 등에서 사용자 입력 값을 저장하고, 데이터베이스에 저장하는 등의 작업을 수행할 수 있습니다.


[예제]
(이클립스 자동완성기능 사용해보기)



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

useBean 액션 태그는 JavaBean 객체를 생성하고 초기화하는 데 사용됩니다. useBean 액션 태그에는 다음과 같은 속성들이 있습니다.

id 속성: 생성된 JavaBean 객체를 참조하기 위한 고유 식별자를 지정합니다.

class 속성: 생성할 JavaBean 객체의 클래스 이름을 지정합니다.

scope 속성: JavaBean 객체의 범위를 지정합니다. JSP에서는 application, session, request, page 등의 범위를 지정할 수 있습니다. 각 범위는 객체의 생명 주기와 접근 권한이 다릅니다.

type 속성: class 속성 대신 JavaBean 객체의 타입을 지정할 수 있습니다. 이 경우, JSP 컨테이너가 타입 정보를 이용하여 자동으로 적절한 클래스를 생성합니다.

beanName 속성: JNDI(Java Naming and Directory Interface)를 이용하여 JavaBean 객체를 검색할 때 사용됩니다. 이 속성은 scope 속성이 지정된 경우 무시됩니다.

예를 들어, 다음과 같은 useBean 액션 태그를 사용하여 JavaBean 객체를 생성할 수 있습니다.

<jsp:useBean id="myBean" class="com.example.MyBean" scope="request"/>

위 태그는 request 범위에서 com.example.MyBean 클래스의 인스턴스를 생성하고, 이를 myBean이라는 이름으로 참조할 수 있도록 합니다.


java Resource/ch08.member.jsp
getter setter 부분

package ch08.member;

import java.util.Date;

public class MemberInfo {
	
	private String id; // id
	private String password; // password
	private String name; // name
	private String address;	// address
	private Date registerDate; // registerDate
	private String email; // 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 String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	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;
	}
}

WebContent/ch08/makeObject.jsp
id와 name값을 적어둔 코드

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<jsp:useBean id="member" class="ch08.member.MemberInfo" scope="request" />
<%
	member.setId("madvirus");
	member.setName("최범균");
%>
<jsp:forward page="useObject.jsp">
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
</body>
</html>

WebContent/ch08/useObject.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<jsp:useBean id="member" class="ch08.member.MemberInfo" scope="request" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%= member.getName() %> (<%=member.getId() %>) 회원님
	안녕하세요.
</body>
</html>

자 이제 실행해보자

useObject.jsp를 직접 실행하면 request 기본 객체에 "member"속성이 존재하지 않으므로 새로운 MebmerInfo 클래스의 객체를 생성한다. 이 경우 useObject.jsp에서 생성 한 프로퍼티 값을 변경하지 않았기 때문에 위와같이 초기값(null)이 출력된다.

<jsp:setProperty> 액션 태그와 <jsp:getProperty> 액션 태그

JSP에서 jsp:setProperty 액션 태그와 jsp:getProperty 액션 태그는 JavaBean 객체의 속성 값을 설정하고 가져오는 데 사용됩니다.

jsp:setProperty 액션 태그는 다음과 같은 속성을 가지며, JavaBean 객체의 속성 값을 설정할 때 사용됩니다.

name 속성: JavaBean 객체의 이름을 지정합니다.
property 속성: 설정할 속성의 이름을 지정합니다.
value 속성: 설정할 속성의 값을 지정합니다. 이 값을 표현식이나 EL(Expression Language)을 사용하여 동적으로 지정할 수도 있습니다.
param 속성: 설정할 속성의 값을 표현식이나 EL을 사용하여 동적으로 지정할 수 있습니다.
예를 들어, 다음과 같은 jsp:setProperty 액션 태그를 사용하여 JavaBean 객체의 속성 값을 설정할 수 있습니다.

<jsp:useBean id="myBean" class="com.example.MyBean" scope="request"/>
<jsp:setProperty name="myBean" property="name" value="John"/>
<jsp:setProperty name="myBean" property="age" param="request.age"/>

위 태그는 request 범위에서 com.example.MyBean 클래스의 인스턴스를 생성하고, 이를 myBean이라는 이름으로 참조합니다. 그리고 myBean 객체의 name 속성 값을 "John"으로, age 속성 값을 request 객체의 "age" 파라미터 값으로 설정합니다.

jsp:getProperty 액션 태그는 다음과 같은 속성을 가지며, JavaBean 객체의 속성 값을 가져올 때 사용됩니다.

  1. name 속성: JavaBean 객체의 이름을 지정합니다.
  2. property 속성: 가져올 속성의 이름을 지정합니다.
  3. param 속성: 가져올 속성의 값을 표현식이나 EL을 사용하여 동적으로 지정할 수 있습니다.

예를 들어, 다음과 같은 jsp:getProperty 액션 태그를 사용하여 JavaBean 객체의 속성 값을 가져올 수 있습니다.

<jsp:useBean id="myBean" class="com.example.MyBean" scope="request"/>
<p>Hello, ${myBean.name}!</p>
<p>Your age is ${jsp:getProperty name="myBean" property="age"}.</p>

위 태그는 request 범위에서 com.example.MyBean 클래스의 인스턴스를 생성하고, 이를 myBean이라는 이름으로 참조합니다. 그리고 myBean 객체의 name 속성 값을 EL을 사용하여 출력하고, age 속성 값을 jsp:getProperty 액션 태그를 사용하여 EL을 통해 출력합니다.

[예제]
membershipFrom.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 입력 폼</title>
</head>
<body>
<form action="procssJoining.jsp" method="post">
	<table>
		<tr>
			<td>아이디</td>
			<td colspan="3"><input type="text" name="id"></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><input type="text" name="name"></td>
			<td>이메일</td>
			<td><input type="text" name="email"></td>
		</tr>
		<tr>
			<td colspan="4">
			<input type="submit" value="회원가입">
			</td>
		</tr>			
	</table>
</form>
</body>
</html>

processJoining.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="MemberInfo" class="ch08.member.MemberInfo" />
<%-- 
<<jsp:setProperty property="id" name="memberInfo"/>
<<jsp:setProperty property="password" name="memberInfo"/>
<<jsp:setProperty property="name" name="memberInfo"/>
<<jsp:setProperty property="address" name="memberInfo"/>
<<jsp:setProperty property="registerDate" name="memberInfo"/>
<<jsp:setProperty property="email" name="memberInfo"/>
위의 setProperty를 아래의 코드 처럼 *을 통해 하나로 표현할 수도 있다! --%>
<jsp:setProperty property="*" name="MemberInfo"/>
<<jsp:setProperty property="password" name="memberInfo" value="<%=MemberInfo.getId()%>"/>

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

</body>
</html>

클라이언트와의 대화 1 : 쿠키

쿠키(Cookie)는 클라이언트의 웹 브라우저에 저장되는 작은 데이터 조각입니다. 쿠키를 사용하면 클라이언트와 서버 간에 상태 정보를 유지하고 공유할 수 있습니다. JSP에서는 쿠키를 다루기 위해 Cookie 클래스를 제공합니다.

쿠키는 이름, 값, 유효 기간, 도메인, 경로 등의 속성으로 구성됩니다. JSP에서는 쿠키를 생성하고 응답에 추가하는 방법과, 클라이언트로부터 전송된 쿠키를 읽어오는 방법을 제공합니다.

쿠키를 생성하고 응답에 추가하는 방법은 다음과 같습니다.

책
---------------------------------------
<%
Cookie myCookie = new Cookie("cookieName", "cookieValue");
response.addCookie(cookie);
%>
---------------------------------------
<%
Cookie myCookie = new Cookie("username", "john");
myCookie.setMaxAge(60*60*24); // 쿠키의 유효 시간을 1일로 설정
response.addCookie(myCookie); // 응답에 쿠키 추가
%>

위 코드는 이름이 "username"이고 값이 "john"인 쿠키를 생성하고, 쿠키의 유효 시간을 1일로 설정하여 응답에 추가합니다.

클라이언트로부터 전송된 쿠키를 읽어오는 방법은 다음과 같습니다.

책
---------------------------------------
<%
Cookie[] cookies = request.getCookies();
%>
---------------------------------------
<%
Cookie[] cookies = request.getCookies(); // 모든 쿠키 가져오기
if (cookies != null) {
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("username")) {
            String username = cookie.getValue(); // 쿠키의 값 가져오기
            // ...
        }
    }
}
%>

위 코드는 모든 쿠키를 가져오고, 그 중에서 이름이 "username"인 쿠키의 값을 가져와서 변수에 저장합니다.

JSP에서 쿠키는 사용자의 로그인 정보, 쇼핑 카트 정보 등을 저장하고 유지하는 데 유용하게 사용됩니다. 그러나 보안에 민감한 정보를 저장하는 데에는 적합하지 않으므로 주의해야 합니다.


쿠키 생성해보기

[예제_쿠키 생성해보기]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLEncoder" %>
<%
	Cookie cookie = new Cookie("name", URLEncoder.encode("최범균","utf-8"));
	response.addCookie(cookie);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠키생성</title>
</head>
<body>
<%= cookie.getName() %> 쿠키의 값 = "<%= cookie.getValue() %>"
</body>
</html>


[예제] **loginForm.jsp** ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Insert title here 아이디 비밀번호 ```

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "java.net.URLEncoder" %>
<%@ page import = "util.Cookies" %>
<%
	String id = request.getParameter("id");
	String password = request.getParameter("password");
	
	//ID와 암호가 같으면 로그인해라(쿠키에 값이 있으면)
	if(id.equals(password)){
		// Cookie 클래스 생성 또는 Cookies클래스 생성
// 		Cookie cookie = new Cookie("id",URLEncoder.encode(id,"utf-8"));
// 		response.addCookie(cookie);
		
		response.addCookie(
				Cookies.createCookie("AUTH", id, "/", -1)
		);
		out.println("로그인 성공");
		}else{
			out.println("로그인 실패");
		}
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

로그인에 성공했습니다.

</body>
</html>

쿠키 확인하는법
개발자도구 - Application - Cookies


세션을 사용한 로그인 상태 유지

session.getAttribute는 object타입으로 받기 때문에 형변환을 해줘야하는걸 확인할 수 있습니다.


표현 언어(Expression Language)

JSP 표현 언어(EL, Expression Language)를 사용하여 Java 코드를 작성하지 않고도 변수나 객체의 값을 출력하거나, 연산을 수행할 수 있습니다. EL은 ${} 기호를 사용하여 값을 출력하거나, ${} 안에서 연산자나 메소드를 사용하여 값을 계산할 수 있습니다.

예를 들어, ${user.name}과 같이 작성하면 user 객체의 name 속성값을 출력할 수 있습니다. 또한, ${1 + 2}와 같이 작성하면 1과 2를 더한 결과를 출력할 수 있습니다.

JSP 표현 언어는 JSP 페이지에서 자주 사용되며, 코드를 간결하고 가독성이 높게 유지할 수 있도록 도와줍니다.

JSP EL(Expression Language)

JSP EL(Expression Language)은 JSP 페이지에서 사용되는 표현 언어입니다. JSP EL은 ${} 기호를 사용하여 JSP 페이지에서 변수나 객체의 값을 출력하거나, 연산을 수행할 수 있습니다.

아래는 JSP EL의 기본 문법입니다.

변수 출력: ${변수명}
속성값 출력: ${객체.속성}
연산: ${식}
예를 들어, ${user.name}와 같이 작성하면 user 객체의 name 속성값을 출력할 수 있으며, ${1 + 2}와 같이 작성하면 1과 2를 더한 결과인 3을 출력할 수 있습니다.

JSP EL은 JSP 페이지에서 자주 사용되며, 코드를 간결하고 가독성이 높게 유지할 수 있도록 도와줍니다. JSP EL은 변수나 객체의 값을 출력하거나 연산을 수행하는데 유용하게 사용됩니다. 또한, JSP EL은 조건문과 반복문을 구현하는데도 사용될 수 있습니다.

JSP EL은 JSP 2.0부터 도입되었으며, 기존의 스크립트릿 코드를 대체하는 형태로 많이 사용되고 있습니다.

JSTL(JSP Standard Tag Library)

JSP 페이지에서 자주 사용되는 기능들을 태그 형태로 제공하여 개발자가 보다 쉽게 JSP 페이지를 작성할 수 있도록 도와주는 라이브러리입니다.

JSTL은 다음과 같은 기능들을 제공합니다.

Core Tags: 변수 선언, 조건문, 반복문 등의 기본적인 JSP 기능을 제공합니다.
Formatting Tags: 날짜, 시간, 숫자 등의 데이터 형식을 포맷팅할 때 사용합니다.
SQL Tags: SQL 질의를 수행할 때 사용합니다.
XML Tags: XML 데이터를 다룰 때 사용합니다.
각각의 기능은 태그 형태로 제공되며, 사용 방법도 간단합니다. 예를 들어, Core Tags 중 c:forEach 태그를 이용하면 반복문을 쉽게 구현할 수 있습니다.

<c:forEach var="item" items="${items}">
  <li>${item}</li>
</c:forEach>

위 코드에서는 c:forEach 태그를 이용하여 items 변수에 담긴 리스트를 반복하여 각 항목을 출력하고 있습니다.

JSTL은 JSP 1.2부터 표준 라이브러리로 지정되어 있으며, 대부분의 JSP 컨테이너에서 기본적으로 제공됩니다. 따라서, JSTL을 이용하여 JSP 페이지를 작성하면 코드의 가독성이 높아지고, 생산성이 향상됩니다.

JSTL 다운로드 링크 ↓
https://tomcat.apache.org/taglibs/standard/


1.2 download 클릭

해당 페이지에서는 JSTL 1.2 버전을 다운로드할 수 있으며, standard-1.2.5.zip 파일을 다운로드하여 압축을 해제하면 jstl.jar과 standard.jar 파일을 사용할 수 있습니다.

JSTL 라이브러리는 Maven, Gradle 등의 빌드 도구를 이용하여 다운로드할 수도 있습니다. 이 경우에는 해당 빌드 도구의 설정 파일에 JSTL 라이브러리를 추가하여 사용합니다.

위에서 제공한 링크에서 제공하는 파일 중에서 mpl, Spec, EL, Compat은 각각 다음과 같은 차이가 있습니다.

mpl: JSTL(MPL)은 MultiPart parser를 이용한 파일 업로드를 처리하는 라이브러리입니다.

Spec: JSTL(Spec)은 JSP 페이지에서 자주 사용되는 기능을 제공하는 JSTL 핵심 기능을 포함하는 라이브러리입니다.

EL: JSTL(EL)은 JSTL에서 사용하는 EL(Expression Language)을 포함하는 라이브러리입니다. EL은 JSP 페이지에서 변수, 연산, 메소드 호출 등을 처리하는 데 사용됩니다.

Compat: JSTL(Compat)은 JSTL 1.1 버전 이전의 버전과의 호환성을 제공하는 라이브러리입니다.

따라서, mpl은 파일 업로드 기능을 제공하며, Spec은 JSTL의 핵심 기능을 포함하는 라이브러리이고, EL은 JSTL에서 사용하는 EL(Expression Language)을 포함하며, Compat은 JSTL 1.1 버전 이전과의 호환성을 제공하는 라이브러리입니다. 각각의 라이브러리는 필요에 따라 다운로드하여 사용할 수 있습니다.


다운받은 파일을 다음과 같은 경로에 넣어주자
WebContent - WEB-INF - lib

(스프링에서는 위 작업을 자동으로 처리해준다고 한다.. 나중에 배우면 또 알아보자)


[예제_JSTL차이]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<ul>
  <%-- JSP 표현 언어를 사용하여 for문 구현 --%>
  <c:forEach var="i" begin="1" end="10">
    <li>${i}</li>
  </c:forEach>
</ul>

<%
	boolean a = true;
	if(a==true){
%>
	무조건 실행<br>
<%
	
	}
%>

<c:if test="true">
무조건 수행
</c:if>

</body>
</html>

위 예제의 실행 결과


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<ul>
  <%-- JSP 표현 언어를 사용하여 for문 구현 --%>
  <c:forEach var="i" begin="1" end="10">
    <li>${i}</li>
  </c:forEach>
</ul>

<%
	boolean a = true;
	if(a==true){
%>
	무조건 실행<br>
<%
	}
%>

<c:if test="true">
무조건 수행
</c:if>

<c:if test="${param.name == 'bk'}">
	name 파라미터의 값이 ${param.name} 입니다.<br>
</c:if>


</body>
</html>

주소창에 아래와 같이 입력하면 파라미터를 받아와 결과를 출력하게 된다.


c:if, c:choose, c:when, c:otherwise 태그

c:if 태그:
지정한 조건식이 참(true)인 경우에만 지정한 내용을 출력합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

<c:if test="${조건식}">
    실행할 코드
</c:if>

c:choose, c:when, cLotherwise 태그:
여러 개의 조건을 비교하여 조건에 따라 다른 내용을 출력할 때 사용합니다. c:choose 태그로 시작하고, c:when 태그로 조건을 지정하며, cLotherwise 태그로 마무리합니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

<c:choose>
    <c:when test="${조건식1}">
        실행할 코드1
    </c:when>
    <c:when test="${조건식2}">
        실행할 코드2
    </c:when>
    <c:otherwise>
        실행할 코드3
    </c:otherwise>
</c:choose>

위 코드에서는 age 변수의 값에 따라서 다른 내용을 출력합니다. age가 18 이상인 경우에는 "성인입니다."라는 내용을 출력하고, 13 이상인 경우에는 "청소년입니다."라는 내용을 출력하며, 그 외의 경우에는 "미성년입니다."라는 내용을 출력합니다.

즉, c:choose, c:when, c:otherwise 태그는 if-else if-else 구문과 유사한 구조를 가지고 있습니다.

다음 코드는 score 변수의 값에 따라 등급을 출력하는 예제입니다.

<c:set var="score" value="${100}" />
<c:choose>
    <c:when test="${score >= 90}">
        <p>등급: A</p>
    </c:when>
    <c:when test="${score >= 80}">
        <p>등급: B</p>
    </c:when>
    <c:when test="${score >= 70}">
        <p>등급: C</p>
    </c:when>
    <c:otherwise>
        <p>등급: D</p>
    </c:otherwise>
</c:choose>

c:forEach

반복문을 구현하는 태그입니다. c:forEach 태그를 사용하면 배열이나 컬렉션 등의 데이터를 반복하여 처리할 수 있습니다.

c:forEach 태그는 다음과 같은 속성을 가집니다.

var: 반복문에서 현재 요소를 저장할 변수의 이름을 지정합니다.
items: 반복할 데이터를 지정합니다. 배열, List, Map, Set 등의 컬렉션 객체를 사용할 수 있습니다.
begin: 반복문 시작 인덱스를 지정합니다. 기본값은 0입니다.
end: 반복문 종료 인덱스를 지정합니다. 기본값은 items의 크기-1입니다.
step: 반복문의 증감값을 지정합니다. 기본값은 1입니다.
c:forEach 태그는 다음과 같이 사용됩니다.

<c:forEach var="element" items="${list}">
    반복할 코드
</c:forEach>

위의 코드는 list 변수에 저장된 컬렉션 객체의 모든 요소를 순회하면서, 각 요소에 대해 element라는 변수에 값을 저장하고 내부의 코드를 실행합니다. var 속성으로 지정한 변수를 이용하여 반복문 안에서 현재 요소에 접근할 수 있습니다.

예를 들어, 다음 코드는 배열의 모든 요소를 출력하는 예제입니다.

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

<c:set var="numbers" value="${[1, 2, 3, 4, 5]}" />

<c:forEach var="num" items="${numbers}">
    ${num} 
</c:forEach>

위 코드에서 c:set 태그를 사용하여 numbers 변수에 배열을 저장하고, c:forEach 태그를 사용하여 배열의 모든 요소를 출력합니다. 출력 결과는 다음과 같습니다.

1 2 3 4 5

[예제]

<c:forEach var="i" begin="1" end="10">
	${i} 사용
</c:forEach>

for(int i = 1; i<=10; i++){
}

<c:forEach var="i" items="${intArray}">
	
</c:forEach>

int[] intArray = new int[3];

for(int i = 1; i<=10; i++){}			// 일반적인 for문

for(int i : intArray){}				// 향상된 for(배열에서만)
profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글