mjeongriver
article thumbnail
Published 2022. 12. 2. 17:47
day43-jsp TIL/JSP

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 파일 안으로 복사)

lib에서 파일 2개 끌어서 이클립스에 넣을 것

 

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;
		}
		
		
	}
}

'TIL > JSP' 카테고리의 다른 글

day45-jsp  (1) 2022.12.06
day44-jsp  (0) 2022.12.05
day42-jsp  (0) 2022.12.01
day41-jsp  (2) 2022.11.30
day40-jsp  (0) 2022.11.29
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그