11월 29일 - 수업 27일차 (JSP)

수아레스·2022년 11월 29일
post-thumbnail

1. emp를 emp.jsp 로 출력하시오.

<%@ page import="java.sql.*"%>
<%-- <%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%> --%>
<%@ 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>
	<%
	Connection connection = null;
	Statement statement = null;
	ResultSet resultSet = null;
	
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String uid = "scott";
    String upw = "tiger";
    String query = "select * from emp";
    
    try{
    	Class.forName(driver);
    	connection = DriverManager.getConnection(url,uid,upw);
    	statement = connection.createStatement();
    	resultSet = statement.executeQuery(query);
    	
    	while(resultSet.next()){
    		int empno = resultSet.getInt("empno");
    		String ename = resultSet.getString("ename");
    		String job = resultSet.getString("job");
    		int mgr = resultSet.getInt("mgr");
    		String hiredate = resultSet.getString("hiredate");
    		int sal = resultSet.getInt("sal");
    		String comm = resultSet.getString("comm");
    		int deptno = resultSet.getInt("deptno");
    		
    		out.print("empno : " + empno + " / ename : " + ename + 
            " / job : " + job + " / mgr : " + mgr + 
    		" / hiredate : " + hiredate + " / sal : " + sal + 
            " / comm : " + comm + " / deptno : " + deptno +"</br>");
    	}
    }catch(Exception e){
    	
    }finally{
    	try{
    		if(resultSet != null) resultSet.close();
            if(statement != null) statement.close();
            if(connection != null) connection.close();
         } catch(Exception e){}
    	}
%>
</body>
</html>

2. DML, DDL, DCL에 대하여 설명하시오.

SQL(Structured Query Language)의 종류.
데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL)

DDL - 데이터 정의어(Data Definition Language)

CREATE : 테이블 생성

DROP : 테이블 삭제

ALTER : 테이블 수정

TRUNCATE : 테이블에 있는 모든 데이터 삭제

DCL - 데이터 제어어(Data Control Language) 사용자에게 권한 생성 혹은 권한 삭제 같은 명령어

GRANT : 권한 생성

REVOKE : 권한 삭제

DML - 데이터 조작어(Data Manipulation Language)

SELECT 조회

INSERT 삽입

UPDATE 수정

DELETE 삭제

3. 아래의 함수에 대하여 설명하시오.

ABS: 절대값을 구하는 함수

SELECT ABS(숫자) FROM 테이블;

floor: 소수점 아래를 버리는 함수

SELECT FLOOR(소수) FROM 테이블;

round: 특정 자릿수에서 반올림하는 함수

SELECT ROUND(대상, 자릿수) FROM 테이블;

TRUNC: 특정 자릿수에서 잘라내는(절삭) 함수

SELECT(값, 자릿수) FROM 테이블;

MOD: 나누기 연산을 한 후 나머지를 결과로 되돌려 주는 함수

SELECT MOD(숫자, 나눌값) FROM 테이블;

4. ddl에서 TRUNCATE과 drop의 차이는?

  • TRUNCATE 명령어는 용량이 줄어들고, 인덱스 등도 모두 삭제 된다. 테이블은 삭제하지는 않고, 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제 후 절대 되돌릴 수 없다.

  • DROP 명령어는 테이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.

5. bean의 개념에 대하여 설명하시오.

🥔 자바빈즈란?

동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법

JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것

데이터 표현을 목적으로 하는 자바 클래스

JSP와 자바빈즈의 흐름

1) 웹 브라우저가 JSP 페이지에 요청을 전송한다.
2) JSP 페이지는 자바빈즈와 통신한다.
3) 자바빈즈가 데이터베이스에 연결된다.
4) JSP 페이지가 브라우저에 응답한다.

데이터를 담는 멤버 변수인 프로퍼티와 데이터를 가져오거나 저장하는 메소드로 구성된다.

자바빈즈의 작성 규칙

1) 자바 클래스는 java.io.Serializable 인터페이스를 구현해야 한다.
2) 인수가 없는 기본 생성자가 있어야 한다.
3) 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다.
4) 모든 멤버 변수인 프로퍼티는 Getter/Setter() 메소드가 존재해야 한다.
Getter() 메소드: 멤버 변수에 저장된 값을 가져올 수 있는 메소드
Setter() 메소드: 멤버 변수에 값을 저장할 수 있는 메소드

import java.io.Serializable;

public class MemberBean implements java.io.Serializable{
	
    private int id;			// 멤버 변수(프로퍼티) 정의
    private String name;
    
    public MemberBean(){	// 기본 생성자
    }
    						// Gette/Setter() 메소드 작성
    public int getId(){
    	return id;
    }
    public void setId(int id){
    	this.id = id;
    }
    public String getName(){
    	return name;
    }
    public void setName(String name){
    this.name=name;
    }
  }
    

useBean 액션 태그로 자바빈즈 사용하기

useBean 액션 태그란?

JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그

