250x250
Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

개린이 개발노트

국비지원 JAVA(자바) 프로그래밍 (뷰(View), 가상테이블,ERDM,ERDCloud, lucidchart ,JSP,servlet(서블릿)) 본문

국비지원(국비교육) 웹 개발자 과정

국비지원 JAVA(자바) 프로그래밍 (뷰(View), 가상테이블,ERDM,ERDCloud, lucidchart ,JSP,servlet(서블릿))

개린이9999 2023. 1. 17. 06:32
728x90

 

뷰 View

  • 논리적인 가상테이블: 실제데이터는 존재하지않고 테이블에 대한 sql 문만 존재
  • 저장공간에서도 유리
  • 뷰를 이용하면 sql-> 코드복잡단순화(접근 자체가 쉬움)
  • 보안성이 뛰어남

권한부여하기(시스템계정에서)

GRANT CREATE VIEW TO SCOTT;

SCOTT계정 접속

 

뷰(view)생성하는 형식

CREATE [OR REPLACE] VIEW 뷰이름(컬럼명, 컬럼명)     //  [OR REPLACE]는 생략 가능 

AS (뷰에 저장할 SELECT문)

 

CREATE OR REPLACE -> 만약 생성할 뷰가 없으면 뷰가 생성되고, 생성할 뷰가 있으면 교체


연습해보기

CREATE VIEW VIEW_EMP 
AS (SELECT * FROM ENP
	WHERE DEPTNO=20);

CREATE VIEW V_EMP
 AS(SELECT EMPNO,ENAME,JOB,HIREDATE FROM EMP);

 

CREATE OR REPLACE VIEW V_EMP
AS 

		(SELECT ENAME,JOB,TO_CHAR(HIREDATE, 'YYYY-MM-DD') AS HIRE
        FROM EMP,DEPT
        WHERE EMP.DEPTNO= DEPT.DEPTNO);
        
        SELECT*FROM V_EMP;

CREATE 있으면 생성 없으면 REPLACE로 

 

뷰테이블에서는 컬럼명을 꼭 지정해주는 것이 좋음.

 

뷰 지우기

DROP VIEW V_EMP;


권한 (DCL)

DDL 데이터 정의어: CREATE, ALTER ,DROP

DML 데이터 조작어: SELECT, INSERT,UPDATE,DELETE

DCL 데이터 제어어: COMMIT, ROLLBACK, GRANT( 권한부여), REVOKE(권한회수)

 

GRANT CREATE VIEW TO SCOTT

GRANT 권한 TO 사용자 

 

USER

CREATE USER: 사용자 생성

ALTER USER: 사용자 수정

DROP USER: 사용자 삭제 

 

SESSION: 접속

TABLE:테이블

INDEX:인덱스

VIEW: 뷰

SEQUENCE: 시퀀스

 


ERD

 

요구조건 분석-> 개념적 설계->논리적 설계->물리적 설계

 

간단한 ERP 예시

Intelligent Diagramming | Lucidchart

 

Intelligent Diagramming | Lucidchart

Lucidchart is your solution for visual communication and cross-platform collaboration.

www.lucidchart.com

 

관계도 그릴 수 있는 사이트 ↑

 

실제예시 ↑

고객, 대여내역, 도서 테이블에 대한 lucidchart 이용 ↓

쇼핑몰 만드려고할 때

회원가입 

상품주문

 

회원가입-> 아이디, 비밀번호 , 이름 

상품주문-> 주문코드,상품명, 수량 ,가격,주문일자

 

 

1개에서 1개
0개에서 N개

지금은 1:N (일 대 다 ) 테이블이지만 다대다면  정규화를 생각해보면 됨

이런식으로 EXPORT TO ERD DATA 도 가능 ↑

 


ERDCloud

 

ERDCloud

Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.

www.erdcloud.com

↑ 위 사이트에서도 ERD 가능 

D

위처럼 작업 가능 ↑

 

게시판 설계

게시판 구축을 위한 ERD( 실제로는 보통 검색을 해서 잘 고쳐씀) 

회원가입

게시판 글작성 






 JSP 

웹 서버        WAS(Web Application Server)(와스)  - 톰캣이 와스 종류 중 하나

 

정적 페이지 -html, 

동적 페이지- jsp

 

WAS에서 동적인 페이지제공 

-웹 컨테이너/ 서블릿 컨테이너

 

JAVA+ SERVLET + JSP 

 

SERVLET (CLASS라고 생각하면 편함) 

서블릿만들어보기

서블릿 

자바(코드)를 이용해서 웹에 실행되는 프로그램을 만드는 것 

 

웹브라우저는 자바코드를 모름

 

톰캣에 있는 httpServlet 클래스를 상속받아야 하고 상속받은 클래스가  서블릿(servlet)클래스가 됨

 

 

html에서 form 태그

<form method="get/post"  action=>


