・각 데이터베이스 컴페니가 JDBC용 API를 제공하기 때문에 그 jar파일만 받으면 됨. 오라클과 같은경우는 자바와 사이가 좋아서(오라클 사가 자바소유) 자바 jar파일 모둠안에 odbc6_g.jar 이 들어있음


・일단 odbc6_g.jar을 받아와야 하는데, 어디있냐..

보통 일반적으로 c직하에 odbc가 설치되었을때의 패스는 C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib이다.

odbc6_g.jar를 복사한다.


・다음은 이클립스를 사용할 것이므로, 이클립스가 어떤 패스로 자바 라이브러리를 참조하는지 알아야함

window - preference - Java - Build path - Classpath Variable로 가서 이클립스가 참조하는 라이브러리를 확인함

패스를 타고들어가면 그 디렉토리가 이클립스에서 라이브러리로 사용하는 jar들을 모두 가지고 있음. 그중에 ext라는 외부 jar을 보관하는 폴더가 있는데 그 안에다가 odbc6_g.jar을 넣으면 된다.




















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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>
 
<%!
    Connection conn;
    Statement stmt;
    ResultSet rSet;
    
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:xe";
    String uId ="Java_webApp";
    String uPw ="kk5dd0ss2";
    String id;
 
%>
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    
    <!-- Driver load -->
    <%
    
        try{
            Class.forName(driver);
            conn = DriverManager.getConnection(url, uId, uPw);
            stmt = conn.createStatement();
            
            request.setCharacterEncoding("EUC-KR");
            id = request.getParameter("id");
            System.out.println(id);
            String query = "select pw from member where id='"+id+"'";
            rSet = stmt.executeQuery(query);
            
            while(rSet.next()){
                String result = rSet.getString("pw");
                
                out.println("검색값 :" + result);
            }
        
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            try{
                if(rSet!=null)rSet.close();
                if(stmt!=null)rSet.close();
                if(conn!=null)rSet.close();
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
    %>
 
</body>
</html>
cs





jsp에서의 자바빈이란? : java파일로 class파일(객체)를 설계해 놓고, jsp에서 필요에 따라 class를 끌어다 쓰는데 이때 class(객체)를 빈이라고 부른다.

<jsp: ~~> 라는 jsp 액션태그를 이용한다.


















・매회 객체의 클래스 이름을 통해 가져오는게 아니라 useBean을 통해서 클래스와 id값을 연결시키고, 이후부터는 id값을 통해 객체의 프로퍼티에 접근한다.



































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
package com.javalec.ex;
 
public class javaBeanTest {
    private String id;
    private String pw;
    private String bank;
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPw() {
        return pw;
    }
    public void setPw(String pw) {
        this.pw = pw;
    }
    public String getBank() {
        return bank;
    }
    public void setBank(String bank) {
        this.bank = bank;
    }
}
 
cs





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    
<jsp:useBean id="personalInfo" class="com.javalec.ex.javaBeanTest" scope="page"></jsp:useBean>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <jsp:setProperty name="personalInfo" property="id" value="da91love"/>
    <jsp:setProperty name="personalInfo" property="pw" value="123123"/>
    <jsp:setProperty name="personalInfo" property="bank" value="kookmin"/>
    
    id : <jsp:getProperty  name="personalInfo" property="id"/><br/>
    pw : <jsp:getProperty  name="personalInfo" property="pw"/><br/>
    bank : <jsp:getProperty  name="personalInfo" property="bank"/><br/>
    
</body>
</html>
cs
















・에러가 발생한 페이지(위에서 왼쪽)

<%@ page errorPage="errorPage.jsp"%> : 에러발생시 특정페이지로 가라


・errorPage.jsp

<%@ page isErrorPage = "true" %> :  이 페이지 지시자를 적어주지 않으면 exception 객체를 사용할 수 없다.


・<% response.setStatus(200);%> : errorPage.jsp페이지는 에러페이지가 아니라 에러를 처리하는 정상적인 페이지 이기 때문에 200status를 띄어준다.








































・쿠키는 클라이언트(브라우저)에 객체로 저장되지만 세션은 서버에 객체로 저장되기 때문에 보안에 강하다.

쿠키는 4kb 짜리 300개가 최대 용량이지만, 세션은 로컬에 저장되는 것이 아니라 서버에 저장되기 때문에 데이터한계가없다.

브라우저 1개당 하나의 세션객체를 생성할 수 있다.


・session은 new를 사용하지 않아도 기본적으로 생성되어 있는 내부 객체이다. 따라서, session.setAttribute(세션이름,세션데이터)처럼 메서드나 프로퍼티를 바로 사용가능하다


・session.getAttribute(세션이름)의 리턴값은 Object 타입으로 정해져있다.


・c:/apache-tomcat-8.5.23/conf/web.xml에 세션정보가이 저장된다.즉, 서버에 세션정보가 저장된다.

























1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
 
<%
    session.setAttribute("id""thisIsId");
    session.setAttribute("pw""12345678");
    session.setAttribute("bank""국민은행");
    session.setAttribute("account""123123");
%>
 
    <a href="./sessionTest3.jsp">click</a>
</body>
</html>
cs






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
31
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <%
    String id;
    Object obj1 = session.getAttribute("id");
    id = obj1.toString();
    out.println(id+"</br>");
    
    
    ////////////////////////////////////////////////
    String sKey;
    String sVal;
    
    Enumeration infos = session.getAttributeNames();
    while(infos.hasMoreElements()){
        sKey=infos.nextElement().toString();
        sVal=session.getAttribute(sKey).toString();
        out.println(sKey + ":" + sVal +"</br>");
    }
    
    %>
</body>
</html>
cs


・session.getAttribute의 리턴값은 Object 타입이다.


・session.getAttributeNames의 리턴값은 Enumeration 타입이다.





















・http의 특징 중 하나: 클라이언트의 리퀘스트가들어오면 서버에서 레스폰해준다.  이때 레스폰이 끝나면 서버와의 접속은 끊긴다. 이를 무상태 서버, 무상태 로직이라고 부른다. 서버쪽에서는 클라이언트가 어떤 요청을 했던간에 관계를 끊기 때문에 레스폰 했던 정보를 따로 저장해두지 않는다. 그런데 연결이 끊긴 상태에서 정보를 지속적으로 유지해야할 필요성이 생긴다면 어떻게 해야할까. 예를 들어 로그인 페이지에서 로그인과 페스워드 정보가 서버에 의해 인증 되어 클라이언트에게 레스폰되었다. 이때 서버는 레스폰후 끊기기 때문에 로그인 페이지에서의 인증결과를 가지고 있지 않다. 유저가 다음페이지로 이동할 시 서버는 로그인 아이디와 패스워드 정보를 가지고 있지 않은데 어떻게 해야할까..

이때 사용되는 것이 쿠키라는 개념이다. 위의 예를 통해 설명하면, 로그인 페이지에서 인증한 아이디와 페스워드를 쿠키객체에 담아 브라우저에 저장하고, 유저가 다음페이지로 넘어갔을 때도 다시 서버에서 인증할 필요없이 쿠키객체에서의 확인을 통해 페이지가 이동해도 지속적으로 인증될 수 있는 로직이 되는 것이다.


물리적인 텍스트가 사용자의 로컬에 저장되기 때문에 보안상의 문제로 잘 사용되지 않아지고 있는 추세지만 잘 알아둘것



・쿠키생성 : Cookie cookie = new Cookie("쿠키이름","쿠키값")

속성설정 : cookie.setMaxAge(X*Y)
response객체에 쿠키 탑재 : response.addCookie(cookie)












・Cookie cookie = new Cookie("cookieN","cookieV") : Cookie클래스를 통해 cookie인스턴스를 설정한다.

・setMaxAge(60*60) : 쿠키의 유효기간을 한시간으로 설정한다.

・response.addCookie(cookie) : response로 브라우저에 cookie객체를 보낸다. 

・Cookie[] cookie = request.getCookie() : 브라우저에 들어간 여러개의 쿠키들은 배열형태로 쌓이게 된다. 따라서 getCookie()메소드의 리턴값은 배열이다.






・setMaxAge(0)으로 설정하면, 쿠키는 삭제되게 된다.


















・forward : 포워딩시 포워딩된 페이지의 url이 찍히지 않고, 포워딩 코드를 포함하는 페이지 url 이 유지된다.

・jsp뿐만아니라 html포워딩도 가능

























・소스코드를 보면 jsp페이지(<html> ~ </html>) 내에 또 jsp페이지(<html> ~ </html>)가 온것을 알 수 있다.








・jsp:param태그를 이용하면 포워딩 하는 페이지에 파라미터를 담아서 포워딩할 수 있다.
























































・<%= %> 태그는 html안에 자바의 변수를 넣는데 사용할 수 있다.

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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <%!
    int age;
    %>
    
    <%
    age = Integer.parseInt(request.getParameter("age"));
    
    if(age>20){%>
        <jsp:forward page="agePass.jsp">
            <jsp:param name="age" value="<%= age %>"/>
        </jsp:forward>
    <%}
    else{%>
        <jsp:forward page="ageFail.jsp"/>
    <%}
    %>
</body>
</html>
cs










・out.println은 콘솔에 찍는게 아니고, html에 출력할 내용을 전달하는 명령어이다.






































지시자(Directives)

<%@ %>태그 사이에 오는 코드

주로 page 지시자를 사용함

contentType, pageEncoding을 사용하여 문서타입과 인코딩을 설정함

contentType 인코딩은 JSP파일을 HTML문서로 변환할 때 적용되는 인코딩

pageEncoding 인코딩은 그냥 JSP파일에 적용되는 인코딩

요즘은 유니코드를 주로 사용하기 때문에 UTF-8을 주로 사용함(한글 문제가 있을 시 EUC-KR을 가끔 사용)

JSP코드가 사용되는 부분은 HTML에서 공백으로 처리됨

trimDirectiveWhitespaces을 설정하면 공백을 없앨 수 있음

import는 자바 프로그래밍 import와 동일한 역할을 수행

 

선언문(Declarations)

<%! %>태그 사이에 오는 코드

서블릿 클래스의 선언부에 오는 내용이라고 보면 됨 (서블릿을 모르면 그냥 PASS)

함수선언 같은 것을 여기서 할 수 있음

클래스(Class)를 따로 구현해서 임포트하는 구조가 깔끔하기 때문에 선언문을 쓸일이 별로 없음

 

스크립트릿(Scriptlet)

<% %>태그 사이에 오는 코드 (가장 기본이 됨)

자바 프로그래밍에서 할 수 있는 일을 여기서 거의 다 할 수 있음

(if문, for문, while문, switch문 등등)

out.print 함수를 사용하면 화면 출력도 가능

 

표현식(Expression)

<%= %>태그 사이에 오는 코드

내장 객체(Implicit Objects)라고 부르기도 함

출력을 할 내용을 여기에 입력함

out.print()함수의 인자로 생각하면 이해하기 쉬움

즉, <%= 출력할 것 %> 와 out.print(출력할 것)은 동일함

세미콜론(;) 사용하면 에러가 남




+ Recent posts