12월 1일 - 수업 29일차 JSP / SQL

수아레스·2022년 12월 1일
post-thumbnail

1. 아래의 쿼리를 작성하시오.

-- 현재 날짜를 문자형으로 변환하여 출력하는 쿼리문
select sysdate, to_char(sysdate,'YYYY-MM-DD') from dual;

-- 사원들의 입사일을 출력하되, 요일까지 함께 출력하는 쿼리문
select hiredate, to_char(hiredate,'YYYY-MM-DD Day') from emp;
-- YYYY-MM-DD에서 -대신 다른거 넣어도 잘 나옴~

-- 현재 날짜와 시간을 출력하는 쿼리문(근데 출력 되는 시간이 미국시간인)
select sysdate, to_char(sysdate,'YYYY-MM-DD HH:MI:SS') from dual;

-- 담당업무(JOB) 컬럼을 추가
alter table emp add JOB varchar(9);

-- 각 지역별 통화 기호를 앞에 붙이고 천 단위마다 콤마를 붙여서 출력하는 쿼리문
select ename,sal,to_char(sal,'L999,999') from emp;
-- L은 로케이션.

-- 1981년 2월 20일에 입사한 사원을 검색하는 쿼리문
select * from emp where hiredate=to_date(19810220,'YYYYMMDD');

-- 올해 며칠이 지났는지 현재 날짜에서 2016/01/01을 뺀 결과를 출력하는 쿼리문
select sysdate-to_date(20160101, 'YYYYMMDD') from dual;
SELECT SYSDATE - TO_DATE('2016/01/01', 'YYYY/MM/DD') FROM DUAL;

-- NVL = null value -> null을 0으로 바꾸는애래
-- 연봉 계산을 하는 쿼리문
select cname, sal, comm, job from emp;
select ename, sal, comm, job, (sal*12 + nvl(comm,0)) as 연봉 from emp;

-- 사원의 부서 번호를 이름으로 설정하는 쿼리문
select deptno from emp;
select deptno, decode(deptno,10,'리서치',
                             20,'연구팀',
                             '디폴트') as 부서이름 from emp;

2. scope에 대하여 설명하시오.

scope란?

웹 서버에서 객체 또는 변수가 생성된 후 유효한 범위

Page : 페이지 내에서 지역변수처럼 사용
Request : http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
Session : 웹 브라우저 별로 변수가 관리되는 경우 사용
Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용

1) Page Scope

  • PageContext 추상 클래스를 사용한다.
  • JSP 페이지에서 pageContext라는 내장 객체로 사용 가능 하다.
  • forward 될 경우 해당 Page scope에 지정된 변수는 사용할 수 없다.
  • 사용 방법은 다른 Scope와 같으나, 마치 지역변수처럼 사용된다는 것이 다른 Scope들과 다르다.
  • page 내에서만 사용될 수 있는 변수기 때문에 지역 변수처럼 해당 JSP나 Servlet 실행되는 동안에만 정보를 유지하고자 할 때 사용한다.
  • JSP에서 pageScope에 값을 저장한 후 해당 값을 EL표기법 등에서 사용할 때 사용할 수 있다.

2) Request Scope

  • http 요청을 WAS가 받아 웹 브라우저에 응답할 때까지 변수값을 유지하고자 할 경우 사용한다.
  • HttpServletRequest 객체를 사용한다.
  • JSP에서는 request 내장 변수를 사용하고, Servlet에서는 HttpServletRequest 객체를 사용한다.
  • 값을 저장할 때는 request 객체의 setAttribute()메소드를 사용한다.
  • 값을 읽어들일 때는 request 객체의 getAttribute()메소드를 사용한다.
  • forward 시 값을 유지하고자 사용한다.

3) Session Scope

  • 웹 브라우저별로 변수를 관리하고자 할 경우 사용한다.
  • 웹 브라우저 탭 간에는 세션 정보가 공유되기 때문에, 각각의 탭에서 같은 세션정보를 사용할 수 있다.
  • HttpSession 인터페이스를 구현한 객체를 사용한다.
  • JSP에서는 session 내장 변수를 사용한다.
  • Servlet에서는 HttpServletRequest의 getSession()메소드를 이용하여 session 객체를 얻는다.
  • 값을 저장할 때는 session 객체의 setAttribute()메소드를 사용한다.
  • 값을 읽어 들일 때는 session 객체의 getAttribute()메소드를 사용한다.
  • 쇼핑몰 장바구니, 구매목록, 결제 내역, 로그인, 회원가입 등과 같이 개별 클라이언트의 정보를 유지할 필요가 있을 때 사용한다.

4) Application Scope

  • 웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다.
  • ServletContext 인터페이스를 구현한 객체를 사용한다.
  • jsp에서는 application 내장 객체를 이용한다.
  • Servlet에서는 getServletContext()메소드를 이용하여 application객체를 이용한다.
  • 웹 어플리케이션 하나당 하나의 application객체가 사용된다.
  • 값을 저장할 때는 application객체의 setAttribute()메소드를 사용한다.
  • 값을 읽어 들일 때는 application객체의 getAttribute()메소드를 사용한다.
  • 모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용한다.

공통 함수

  • setAttribute(string key,object value) : key, value 형식으로 값을 할당한다.
  • getAttribute(string key) : key값으로 value값을 리턴 받는다.

3. 아래를 프로그래밍 하시오.

emp.jsp Dao Dto 객체를 생성해서, el, jstl을 활용하되 empdto 객체를 session 영역에 저장한후, 해당 emp list를 뿌리시오.

<%@page import="java.util.List"%>
<%@page import="edu.global.ex.dao.EmpDao"%>
<%@page import="edu.global.ex.dto.EmpDto"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ 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>
<%
	EmpDao empDao = new EmpDao();
	List<EmpDto> emps = empDao.empList();
	
	session.setAttribute("emps", emps);
%>
<c:forEach var="emp" items="${emps}">
	사번 : ${emp.empno} 이름 : ${emp.ename} 직종 : ${emp.job}<br>
</c:forEach>
</body>
</html>

4. JSTL이란?

JSP Standard Tag Library의 약자로 JSP 표준 라이브러리이다.
: JSP에서 자주 사용하는 기능(반복문과 조건문, 데이터 표현 등)을 미리 구현해 놓은 커스텀 태그 라이브러리 모음.
: JSTL은 EL을 사용하여 표현한다.

JSTL for Each문

JSTL forEach : JSTL for loop (반복문)
items : 대상 배열 또는 컬렉션
var : 요소를 저장할 변수
varStatus : index와 count 속성이 있다. (index는 0부터, count는 1부터 시작)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="false"%>
<!-- JSTL 선언부 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forEach(JSTL for loop)</title>
</head>
<body>
<%
	String friends[] ={"밀크", "두유", "방울"};
	request.setAttribute("fa", friends);
%>
<%-- 
	JSTL forEach : JSTL for loop (반복문)
	items : 대상 배열 또는 컬렉션
	var : 요소를 저장할 변수
	varStatus : 
 --%>
<c:forEach items="${requestScope.fa}" var="fname" varStatus="order">
	count: ${order.count}
	index: ${order.index}
	${fname} <br>
</c:forEach>
</body>
</html>
profile
띵호와

0개의 댓글