Flaming Soccer ball
JSP

52일차 22.12.02

leo lee 2022. 12. 2.
반응형

*자바빈
- 자바에서는 객체생성, 톰캣에서는 빈이라고 부름
- VO의 개념
- getter, setter 메서드가 반드시 있어야 함
-> 내부에 만들어진 기능들이 getter 메서드로 호출하기 때문에 없는 경우 에러가 발생함

 

***디자인패턴***
-MVC2패턴
- Model: 데이터베이스 통신하는 곳
- view: 화면 -> JSP가 화면 구성 -> JSTL문법 사용(자바코드는 사용할 수 없다)
- controller -> 각각의 요청들을 하나로 모아서 구분
ex) 회원가입, 주문, 예매, 결제 등을  각각 주제에 맞는 controller로 이동
->회원가입의 경우 가입, 탈퇴, 수정, 내역 등등을 하나의 controller로 만듬
-> JSP파일로 컨트롤러를 대체할 수 없고 servlet을 사용해야한다

- service: controller의 역할을 분담하기 위해 사용하는 클래스
 
*EL태그
- JSP에서 저장객체 출력시 스크립팅(ex자바코드)을 전혀 쓰지 않게해주는 기술
- EL ${value}
* EL 내장객체
-> ${내장객체.name}


*JSTL 
- Core: 제어문
- Formatting:형변환
- prefix: 태그의 이름을 의미
- 제어문은 암기~!

 

 

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

<%@ 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="text" name="email" size="10"><br>
		
		<input type="submit"  value="확인"><br>
		
	
	</form>
</body>
</html>

담아줄 객체를 생성함

생성자를 만들어 주고, getter, setter를 생성한다.

 

 

 

package com.example.bean;

public class User {
	/* 자바빈은 from과 DB의 통신과정에서 변수처리를 쉽게 하기 위해서 사용
	 * 관련변수를 동일한 이름으로 선언하고, getter, setter를 반드시 생성 
	 * 
	 */
	
	private String id;
	private String pw;
	private String name;
	private String email;
	
	//생성자- 빈 클래스의 생성자는 보통 기본생성자, 모든 변수를 초기화하는 생성자 2개를 선언
	public User() {
		// TODO Auto-generated constructor stub
	}

	public User(String id, String pw, String name, String email) {
		super();
		this.id = id;
		this.pw = pw;
		this.name = name;
		this.email = email;
	}

	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 + "]";
	}
	
	
	
	
	
	
	
	
}

중간에 bean_basic_ok.jsp

User VO를 사용하여 값을 넣어주고 

getRequestDispatcher("파일명").forward(request, response); 를 통해 다음 페이지로 값을 넘겨준다.

<%@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);//포워딩
    %>
<%@page import="com.example.bean.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
    	//user안에 있는 원자값들을 화면에 출력
    	User u = (User)request.getAttribute("user");
    	
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>bean_basic_result</h3>
	ID: <%=u.getId() %><br>
	PW: <%=u.getPw() %><br>
	NAME: <%=u.getName() %><br>
	EMAIL: <%=u.getEmail() %><br>
	
	
	
</body>
</html>

*EL(Expression Language)

-EL 이란 JSP 에서 저장객체를 출력할때 스크립팅을 전혀 쓰지 않을 수 있는 기술 입니다
-EL 은 일종의 스크립트 언어로 자료 타입 , 수치 연산자 , 논리 연산자 , 비교 연산자 등을 제공하며 표현식을 대체 할 수 있
습니다

 

-EL 의 사용법
ex) 표현식 <%= value %>  -->${EL value}

 

-EL 내부에 사용하는 연산자
1.산술 : +, --, *, /, %
2.관계 : ==, !=, <, <=, >, >=
3.조건 : a ? b : c a  조건식이 참이면 b 를 실행 , 거짓이면 c 를 실행
4.논리 : &&,||


* 액션 태그와 EL

-액션태그 <jsp:getProperty name member " property name/>
-EL --> ${member.name}

