JSP 프로그래밍 수업 8일차

김형우·2022년 12월 2일
0

JSP

목록 보기
8/9

1.group by 에 대하여 설명하시오.

group by는 조건절중 하나이며, group by절은 반드시 group 함수와 같이 쓰이며, 중복되지 않은 데이터를 보여주고자 할때 사용한다.

2.아래의 sql 문을 작성하시오.

  • 소속 부서별 평균 급여를 구하는 쿼리문
select deptno, avg(sal) from emp group by deptno;
  • 소속 부서별 급여 총액과 평균 급여를 구하는 쿼리문
select deptno, sum(sal), avg(sal) from emp group by deptno;
  • 부서별 사원의 수와 커미션을 받는 사원의 수를 계산하는 쿼리문
select deptno, count(*), count(comm) from emp group by deptno;
  • 그룹 지어진 부서별 평균 급여가 2000 이상인 부서의 번호와 부서별 평균 급여를 출력하는 쿼리문
select deptno, avg(sal) from emp group by deptno having avg(sal) >= 2000; 
  • 부서내 급여의 최대값과 최소값을 구하되, 최대 급여가 2900 이상인 부서만 출력하는 쿼리문
select deptno, max(sal), min(sal) from emp group by deptno having max(sal) >= 2900;
  • 사원들의 총 급여를 구하는 쿼리문
select sum(sal) from emp;
  • 커미션(COMM) 총액을 구하는 쿼리문
select sum(comm) from emp;
  • 급여 평균을 구하는 쿼리문
select avg(sal) from emp;
  • 가장 높은 급여와 가장 낮은 급여를 구하는 쿼리문
max(sal);
min(sal);
  • 사원 테이블의 사원들 중에서 커미션(COMM)을 받은 사원의 수
select count(comm) from emp;
  • 사원 들의 job의 종류를 뽑아내시오.
select distinct job from emp;
  • 담당 업무의 개수를 구하시오.
select count(distinct job) from emp;

3. board 게시판 DB를 만들고, list.jsp 를 model 2 방식으로 프로그래밍 하시오.

DAO, DTO는 기존 있던 파일들 사용, 쿼리문만 변경

BCommand.java

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface BCommand {
	//인터페이스이므로 메소드선언만 가능하다. 구현은 자손이 한다.
	void execute(HttpServletRequest request, HttpServletResponse response);
}

BListCommand.java

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BListCommand implements BCommand {
	
	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) {
		BDao dao = new BDao();
		
		// 테이블에 있는 모든 데이터를 끌고 온다는 뜻
		List<BDto> dtos = dao.list();
		
		//forwarding될때까지 메모리에 살아있음을 반드시 기억해야한다.
		request.setAttribute("list", dtos);
	}

}

BController.java (서블릿 파일)

package edu.global.ex.dto;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 모든 url 들은 webServlet에서 받아내겠다는 뜻
@WebServlet("*.do")
public class BController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BController() {
        super();
       
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//doGet메소드를 탈 시에 console에 기록하기 위해 넣었다.(디버깅위해)
		System.out.println("doGet() ..");
		actionDo(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//doPost메소드를 탈 시에 console에 기록하기 위해 넣었다.(디버깅위해)
		System.out.println("doPost() ..");
		actionDo(request,response);
	}
	
	private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
		System.out.println("actionDo() ..");
		
		request.setCharacterEncoding("UTF-8");
		
		String viewPage = null;
		BCommand command = null;
		
		//위의 세 줄은 http://localhost:8282/jsp_mvc_board/list.do 에서 list.do를 꺼내기 위한 코드들.
		String uri = request.getRequestURI();
		String conPath = request.getContextPath();
		String com = uri.substring(conPath.length());
		
		System.out.println("경로 확인:" + uri + ":" + conPath + ":" + com );
	
		if(com.equals("/List.do")) {
			command = new BListCommand();
			command.execute(request, response);
			viewPage ="List.jsp";
		}
	
		
		/*
	        클라이언트에게 list 는 list.jsp로 forwarding을 시키겠다는 의미이다.
	        forwarding은 BListCommand클래스에서 메모리에 올린 request, response 객체 정보를 
	        list.jsp에서 사용가능하다는 의미다. forwarding될때까지 정보가 살아있기 때문이다. 
	        고로 list.jsp에서 forEach문을 사용하여 데이터를 꺼낼 수 있다.
       */
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage);
		dispatcher.forward(request, response);
		
	}

}

list.jsp

	<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="500" border="1">
	<tr>
		<td>번호</td>
		<td>이름</td>
		<td>제목</td>
		<td>날짜</td>
		<td>히트</td>
	</tr>
<!-- 
	
		--이때 List는 BListCommand에서 메모리에 올린 list를 뜻함.
		포워딩시 살아있으므로 forEach문을 이용해 데이터를 꺼낼 수 있다.

 -->
 <c:forEach var="board" items="${list}">
 	<tr>
 		<td>${board.bid}</td>
 		<td>${board.bname}</td>
 		<td>${board.btitle}</td>
 		<td>${board.bdate}</td>
 		<td>${board.bhit}</td>
 	</tr>
 </c:forEach>
 
</table>
</body>
</html>

4. 게시판 설계를 위한 설계도를 그리시오.

5. model,view, controller 에 대하여 설명하시오.

  • Model : 애플리케이션의 정보, 데이터를 나타낸다. 데이터베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻하며, 또한 이러한 DATA, 정보들의 가공을 책임지는 컴포넌트이다.

  • Controller : 데이터와 사용자 인터페이스 요소들을 잇는 다리역할을 하며 사용자가 데이터에 접근하고 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻한다.

  • View : 데이터 및 객체의 입력, 그리고 보여주는 출력을 담당합니다. 데이터를 기반으로 사용자들이 볼 수 있는 화면을 뜻함

profile
개발자 지망생

0개의 댓글