데이타 베이스 생성 및 유저생성 권한
create database chap14;
create user 'jspexam' @'localhost' identified by 'jsppw';
grant all privileges on chap14.* to 'jspexam'@'localhost';
create database 데이타베이스명;
create user '계정명' @'호스트' identified by '비밀번호';
grant 권한목록 on 데이터베이스.대상 to '계정명'@'호스트';
Class.forName()
- MySQL : com.mysql.jdbc.Driver
- 오라클 : oracle.jdbc.driver.OracleDriver
- Ms SQL 서버 : com.microsoft.sqlserver.jdbc.SQLServerDriver
Class.forName() 메서드를 통해서 로딩될 때 자동으로 jdbc 드라이버로 등록한다.
자바 초보자를 위한 자바의 익셉션 처리
자바에서는 에러를 익셉션으로 처리한다. 처리 과정에서 어떤 문제가 발생하면 문제와 관련된 익셉션을 발생시킨다. 예를 들어, DriverManager.getConnection() 메서드는 데이터베이스 커넥션을 연결하는 과정에서 문제가 발생하면 SQLException을 발생시키다. 이런 익셉션을 처리할 때 try-catch-finally 블록을 사용한다.
Statement
Statement의 excuteUpdate() 메서드는 변경된 레코드의 개수를 리턴한다.
성공이면 1을 반환, 아니면 0을 리턴한다.
ResultSet
Statement의 executeQuery() 메서드는 SELECT 쿼리를 실행할 때 사용되며 실행결과를 ResultSet 객체에 담아서 리턴한다.
ResultSet 클래스는 next() 메서더를 제공하는데, next 메서드를 사용해서 결과의 존재 여부를 확인할 수 있다.
최초의 커서는 1행 이전에 존재한다. 마지막 행에 커서가 도달하면 next 메서드는 false 를 리턴한다.
PreparedStatement
Statement와 동일한 기능을 제공한다.
차이점은 SQL 쿼리의 틀을 미리 생성해 놓고 값을 나중에 지정한다는 것이다.
- 값 변환을 자동으로 하기 위해
- 간결한 코드를 위해
웹 어플리케이션 구동시 JDBC 드라이버 로딩하기
jdbc 드라이버는 어플리케이션 구동시에 한번만 로딩하면 된다.
--java
public class MySQLDriverLoader extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch(Exception ex) {
throw new ServletException(ex);
}
}
}
--web.xml
<servlet>
<servlet-name>mysqlDriverLoader</servlet-name>
<servlet-class>jdbc.MySQLDriverLoader</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
web.xml 에 서블릿을 등록하면 init 메서드가 웹 어플리케이션 실행 시 실행된다.
트랜잭션
구현방법
- JDBC의 오토 커밋 모드를 false로 지정하는 방법 (p.414)
- JTA(Java Transaction API)를 이용하는 방법
커넥션 풀
데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool) 속에 저장해 두고 있다가 필요할 때에 커넥션을 풀에서 가져다 쓰고 다시 풀에 반환하는 기법을 의미한다.
특징
- 풀 속에 미리 생성되어 있기 때문에 커넥션을 생성하는 데 드는 연결 시간을 줄일 수 있다.
- 커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수가 일정하게 유지된다.
소스코드는 p.419
DAO ( Data Access Object)
데이터에 접글할 때 사용하는 개체를 위한 클래스
테이블로부터 데이터를 읽어와 자바 객체로 변환하거나 자바 객체의 값을 테이블에 저장한다.
서비스 클래스
사용자의 요청을 처리하기 위한 기능을 제공.
싱글톤
NoticeService ns1 = new NoticeService();
NoticeService ns2 = new NoticeService();
Board board1 = ns1.read(id);
Board board2 = ns2.read(id);
Board board3 = ns1.read(id);
--싱글톤 적용
NoticeService ns1 = NoticeService.getInstance();
Board board1 = ns1.read(id);
NoticeService ns2 = NoticeService.getInstance();
위와 같이 한 개의 서비스 객체를 여러 번 사용하는 것과 매번 새로운 서비스 객체를 생성해서 사용하는 것이 기능상 차이가 없다면, 매번 새오운 서비스 객체를 생성하지 않고 한 개의 객체를 재사용하도록 구현해도 될 것이다.
이럴 때 적용 가능한 패턴이 싱클톤 패턴이다.
생성자를 직접 호출하지 않고 객체에 접근할 수 있는 getInstance() 정적 메서드를 이용해서 객체를 구한 뒤 필요한 기능을 실행한다.
getInstance 메서드는 매번 동일한 객체를 리턴하므로 위 코드에서 ns1과 ns2는 같은 객체를 참조하게 된다.
커스텀 태그
JSTL도 커스텀 태그의 일종으로, JSTL은 다수의 웹 어플리케이션에서 필요로 하는 커스텀 태그를 모아 놓은 커스텀 태그 라이브러리이다.
장점
- 재사용 : 한 번 작성한 커스텀 태그는 어떤 JSP 컨터이너에서도 사용 가능.
- 쉽고 단순한 JSP 코드 작성 : JSTL과 EL을 사용하는 것이 스크립트 코드만 사용하기보다 쉽다.
- 코드 가독성 향상 : 커스텀 태그는 뚜렷한 의도를 갖고 있기 때문에 가독성이 높다.
태그파일
JSP 문법을 사용해서 커스텀 태그로 동작할 수 있도록 만들어진 소스 코드
WEB_INF/tags 폴더나 그 하위 폴더에 위치한다.
확장자 .tag .tagx
소스코드 p.478
** 태그파일 속성 설정 방법
<%@ tag body-content="empty" pageEncoding="utf-8" %>
<%@ tag trimDirectiveWhitespaces="true" %>
<%@ attribute name="title" required="true" %>
<%@ attribute name="level" type="java.lang.Integer" %>
<%
String headStartTag = null;
String headEndTag = null;
if (level == null) {
headStartTag = "<h1>";
headEndTag = "</h1>";
} else if (level == 1) {
headStartTag = "<h1>";
headEndTag = "</h1>";
} else if (level == 2) {
headStartTag = "<h2>";
headEndTag = "</h2>";
} else if (level == 3) {
headStartTag = "<h3>";
headEndTag = "</h3>";
}
%>
<%= headStartTag %>
${title}
<%= headEndTag %>
** jsp 파일
* frag
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>
<html>
<head><title>제목 출력</title></head>
<body>
<tf:header_frag level="2">
<jsp:attribute name="title">텍스트 제목</jsp:attribute>
</tf:header_frag>
</body>
</html>
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ taglib prefix="tf" tagdir="/WEB-INF/tags" %>
<html>
<head><title>제목 출력</title></head>
<body>
<tf:header title="텍스트 제목" level="2"/>
<tf:header title="${'EL 제목'}" level="3"/>
<tf:header title='<%= "표현식 제목" %>' />
</body>
</html>
결과
'Web > JSP' 카테고리의 다른 글
Request, Response 간단 개념정리 (0) | 2020.06.20 |
---|---|
MVC 패턴 (0) | 2020.05.18 |
서블릿 (Servlet) , 필터 (0) | 2020.05.16 |
JSP 기본 (0) | 2020.05.07 |