<%@ 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>EL태그는 표현식을 대체함</h3>
	
	${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>
	
	<!--
	<, lt(less than)
	<=, le(less or equals)
	  
	<, gt(greater than)
	<=, ge(greater or equals)
	  
	  -->
	
	
	
</body>
</html>

내장객체 의미
1.pageScope JSP의 page 객체를 참조하는 객체
2.requestScope JSP의 request 객체를 참조하는 객체
3.sessionScope JSP의 session 객체를 참조하는 객체
4.applicationScope JSP의 application 객체를 참조하는 객체
5.param 요청 파라미터를 참조하는 객체
6.paramValues 요청 파라미터 배열 를 참조하는 객체
7.initParam 서블릿컨텍스트 초기화 파라미터를 참조하는 객체
8. cookie 쿠키 객체를 참조하는 객체

 

<%@ 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="확인"><br>
		
	
	</form>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%
	request.setCharacterEncoding("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("aaa123");
    	
    	//세션 저장
    	//1
    	session.setAttribute("vo",vo);
    	//2
    	session.setAttribute("auth","y");
		
    	//어플리케이션 객체에 저장
    	application.setAttribute("menu", "햄버거");
    	
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	${vo.id }<br>
	${auth }<br>
	${menu }<br>
	<br><br><br>
	${sessionScope.vo.id }<br>
	${sessionScope.auth }<br>
	${applicationScope.menu }<br>
</body>
</html>

 

 

*JSTL

- JSP 의 경우 HTML 태그와 같이 사용되어 전체적인 코드의 가독성이 떨어집니다
- 그래서 이런 단점을 보완하고 만들어진 것이 JSTL 입니다
- JSTL 을 사용하면 자바의 제어문을 HTML 태그화 시킬 수 있습니다
-JSTL 의 경우 우리가 사용하는 Tomcat 기본 컨테이너에 포함되어 있지 않으므로 , 별도의 라이브러리를 설치하고
사용합니다

 

-설치 방법 :
http://jakarta.apache.org접속
(jstl.jar , standard.jar 파일 설치 된 톰켓의 lib 파일 안으로 복사

 

종류 URL prefix
Core http://java.sun.com/jsp/jstl/core c
XML processing http://java.sun.com/jsp/jstl/xml

x
Formatting http://java.sun.com/jsp/jstl/fmt fmt
Database
access
http://java.sun.com/jsp/jstl/sql sql
Functions http://java.sun.com/jsp/jstl/functions fn

 

 

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

태그 설명
c:catch 예외처리에
사용
c:out JspWriter에 내용 출력
c:set JSP에서 사용될 변수 설정
<c set value="value" target="targetObjectName" property ="propertyName"/>
c:remove 설정한 변수 제거
c:if 조건처리
c:choose 다중 조건 처리
c:forEach 컬렉션이나 Map 의 각 항목 처리
c:forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용
c:when 조건에 맞을 때 (choose문 안에서 사용)
c:otherwise 맞는 조건이 없을 경우(choose문 안에서 사용)
c:import URL 을 사용하여 다른 자원의 결과를 삽입
c:redirect URL 을 재작성
c:param 파라미터 설정
<%@ 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" method="post">
		
		이름:<input type="text" name="name" ><br>
		나이:<input type="text" name="age" ><br>
		<input type="submit"  value="확인"><br>
		
	
	</form>
	
	
	<h3>choose절 확인하기</h3>
	<form action="jstl_choose.jsp" method="post">
		
		이름:<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"%>
<%request.setCharacterEncoding("utf-8");%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%-- 출력문 --%>
	<c:out value="${param.name }"/><br>
	
	<%-- 변수로 선언 --%>
	<c:set var="num" value="${param.age }"/>
	<c:out value="${num }"/><br>
	
	<hr/>
	<%-- if문 --%>
	<%if(request.getParameter("name").equals("홍")){%>
		<h3>홍 입니다</h3>
	<%}%>
	
	<br>	
		
	<c:if test="${param.name eq '홍'}">
		<h3>홍 입니다</h3>
	</c:if>
	
	<c:if test="${param.age ge 20}">
		<h3>성인 입니다</h3>
	</c:if>
	<c:if test="${param.age lt 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"%>
<%request.setCharacterEncoding("utf-8");%>

<!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}">
			<h3>성인 입니다</h3>
		</c:when>
		<c:otherwise>
			<h3>미성년자 입니다</h3>
		</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"%>
<%request.setCharacterEncoding("utf-8");%>
    
<!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 += i;
		}
	%>
	결과: <%=sum %>
	
	<hr/>
	
	<c:set var="sum" value="0"></c:set>
	<c:forEach var="i" begin="1" end="100" step="2">
		<c:set var="sum" value="${sum + i}"></c:set>
	</c:forEach>
	결과: ${sum}
	
	<hr>
	<h3>2~9단 까지 구구단 세로 출력(JSTL)</h3>
	<c:forEach var="i" begin="2" end="9" step="1"> 
		${i} 단<br>
		<c:forEach var="j" begin="1" end="9" step="1">
		${i} x ${j} = ${i*j}<br>
		</c:forEach>
		<br>
	</c:forEach>
	
	<hr>
	<h3>향상된 포문</h3>
	<%
		int[] arr = new int[]{1,2,3,4,5};
		for(int a : arr){
			out.println(a);
		}
	%>
	
	<hr/>
	<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"%>
<%	
	request.setCharacterEncoding("utf-8");
	
	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="x" value="<%=request.getAttribute(\"list\")%>"/> 쓰레기임--%>
    
    
    <c:set var="sum" value="0"/>
	<c:forEach var="a" items="${list}" varStatus="d">
		${d.count }번:
		${a.id }
		${a.name }
		${a.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/core" prefix="c"%>
<%@taglib uri ="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%request.setCharacterEncoding("utf-8");%>
<!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="yy-MM-dd" />
	<fmt:parseDate var="r_day4" value="2022-12-02 23:45:12" pattern="yy-MM-dd HH:mm:ss" />
	
	${r_day3 }<br>
	${r_day4 }<br>
	
	<hr>
	<h2>formatNumber -> 숫자를 숫자의 형태로 변경</h2>
	<fmt:formatNumber var="r_num1" value="2000" pattern="0,000.000"/>
	${r_num1 }<br>
	
	<h2>parseNumber -> 문자를 숫자의 형태로 변경</h2>
	<fmt:parseNumber var="r_num2" value="1,000원" pattern="0,000원"/>
	${r_num2 }<br>
	
	<hr>
	<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="TIME_A2" value="${TIME_A }" pattern="yy-MM-dd" />
   	<fmt:formatDate var="TIME_A3" value="${TIME_A2 }" pattern="yyyy년MM월dd일 "/>
   	${TIME_A3 }<br>
   	<fmt:formatDate var="TIME_B2" value="${TIME_B }" pattern="yyyy년MM월dd일 "/>
   	${TIME_B2 }<br>
	
	
	
</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("로그인처리...");
				break;
			case "/controller/logout.test":
				System.out.println("로그아웃처리...");
				break;
			case "/controller/delete.test":
				System.out.println("탈퇴처리...");
				break;
			case "/controller/update.test":
				System.out.println("수정처리...");
				break;
			default:
				break;
		}

	}
	

}

 

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

반응형

'JSP' 카테고리의 다른 글

50일차 22.11.30  (1) 2022.11.30
49일차 22.11.29  (0) 2022.11.29
48일차 22.11.28  (0) 2022.11.29

댓글