ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA WEB - 4
    Study 2023. 2. 13. 10:20

    JSP(Java Server Page)

    scriptlet
     - jsp에서 자바 소스를 작성할 수 있는 영역
     - <% %> 태그 안에 코드를 작성 가능
     한 줄 주석, 멀티 라인 주석은 자바와 동일
     전체 주석 : <%-- %>
       - html 주석은 <!-- -->

     jsp가 변환한 실제 자바 소스 코드는 _jspService 내부에 위치한다.

     jsp 변환 java 파일 위치 : \.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\webdev\org\apache\jsp

     

    페이지 디렉티브(page directive) 
      : JSP 페이지에 대한 설정 정보를 지정할 때 사용

      <%@ %> 태그 안에 작성

     

    자주 사용하는 객체들은 jsp가 내장 객체로 가지고 있다.

     - out, session, response 등

     

    표현식(expression)
     : response에 의해 html에 자바 코드의 값을 표시할 수 있다.

     <%= %> 안에 작성

     

    메소드 작성

     <%! %> 안에 작성
     jsp가 변환한 실제 자바 소스 코드는 _jspService 외부에 위치한다.


    DataBase

    게시물 테이블 생성
     - DB 연동된 게시판을 만들기 위해 게시물 테이블 생성

     
    CREATE TABLE m1board(
        no          NUMBER          PRIMARY KEY,
        title       VARCHAR2(100)   NOT NULL,
        name        VARCHAR2(30)    NOT NULL,
        password    VARCHAR2(30)    NOT NULL,
        content     VARCHAR2(4000)  NOT NULL,
        writeday    DATE            DEFAULT SYSDATE,
        readcount   NUMBER          DEFAULT 0
    );
    cs

     no : 게시물 고유 번호

      - 중복 허용하지 않도록 기본 키로 설정

     title : 게시물 제목 

      - 미입력 시 등록 불가

     name : 작성자 이름

      - 미입력 시 등록 불가

     password : 비밀번호

      - 미입력 시 등록 불가

     content : 게시물 내용

      - 미입력 시 등록 불가

     writeday : 게시물 작성날짜

      - 현재 시각(게시물 생성 시각)을 기본 값으로 설정

     readcount : 게시물 조회수

      - 0을 기본 값으로 설정(게시물 등록 시 0부터 시작)

     

    테이블 삭제

     - 생성한 테이블이 잘못 작성된 경우 삭제 쿼리 실행 후 생성 쿼리 실행

    1
    DROP TABLE m1board;
    cs

     

    게시판 번호를 자동으로 부여할 수 있도록 시퀀스 생성

     - oracle DB에서 지원하는 기능

    CREATE SEQUENCE m1board_seq NOCACHE;

     ※ 시퀀스(sequence)

       - 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체

      [Oracle] 오라클 시퀀스(Sequence) 사용법 총정리 (생성, 조회, 수정, 삭제)등 (tistory.com)

     

    [Oracle] 오라클 시퀀스(Sequence) 사용법 총정리 (생성, 조회, 수정, 삭제)등

    시퀀스(Sequence)란? 시퀀스란 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체입니다. 보통 PK값에 중복값을 방지하기위해 사용합니다. 예를들어 게시판에 글이 하나 추가될때

    coding-factory.tistory.com

     

    시퀀스 삭제

    DROP SEQUENCE m1board_seq;

    DTO(Data Transfer Object) 또는 VO(Value Object)

     - DB 테이블에 저장할 데이터를 레코드 단위로 전달하기 위해 만든 클래스
     - 테이블의 행(레코드)은 객체에 대응되고, 컬럼은 멤버 필드에 대응된다.


    DAO(Data Access Object)

     - DB에 접근하여 데이터의 입력, 삭제, 수정, 조회를 수행하는 기능을 모아놓은 클래스
     - DB 연결 정보 포함(접속할 DB 정보, 계정 정보 등)

     

    리팩토링(Refactoring)

     : 코드의 결과는 그대로 유지한 채로 코드를 간결하게 정리하는 작업. (중복된 코드 제거 등)


    JDBC


    JDBC 작업의 일반적인 순서

     1) DB 연결을 위한 Connection을 얻어온다.

     2) SQL 쿼리를 실행하는 PreparedStatement를 얻어온다.

     3) 쿼리 실행(필요 시 바인딩 처리)

     4) SELECT의 경우 쿼리 실행 결과를 ResultSet으로 받아서 정보를 저장할 객체(DTO)에 담아준다. 

     5) 작업 중 사용한 자원은 반드시 역순으로 해제

     6) JDBC API가 발생시키는 예외를 처리 (try~catch, 혹은 throws 사용)

     


    커넥션 풀(Connection Pool)

    : DB와 연결된 커네견을 미리 만들어서 풀(Pool) 속에 저장해두고 필요할 때에 커넥션을 가져다 쓰고 다시 풀에 반환하는 기법

    - DB 작업의 효율을 향상시키기 위해 사용

    - 톰캣에서 커넥션 풀 역할해주는 객체(DataSource)를 제공

     

    server.xml

     - 톰캣에서 제공하는 DataSource 를 사용하기 위해 server.xml  수정

     - 오타가 발생하면 가져오지 못하므로 대소문자 주의하여 작성

    <Context docBase="webdev" path="/webdev" reloadable="true" source="org.eclipse.jst.jee.server:webdev">
          	<Resource name="OracleCP" 
          		auth="Container"
          		driverClassName="oracle.jdbc.OracleDriver"
          		url="jdbc:oracle:thin:@localhost:1521/xepdb1"
          		username="[계정 명]"
          		password="[비밀번호]"
          		type="javax.sql.DataSource"
          		maxActive="50"
          		maxWait="-1"
          	/>
          </Context>

     

    또는 META-INF 폴더에 다음과 같은 내용을 작성한 context.xml 파일 추가

    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
        <Resource name="OracleCP" 
                  auth="Container"
                  driverClassName="oracle.jdbc.OracleDriver"
                  url="jdbc:oracle:thin:@localhost:1521/xepdb1"
                  username="oraclejava"
                  password="oraclejava"
                  type="javax.sql.DataSource"
                  maxActive="50"
                  maxWait="-1" />
    </Context>
    cs

     

    BoardDao

     - DataSource 객체를 생성하여 기존 커넥션 코드 대체

    private DataSource ds = null;
    private BoardDao() { 
    	try {
    		//Class.forName("oracle.jdbc.OracleDriver"); //드라이버 존재 유무 확인
    		Context context = new InitialContext();
    		ds = (DataSource) context.lookup("java:comp/env/OracleCP");
    	} catch (Exception e) {
    		e.printStackTrace();
    	} 
    }
    private Connection getConnection() throws SQLException {
    	//return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/xepdb1", "oraclejava", "oraclejava");
    	return ds.getConnection(); //미리 준비된 커넥션 풀에서 하나 튕겨준다.
    }

    MVC(Model, View, Controller) 패턴

    DAO가 Model 역할을 한다.

    jsp가 View 역할을 한다.

    servlet이 Controller 역할을 한다.


    webdev_20230213.war
    4.52MB

    'Study' 카테고리의 다른 글

    JAVA WEB - 6  (0) 2023.02.15
    JAVA WEB - 5  (0) 2023.02.14
    JAVA WEP - 3  (0) 2023.02.10
    JAVA WEP - 2  (0) 2023.02.10
    JAVA WEP - 1  (0) 2023.02.10
Designed by Tistory.