설정된 id 속성과 scope 속성을 바탕으로 자바빈즈의 객체를 검색하고, 객체가 발견되지 않으면 빈 객체를 생성한다.

<jsp:useBean id="자바빈즈 식별이름" class="자바빈즈 이름" scope="범위"/>

id: 자바빈즈를 식별하기 위한 이름
class: 패키지 이름을 포함한 자바빈즈 이름. 인수가 없는 기존 생성자가 있어야 하며 추상 클래스를 사용할 수 없다.
scope: 자바빈즈가 저장되는 영역 설정. page(기본값), request, session, application 중 하나의 값을 사용한다.

useBean03.jsp

public class Person{
	private int id = 20181004;
    private String name = "손흥민";
    
    public Person(){
    
    }
    
    public int getId(){
    	return id;
    }
    
    public void setId(int id){
    	this.id=id;
    }
    
   public String getName(){
    	return id;
    }
    
    public void getName(String name){
    	this.name=name;
    }
 }
useBean04.jsp

<body>
	<jsp:useBean id="person" class="ch04.dao.Person" scope="request"/>
    <p> 아이디: <%=person.getId()%>
    <p> 이름: <%=person.getName()%>
    	<%
        	person.setId(20182005);
            person.setName("손흥민");
        %>
        <jsp:include page="useBean03.jsp/>
</body>

6. 아래의 3종 세트를 설명하시오. (Connection, Statement, ResultSet)

Connetion : DB와 연결되는 통로 생성

쿼리를 전달하고 결과값을 반환한다.

forName() 메소드를 통하거나 아니면 자동으로 드라이버가 로드될 때 jdbc 드라이버는 DriverManager에 자신을 등록한다. 따라서 별도의 작업을 하지 않고도 Connection 객체를 얻어올 수 있다.

String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "admin";
String upw = "oracle";
connection = DriverManager.getConnection(url, uid, upw);

Statement : 정적 SQL문을 실행해, 작성된 결과를 돌려줌

Statement 객체는 Statement 인터페이스를 구현한 객체를 Connection 클래스의 createStatement() 메소드를 호출함으로써 얻어진다.

select문은 데이터베이스로부터 데이터를 쿼리하고 출력한다.

ResultSet : SELECT문의 결과를 저장하는 객체

ResultSet은 Statement를 통해 값을 저장한다. 이때, executeQuery(String sql) 메소드를 통해 저장할 수 있다.

7. 아래를 참고 하여 이름,국,영,수 데이터 멤버로 갖는 클래스(java Bean)을 만든후 아래와 같이 액션 태그를 활용하여 총점고 평균이 나오도록 하시오.

=========================================================

Student student = new edu.kosmo.ex.Student();

<jsp:useBean id="student" class="edu.kosmo.ex.Student"></jsp:useBean>

<jsp:setProperty name="student" property="name" value="홍길동" />

이름 : <jsp:getProperty ~~~ />

국어 : <jsp:getProperty ~~~ />

영어 : <jsp:getProperty ~~~ />

수학 : <jsp:getProperty ~~~ />

총점 : <jsp:getProperty ~~~ />

평균 : <jsp:getProperty ~~~ />

=======================================================

<%@ 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="grade.jsp">
		이름 : <input type="text" name="name" size="10" /><br/>
		국어 : <input type="number" name="kor" size="10" /><br/>
		영어 : <input type="number" name="eng" size="10" /><br/>
		수학 : <input type="number" name="math" size="10" /><br/>
		<input type="submit" value="전송"> 
        <input type="reset" value="초기화">
	</form>

</body>
</html>
<%@ 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>
	<jsp:useBean id="grade" class="edu.global.ex.Grade2" />
	<jsp:setProperty property="name" name="grade" param="name"/>
	<jsp:setProperty property="kor" name="grade" param="kor"/>
	<jsp:setProperty property="eng" name="grade" param="eng"/>
	<jsp:setProperty property="math" name="grade" param="math"/>
	
	이름 : <jsp:getProperty property="name" name="grade"/><br/>
	국어 : <jsp:getProperty property="kor" name="grade"/><br/>
	영어 : <jsp:getProperty property="eng" name="grade"/><br/>
	수학 : <jsp:getProperty property="math" name="grade"/><br/>
	총점 : <jsp:getProperty property="total" name="grade"/><br/>
	평균 : <jsp:getProperty property="avg" name="grade"/><br/>

</body>
</html>
package edu.global.ex;

public class Grade2 {
	private int kor, eng, math;
	private String name;

	public Grade2(String name,int kor, int eng, int math) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMath() {
		return math;
	}
	public void setMath(int math) {
		this.math = math;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Grade2() {
		// TODO Auto-generated constructor stub
	}

	public int getTotal() {
		return kor + eng + math;
	}

	public double getAvg() {
		return getTotal() / 3.0;
	}

}
profile
띵호와

2개의 댓글

comment-user-thumbnail
2022년 11월 29일

흥민쟝...... 너무 인상깊어요...

1개의 답글