1.
* 자바빈 (JAVA Bean)
- 자바빈이란 JAVA언어의 데이터(변수)와 기능(메서드)으로 이루어진 클래스입니다.
- 자바빈은 데이터를 저장하는 변수, 데이터를 읽어오는 메서드(getter), 데이터를 저장할 때 사용되는 메서드(setter)로 이루어져 있습니다.
- 자바빈은 데이터베이스와의 반복적인 작업을 효율적으로 처리하기 위해 사용합니다.
- JSP에서는 액션태그를 사용하여 자바빈을 사용할 수 있는 방법이 있습니다.
1) 예제(1)
- bean_basic, bean_basic_ok, User, bean_basic_result 순서
<%@ 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>
<form action = "bean_basic_ok.jsp" method="post">
아이디: <input type = "text" name = "id" size ="10"> <br>
비밀번호: <input type = "password" name = "pw" size ="10"> <br>
이름: <input type = "text" name = "name" size ="10"> <br>
이메일: <input type = "email" name = "email" size ="10"> <br>
<input type = "submit" value = "확인">
</form>
</body>
</html>
<%@page import="com.example.bean.User"%>
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
String name = request.getParameter("name");
String email = request.getParameter("email");
//데이터 베이스로..
//단순히 값이 적으면 그냥 사용해도 되지만, 값이 많으면 자바빈(객체)
//1.
//User user = new User(); import할때는 ctrl + space
//user.setId(id);
//user.setPw(pw);
//user.setName(name);
//user.setEmail(email);
User user = new User(id, pw, name, email);
request.setAttribute("user", user); //3번째 페이지에서 활용
request.getRequestDispatcher("bean_basic_result.jsp").forward(request, response); //포워딩
%>
package com.example.bean;
public class User {
/*
* 자바빈은 form과 db의 통신과정에서 변수처리를 쉽게 하기 위해서 사용합니다.
* 관련 변수를 동일한 이름으로 선언하고, getter, setter를 반드시 생성합니다.
*/
private String id;
private String pw;
private String name;
private String email;
//생성자 - 빈클래스의 생성자는 보통 기본 생성자, 모든 변수를 초기화하는 생성자 2개를 선언합니다.
public User() {
}
public User(String id, String pw, String name, String email) {
super();
this.id = id;
this.pw = pw;
this.name = name;
this.email = email;
}
//getter, setter
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
<%@page import="com.example.bean.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//user안에 있는 원자값들을 화면에 출력
User user = (User)request.getAttribute("user");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>bean_basic_result</h3>
아이디: <%=user.getId() %> <br>
이름: <%=user.getName() %> <br>
비밀번호: <%=user.getPw() %> <br>
이메일: <%=user.getEmail() %> <br>
</body>
</html>
2) 예제(2) - el_basic
<%@ 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>
<h2>EL 태그는 표현식을 대체합니다</h2>
${1 + 2} <br>
${1 > 2} <br>
${1 == 2} <br>
${1 == 2 ? '같음' : '다름' } <br>
${1 < 2 || 1 > 2}<br>
${1 < 2 or 1 > 2}<br>
${1 < 2 && 1 > 2}<br>
${1 < 2 and 1 > 2}<br>
${'홍길동' == '홍길동'}<br>
${'홍길동' eq '홍길동'}<br>
${ ! false }<br>
${ not false }<br>
<!--
< , it
<=, le(litle or equals)
> , gt
<=, ge
-->
</body>
</html>
3) 예제(3)
- el_form, el_form_ok, el_obj
<%@ 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>
<form action = "el_form_ok.jsp" method="post">
이름: <input type = "text" name ="name"> <br>
아이디: <input type = "text" name ="id"> <br>
비밀번호: <input type = "password" name ="pw"> <br>
<input type = "submit" value = "확인">
</form>
</body>
</html>
<%@ 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>
<!-- param.태그 이름으로 한번에 받아서 사용합니다 -->
${param.name } <br>
${param.id } <br>
${param.pw } <br>
</body>
</html>
<%@page import="com.example.bean.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
User vo = new User();
vo.setId("hhh123");
vo.setName("홍길숙");
vo.setEmail("hhh@naver.com");
request.setAttribute("vo", vo); //리퀘스트에 강제 저장
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
아이디: ${requestScope.vo.id }<br>
이름: ${requestScope.vo.name }<br>
이메일 ${requestScope.vo.email }<br>
<!--
requestScope는 생략을 하고 많이 사용합니다.
사용되는 순서 = request > session > application
-->
${vo.id }<br>
${vo.name }<br>
${vo.email }<br>
</body>
</html>
<%@page import="com.example.bean.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
User vo = new User();
vo.setId("hhh123");
vo.setName("홍길숙");
vo.setEmail("hhh@naver.com");
request.setAttribute("vo", vo); //리퀘스트에 강제 저장
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
아이디: ${requestScope.vo.id }<br>
이름: ${requestScope.vo.name }<br>
이메일 ${requestScope.vo.email }<br>
<!--
requestScope는 생략을 하고 많이 사용합니다.
사용되는 순서 = request > session > application
-->
${vo.id }<br>
${vo.name }<br>
${vo.email }<br>
</body>
</html>
2.
1) JSTL 설치
- 설치 방법: http://jakarta.apache.org 접속 (jstl.jar, standard.jar 파일 설치 된 톰켓의 lib 파일 안으로 복사)
2) JSTL 예제(1) - jstl_form, jstl_if, jstl_choose, jstl_foreach, jstl_quiz, jstl_fmt
<%@ 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> if절 확인하기 </h3>
<form action = "jstl_if.jsp">
이름: <input type = "text" name="name"><br>
나이: <input type = "text" name="age"><br>
<input type = "submit" value="확인"><br>
<h3> choose절 확인하기 </h3>
<form action = "jstl_choose.jsp">
이름: <input type = "text" name="name"><br>
나이: <input type = "text" name="age"><br>
<input type = "submit" value="확인"><br>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- 출력문 --%>
<c:out value = "${param.name }"/>
<%-- 변수로 선언 --%>
<c:set var="num" value="${param.age }"/>
<c:out value="${num }"></c:out>
<hr/>
<%-- if문 --%>
<%-- 같은 표현입니다. --%>
<% if(request.getParameter("name").equals("홍")) { %>
<% } %>
<c:if test="${param.name eq '홍' }">
<h3>홍 입니다.</h3>
</c:if>
<c:if test="${param.age >= 20 }">
<h3>성인입니다</h3>
</c:if>
<c:if test="${param.age < 20 }">
<h3>미성년자 입니다</h3>
</c:if>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:choose>
<c:when test = "${param.name eq '홍길동' }">
<h3>홍길동</h3>
</c:when>
<c:when test = "${param.name eq '이순신' }">
<h3> 이순신 <h3>
</c:when>
<c:otherwise>
<h3>둘 다 아님</h3>
</c:otherwise>
</c:choose>
<hr>
<c:choose>
<c:when test = "${param.age >= 20 }">
성인입니다
</c:when>
<c:otherwise>
미성년자입니다.
</c:otherwise>
</c:choose>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>1~100까지 홀수 합</h3>
<%
int sum = 0;
for(int i = 1; i <= 100; i+=2){
sum = sum + i;
}
%>
결과: <%=sum %>
<hr/>
<c:set var="sum" value="0"/>
<c:forEach var="i" begin="1" end="100" step="2">
<c:set var ="sum" value="${sum = sum + i }"/>
</c:forEach>
결과: ${sum }
<hr>
<h2>2~9단 까지 구구단 세로로 출력</h2>
<%
for(int i = 2; i <= 9; i++){
for(int j = 1; j <= 9; j++){
out.print(i + "*" + j + "=" + i*j + "<br>");
}
}
%>
<hr/>
<!-- step은 생략하면 자동으로 1이 됨 -->
<c:forEach var = "i" begin="2" end="9" step="1">
<c:forEach var = "j" begin="1" end="9" step="1">
${i } x ${j } = ${i * j} <br>
</c:forEach>
</c:forEach>
<hr>
<h3>향상된 for문: 객체 회전</h3>
<%
int[] arr = new int[] {1,2,3,4,5};
for(int a : arr){
out.println(a);
}
%>
<br>
<c:set var = "arr" value = "<%= new int[] {1,2,3,4,5} %>" />
<c:forEach var = "a" items = "${arr }" varStatus="s">
인덱스 번호: ${s.index }
순서: ${s.count }
값: ${a }
<br>
</c:forEach>
</body>
</html>
<%@page import="java.util.ArrayList"%>
<%@page import="com.example.bean.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
ArrayList<User> list = new ArrayList<>();
for(int i = 1; i <= 10; i++){
User user = new User();
user.setId(i+"");
user.setName("홍길동" + i);
user.setEmail(i + "@naver.com");
list.add(user);
}
//리퀘스트에 담는다
request.setAttribute("list", list);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>list안에 값을 행별로 번호를 붙여서 반복문으로 출력</h3>
<c:set var="sum" value = "0" />
<c:forEach var = "vo" items = "${list }" varStatus="d">
${d.count }번:
${vo.id }
${vo.name }
${vo.email }
<c:set var="sum" value = "${sum + d.count }" />
<br>
</c:forEach>
번호 합: ${sum }
</body>
</html>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>formatNumber, formatDate, parseDate, parseNumber</h2>
<%--
format → 형식 변환
parse → 형 변환
--%>
<h2>formatDate → 날짜를 날짜의 형태로 변경</h2>
<%-- 2022-12-31 얘는 문자라서 못 바꿈 --%>
<c:set var = "day" value = "<%=new Date() %>" />
${day }
<br>
<fmt:formatDate var = "r_day" value="${day }" pattern = "yyyy년 MM월 dd일 hh:mm:ss"/>
<fmt:formatDate var = "r_day2" value="${day }" pattern = "yy-MM-dd"/>
${r_day } <br>
${r_day2 } <br>
<h2>parseDate → 문자를 날짜의 형태로 형변환</h2>
<fmt:parseDate var = "r_day3" value = "2022-12-02" pattern = "yyyy-MM-dd"/>
<fmt:parseDate var = "r_day4" value = "2022-12-02 23:45:12" pattern = "yyyy-MM-dd HH:mm:ss"/>
${r_day3 } <br>
${r_day4 } <br>
<hr>
<h2>formatNumber → 숫자를 숫자의 형태로 변경</h2>
<fmt:formatNumber var="r_num" value="2000" pattern="0,000.000"/>
${r_num }<br>
<h2>parseNumber → 문자를 숫자의 형태로 변경</h2>
<fmt:parseNumber var="r_num2" value="1,000원" pattern="0,000원"/>
${r_num2 }
<h3>실습</h3>
<h2>아래 값들을 2020년 05월 03일 형식으로 변경해서 출력</h2>
<c:set var="TIME_A" value = "2020-05-03"/> <%-- 문자 --%>
<c:set var="TIME_B" value="<%=new Date() %>" /> <%-- 날짜 --%>
<fmt:parseDate var = "timea" value="${TIME_A }" pattern = "yyyy-MM-dd"/>
<fmt:formatDate value = "${timea }" pattern = "yyyy년 MM월 dd일"/>
<br>
<fmt:formatDate var = "timeb" value="${TIME_B }" pattern = "yyyy년 MM월 dd일"/>
${timeb }
</body>
</html>
3.
controller
<%@ 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>
<!-- 일관성 있게 작성하기 -->
<a href ="join.test">가입</a>
<a href ="login.test">로그인</a>
<a href ="logout.test">로그아웃</a>
<a href ="/JSPBasic/controller/delete.test">탈퇴</a>
<a href ="/JSPBasic/controller/update.test">수정</a>
</body>
</html>
package com.example.controller;
import java.io.IOException;
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("*.test")
//1. URL 주소를 확장자 패턴으로 변경
public class TestController extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doAction(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doAction(request, response);
}
//2. get, post요청을 하나로 모음
protected void doAction(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3. 한글 처리
request.setCharacterEncoding("utf-8");
//4. 요청 분기
//System.out.println(request.getRequestURI());
String path = request.getContextPath();
//문자열 자르기
String command = request.getRequestURI().substring(path.length() );
System.out.println(command);
switch (command) {
case "/controller/join.test":
System.out.println("가입 처리");
break;
case "/controller/login.test":
System.out.println("로그인 처리");
default:
break;
}
}
}