JSP 수업 기록

22-12-02 자바빈, 디자인패턴, EL_JSTL, 컨트롤러만들기

JadeStone 2022. 12. 2. 19:29

<액션태그>

#자바빈(JAVA Bean)
-빈은 객체임.
- 자바빈이란 JAVA언어의 데이터(변수)와 기능(메서드)으로 이루어진 클래스입니다.
- 자바빈은 데이터를 저장하는 변수, 데이터를 읽어오는 메서드(getter), 데이터를 저장할 때 사용되는 메
  서드(setter)로 이루어져 있습니다.
  ★ 꼭 겟터, 셋터 메서드를 만들어줘야한다. 
- 자바빈은 데이터베이스와의 반복적인 작업을 효율적으로 처리하기 위해 사용합니다.
- JSP에서는 액션태그를 사용하여 자바빈을 사용할 수 있는 방법이 있습니다. 

 

*사용법

1페이지 : 데이터를 받는페이지. <form></form>태그로 2페이지로 값을 받아서 넘겨준다.

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

-자바 폴더가 있는 곳에 vo(값을 받아서 담아주는 객체)클래스를 만든다.

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

	@Override
	public String toString() {
		return "User [id=" + id + ", pw=" + pw + ", name=" + name + ", email=" + email + "]";
	}
	
	
	
	
}

 

2페이지 :

-1페이지에서 넘어온 값을 request.getParameter();로 받아서 vo객체에 담아준다.

-vo객체를 포워드 형식으로 담아서 목표로하는 페이지로 쏴준다.

<%@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");
	
	//데이터베이스로...
	//단순히 값이 적으면 그냥 사용해도 되지만, 값이많으면 자바빈(객체) 사용함
	//1st
	//User user = new User();
	//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); //포워딩
	
%>

 

 

3페이지:

-값 출력

<%@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>
	
	<%= user.toString() %>

</body>
</html>

 

<교안13강 mvc2 패턴>


-디자인패턴-
미래를 위해서 다양한 디자인패턴 알고있으면 좋음.


M:model -> DAO,vo(dto)클래스를 같이 합쳐서 모델이라고 함.
V:view ->
 -MVC2 모델에서는 화면에 자바코드가 나와선 안됨.
 -화면에 자바 코드를 없애기 위해서 JSTL 이라는 새로운 문법을 배울것.
C:Controller ->
 -화면에 회원가입,주문,예매,결제 등등 주제별로 갈 곳으로 보내주는 작업을 하나의 컨트롤러에서 처리해줌.
 -프로세스별로 여러개의 컨트롤러가 있을 수 있음.
 -컨트롤러는 서블릿으로 만들어짐.(주제별로 각각에 화면에 보내줄 수 있는 기능이 있기 떄문)
 -컨트롤러의 할일이 너무 많아지면(내용이 너무 방대해지면) Service라는 클래스들에 작업을 나눠줌.

-여기까지 하고 교안 12강으로..-

<12강 EL_JSTL>

-화면에서 자바 코드를 없애기 위한 내용.

# EL(Expression Language)


*EL의 내장객체


-${내장객체.name} 에서 내장객체명은 생략가능.
-문자열을 사용할 때는 " (쌍따옴표)보다 '(홑따옴표)를 쓰는게 좋음.

#JSTL
-자바의 제어문을 html태그로 바꿔서 표현해줌.

-먼저 JSTL 라이브러리를 아래와 같이 설치해줘야함.

 

*JSTL 태그


- JSTL Library 사용 방법-

 

 *core라이브러리

-여기 있는 내용들은 좀 외워놔야함.
- 코어 라이브러리를 사용하기 위해서 반드시 JSP 파일 내의 지시자 태그로
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 이거는 외우는거 아님. 복사붙여넣기 하기.

 

https://thefif19wlsvy.tistory.com/61

 

JSTL 반복문(forEach) 사용법 정리

반복문은 동일한 작업을 특정 횟수 만큼 반복할 때 사용한다. JSTL에서는 제일 흔하게 사용하는 에 대해서 알아보자. 지시문 선언 반복문을 사용하려고 하면 JSP 페이지 상단에 JSTL core 선언이 필

thefif19wlsvy.tistory.com

 

★core 라이브러리에서 알아야하는 속성

-set

-foreach

 -varStatues는 배열이나 리스트의 상태를 나타내줄 수 있는 변수.

 

*Formatting 라이브러리
 format -> 형식변환  - 보여지는 형식을 바꾸겠다는 것.
 parse -> 형변환 - 데이터 타입을 바꾸겠다는 것.
 -formatdate,parsedate가 주로 많이 쓰임.

 

<%@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>
	 
	 <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"/>
	 <fmt:parseDate var="D_time" value="${TIME_A }" pattern="yyyy-MM-dd"/>
	 <fmt:formatDate var="F_time"  value="${D_time }" pattern="yyyy년MM월dd일"/>
	 ${F_time }<br> 
	 <c:set var="TIME_B" value="<%=new Date() %>"/>
	 <fmt:formatDate var="F_date" value="${TIME_B }" pattern="yyyy년MM월dd일" />
	 ${F_date }
	 

</body>
</html>


 


-다시 13강으로-

<13강>

#controller만들기
 *URL_Pattern
 

-URL패턴 컨트롤러 만드는 순서

1페이지

기능별 페이지의 확장자를 동일하게 해준다.

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

2페이지

-서블릿 클래스에서 이노테이션 부분에 위에 1단계에서 지정해준 공통된 확장자 명을 지정해준다.

 *.확장자명 => *(아스타)의 의미는 해당 확장자를 가진 모든 파일을 선택한다는 것을 의미.

-get, post 요청을 하나로 모은다.

-요청분기

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("로그인처리...");
			break;
		default:
			break;
		}

	}

}

 


 
<기억할것>

-자바 클래스에서 기본생성자를 생성하는 단축키
 ctrl + spacebar 누르면됨
-8,9,10강 넘어감
-짝궁 태그를 쓸 피요없이 홑태그로 쓸 요량이면
 <c:out value=""/> 이렇게 앞에 태그 뒷부분에 /만 붙여주기.


-EL태그는 request나 session, application 에 있는 멤버에 바로 접근이 가능.

★ctrl + a 전체 선택 -> ctrl + i 전체 정렬