22-12-02 자바빈, 디자인패턴, EL_JSTL, 컨트롤러만들기
<액션태그>
#자바빈(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 전체 정렬