*자바빈
- 자바에서는 객체생성, 톰캣에서는 빈이라고 부름
- 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 |
댓글