<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

	<form method="get" action="Sample01">
		<input type="submit" value="get">
	</form>

	<form method="post" action="Sample01">
		<input type="submit" value="post">
	</form>



</body>
</html>

  

package unit01;

import java.io.IOException;
import java.io.PrintWriter;

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


/**
 * Servlet implementation class Sampe01
 */
@WebServlet("/Sample01")
public class Sample01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Sample01() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//바이너리(이진수), 바이트 형식으로 입출력 하는것이 아니라 문자를 입출력 하기때문에 PrintStream사용
		// PrintStream은 문자(다국어) 사용하기 번거러움
		// printWriter는 비교적 쉬워서 이것을 사용
		PrintWriter out= response.getWriter();
		for (int i = 0; i < 10; i++) {
			out.print("<h1>hello doget</h1>");

		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("dopost호출");
	}

}
<%@page import="sun.tools.jar.resources.jar"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<%
		int i=10;
		int j=20;
	%>
	
	<h1><%=i+j %></h1>
</body>
</html>


정리

서블릿

->자바클래스 안에 html 작성 (스트림이용)

서블릿이란? 클라이언트의 요청(Request)을 받아주고 응답(Response)할 수 있게, 웹서버와 소켓으로 통신하며 대표적인 예로 톰캣(Tomcat)

[JSP] 서블릿(Servlet)이란? - MangKyu's Diary (tistory.com)

 

[JSP] 서블릿(Servlet)이란?

1. Servlet(서블릿) 서블릿을 한 줄로 정의하자면 아래와 같습니다. 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해서,

mangkyu.tistory.com

JSP

->html 안에 자바코드를 작성

 

front 단은 jsp에서

backend 단은 서블릿에서 주로 사용 

 


서블릿

URL Mapping  

뒤에 오는 URL 이름 바꾸기

 

한글깨짐 현상 해결하기

한글은 2BYTE 톰캣의 기본 인코딩방식은 한글자당 1BYTE로 처리

 


서블릿 동작원리

톰캣이 작동되면 -> JVM(자바버츄얼머신)이 작동 -> 자바문법에 맞는 서블릿을 처리하게됨

동작흐름

 

브라우저에서 요청 -> WAS에 웹서버가 서블릿 요청을 인식-> 서블릿컨테이너에게 수행하도록 넘김

-> 서블릿은 스레드를 작동 -> 서블릿 객체를 생성하고 처리 -> 서블릿 객체의 처리가 완료되면 스레드도 종료

-> 서블릿 수행결과가 웹서버로 전달 -> 브라우저에게 전달하며 끝남


서블릿 Life cycle ( 라이프 사이클) 


쿼리스트링 

클라이언트(사용자) -> 값을 전달 ( 서버한테) 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<form method="get" action="qs">
		횟수 입력 : <input type="text" name="cnt">
		<input type="submit" value="전송">
	</form>
</body>
</html>
package unit01;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class QueryString
 */
@WebServlet("/qs")
public class QueryString extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public QueryString() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		//request 문자로 전달되므로 형변환 시켜야함
		int c = Integer.parseInt(request.getParameter("cnt"));
		
		PrintWriter out = response.getWriter();
		
		for(int i=0; i<c; i++) {
			out.print("안녕<br>");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

서버 실행 후 입력창에 원하는 숫자를 입력 후 전송 버튼을 누르

 

주소창에 클라이언트가 전달 한 값을 서버가 처리하면서 주소값도 알맞게 바뀌고

값도 정상적으로 출력

 

  • get : 길이제한 255 (보안에 취약)
  • post 길이제한 없음 (보안이 get보다 좋은편)

HTML에서 이름과 나이를 입력하고 전송을 누르면

-> 해당하는 사람의 이름과 나이가 출력되게끔 

결과물은  이름: XXXX 나이:XXXX살로 되게끔 비고: 20살이상이면 성인, 아니면 청소년 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
	<form method="post" action="qs">
		이름 입력 : <input type="text" name="name">
		나이 입력 : <input type="text" name="age">
		<input type="submit" value="전송">
		
	</form>
</body>
</html>
package unit01;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class QueryString
 */
@WebServlet("/qs")
public class QueryString extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public QueryString() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
	    response.setContentType("text/html; charset=utf-8");
		
		//리스폰 요청받은거 반환
		PrintWriter out = response.getWriter();
		
		
		//request 문자로 전달되므로 형변환 시켜야함
		String name = request.getParameter("name");

		
		
		int c = Integer.parseInt(request.getParameter("age"));
//		out.printf("이름 : %s\n <br> 나이  : %d\n <br>", name, c);
		
		out.print("이름 : " + name + "<br>");
	    out.print("나이 : " + c + "<br>");

		
		if(c >= 20) {
			out.print("비고 : 성인");
		} else {
			out.print("비고 : 청소년");
		}

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		doGet(request, response);
	}

}

 


 

728x90