본문 바로가기

IT일반과목/JSP

20180831 집공부11

13번째!!!!

 

쿠키

->웹브라우저에서 서버로 어떤 데이터를 요청 하면, 서버측에서는 알맞은 로직을 수행한 후 데이터를 웹브라우저에 응답 합니다. 그리고, 서버는 웹브라우저와의 관계를 종료합니다. 이렇게, 웹브라우저에 응답 후 관계를 끊는 것은 http프로토콜의 특징 입니다.

연결이 끊겼을 때 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키라는 방식을 사용 합니다.

쿠키는 서버에서 생성하여, 서버가 아닌 클라이언트측에 특정 정보를 저장 합니다. 그리고 서버에 요청 할 때 마다 쿠키의 속성값을 참조 또는 변경 할 수 있습니다.

 

쿠키는 4kb로 용량이 제한적이며, 300개까지 데이터 정보를 가질 수 있습니다.

 

클라이언트가 서버로 request를 보냈을 때 HTTP프로토콜 통신 규약을 쓰는데

HTTP통신규약이 의미가 서버로 보냈을떄 응답을 해줬을떄 관계를 이어가는게 아니라 서버에서 관계를 끊는다. 어떤 요청을 했는지 기억하지 않는다. 웹브라우저에 응답후 관계를 끊는게 http의 특징이라는 것이다.이걸 이어줄 방법이 쿠키인 것이다.

 

 

---------------------------------------------------------------------

쿠키 문법

-> 쿠키는 서버에서 생성되고, 클라이언트측에 전송되어 저장된다고 하였습니다.

 

1. 쿠키 생성 (쿠키클래스를 이용한다.)

2. 속성 설정 (setter를 이용한다.)

3. response 객체에 쿠키 탑재 (response.addCookie()를 이용한다.)

 

---------------------------------------------------------------------

쿠키 관련 메소드

 

setMaxAge() : 쿠키 유효기간을 설정 합니다.

setpath() : 쿠키사용의 유효 디렉토리를 설정 합니다.

setValue() : 쿠키의 값을 설정 합니다.

setVersion() : 쿠키 버전을 설정 합니다.

getMaxAge() : 쿠키 유효기간 정보를 얻습니다.

getName() : 쿠키 이름을 얻습니다.

getPath() : 쿠키사용의 유효 디렉토리 정보를 얻습니다.

getValue() : 쿠키의 값을 얻습니다.

getVersion() : 쿠키 버전을 얻습니다.

 

---------------------------------------------------------------------

cookieset.jsp 파일이다.

서버에서 쿠키를 생성했다. 쿠키아래에 보면 쿠키 앞에 오는게 이름이고 뒤에오는게 value이다.

쿠키 객체를 생성했고 그리고 setMaxAge(60*60)이면 1시간이다. 1시간동안 유지한다는 것이다.

그 후 cookieget.jsp가 있는데 응답을 할 때 쿠키객체를 add해준다.

cookieget.jsp이건 화면에 출력하는게 아니라 여기에서 실행된게 웹브라우저로 간다.

즉 이걸 response객체에 담는 것이다.

 

 

 

<%@ 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>

 

 

<%

Cookie cookie = new Cookie("cookieN", "cookieV");

cookie.setMaxAge(60*60); //1시간

response.addCookie(cookie);

%>

<a href="cookieget.jsp">cookie get</a>

</body>

</html>

 

---------------------------------------------------------------------

cookiget.jsp파일이다.

 

이건 쿠키의 아이를 갖고온다. 쿠키의 이름 있다면 출력한다. 쿠키 getName을 출력한다.

쿠키의 value값도 측정한다

그 후 cookie delete 하면 이제 삭제하는 페이지로 가겠다.

 

 

<%@ 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>

 

<%

Cookie[] cookies = request.getCookies();

for(int i=0; i<cookies.length; i++) {

String str = cookies[i].getName();

if(str.equals("cookieN")) {

out.println("cookies[" + i + "] name : " + cookies[i].getName() + "<br />");

out.println("cookies[" + i + "] value : " + cookies[i].getValue() + "<br />");

out.println("=====================<br />");

}

}

%>

 

<a href="cookiedel.jsp">cookie delete</a>

 

</body>

</html>

 

---------------------------------------------------------------------

cookiedel.jsp 파일이다.

 

 

<%@ 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>

 

<%

Cookie[] cookies = request.getCookies();

for(int i=0; i<cookies.length; i++) {

String str = cookies[i].getName();

if(str.equals("cookieN")) {

out.println("name : " + cookies[i].getName() + "<br />");

cookies[i].setMaxAge(0);

response.addCookie(cookies[i]);

}

}

%>

<a href="cookietest.jsp">쿠키확인</a>

 

</body>

</html>

 

 

 

---------------------------------------------------------------------

cookietest.jsp 코드이다.

 

 

 

<%@ 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>

 

<%

Cookie[] cookies = request.getCookies();

if(cookies != null) {

for(int i=0; i<cookies.length; i++){

out.println(cookies[i].getName() + "<br />");

out.println(cookies[i].getValue() + "<br />");

}

}

%>

 

</body>

</html>

 

---------------------------------------------------------------------

쿠키가 reponse 객체에 탑재를 하지만 삭제를 하게될 경우 getname이 안뜨면서 삭제를 하는 코드이다.

 

 

---------------------------------------------------------------------

세션이란?

-> 세션도 쿠키와 마찬가지로 서버와의 관게를 유지하기 위한 수단이다.

-> , 쿠키와 달리 클라이언트의 특정 위치에 저장되는 것이 아니라, 서버상에 객체로 존재한다.

-> 따라서 세션은 서버에서만 접근이 가능하며 보안이 좋고, 저장할 수 있는 데이터에 한계가 없다.

 

---------------------------------------------------------------------

세션 문법

-> 세션은 클라이언트의 요청이 발생하면 자동생성된다. 그리고 session이라는 내부 객체를 지원하여 세션의 속성을 설정 할 수 있다.

 

클라이언트 요청(웹브라우저)

session 자동 생성

Session 속성 설정(session 내부 객체의 메소드 이용)

 

---------------------------------------------------------------------

세션 관련 메소드

 

setAttribute() : 세션에 데이터를 저장 합니다.

getAttribute() : 세션에서 데이터를 얻습니다.

getAttributeNames() : 세션에 저장되어 있는 모든 데이터의 이름(유니크한 키값)을 얻습니다.

getId() : 자동 생성된 세션의 유니크한 아이디를 얻습니다.

isNew() : 세션이 최초 생성되었는지, 이전에 생성된 세션인지를 구분 합니다.

getMaxInactiveInterval() : 세션의 유효시간을 얻습니다. 가장 최근 요청시점을 기준으로 카운트 됩니다.

(C: \javalec \apache-tomcat-7.0.57 \apache-tomcat-7.0.57 \conf \web.xml 참조)

removeAttribute() : 세션에서 특정 데이터 제거 합니다.

Invalidate() : 세션의 모든 데이터를 삭제 합니다.

 

 

세션객체는 우리가 만드는게 아니라 자동으로 생성이된다.

보안에 강화고 브라우저하나당 세션ID하나씩 만들어준다.

세션이 많이 활용되는 곳은 로그인이나 유지를 할 때 보통 사용한다.

 

---------------------------------------------------------------------

예외 페이지의 필요성

-> JAVA언어에서 아마도 예외처리에 대해서 사전 학습을 했을 것 입니다. JSP, Servlet에서도 예외가 발생 할 수 있습니다.

예외적인 상황이 발생했을 경우 웹컨테이너(톰캣)에서 제공되는 기본적인 예외 페이지가 보여 진다면, 사용자로 하여금 뭔가 불쾌한 느낌이 들면서, 다시는 해당 사이트에 접속하려 들지 않을 것 입니다. 따라서 약간은 다소 딱딱한 에러 페이지를 보다 친근한 느낌이 느껴지는 페이지로 유도 할 수 있습니다.

 

---------------------------------------------------------------------

page지시자를 이용한 예외 처리

 

<%

int I=40/0;

%>

이라면 예외가 발생하는데 이때

<%@ page isErrorPage=“true”%>

<% response.setStatus(200); %>

<% exception.getMessage() %>

이렇게 예외 페이지를 만들 수 있다.

<error-page>

<error-code>404</error-code>

<location>/error404.jsp</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/error500.jsp</location>

</error-page>

 

이렇게 하면 끝!

---------------------------------------------------------------------

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%@ page errorPage="errorPage.jsp"%>

 

<!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 i = 40/0;

%>

</body>

</html>

 

이렇게 할 경우 0으로 나누기 때문에 에러가 발생한다. 그때 에러페이지를 다른데로 만들어서 거기다가 출력하게끔하는 것이다.

 

---------------------------------------------------------------------

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%@ page isErrorPage="true"%>

<% response.setStatus(200); %>

<!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>

에러 발생<br />

<%= exception.getMessage() %>

</body>

</html>

 

에러가 발생할 경우 0으로 나눌수 없다고 표시 될 것이다.

 


 

---------------------------------------------------------------------

 

 

<%@ 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 i = 40/0;

%>

 

</body>

</html>

 

---------------------------------------------------------------------

 

 

<%@ 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>

 

<a href="error03.jsp">error03.jsp</a>

 

</body>

</html>

 

---------------------------------------------------------------------

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%@ page isErrorPage="true" %>

<% response.setStatus(200); %>

<!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>

404에러 입니다.

</body>

</html>

---------------------------------------------------------------------

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%@ page isErrorPage="true" %>

<% response.setStatus(200); %>

<!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>

500에러 입니다.<br />

</body>

</html>

 

 

---------------------------------------------------------------------

에러별로 표시가 될 것이다.

---------------------------------------------------------------------

 

16번째!!! java bin에 대해 알아보겠다.

 

 

빈 이란?

-> 반복적인 작업을 효율적으로 하기 위해 빈을 사용한다. JAVA언어의 데이터(속성)와 기능(메소드)으로 이루어진 클래스이다. JSP페이지를 만들고, 액션 태그를 이용하여 빈을 사용한다. 빈의 내부 데이터를 처리한다.

 

---------------------------------------------------------------------

빈 만들기

-> JAVA언어를 학습 하면서 데이터 객체를 많이 만들었을 것이다. 그에 해당하는 gettersetter이있는데 빈을 만든다는 것은 데이터 객체를 만들기 위한 클래스를 만드는 것이다.

 

클래스에서 속성과 기능이 있는데 이걸 JSP에서는 빈이라고 한다.!!!!!

 

---------------------------------------------------------------------

이걸 보고 빈이라 한다.

이건 student.java이다.

 

 

package com.javalec.ex;

 

public class Student {

private String name;

private int age;

private int grade;

private int studentNum;

public Student() {

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public int getAge() {

return age;

}

 

public void setAge(int age) {

this.age = age;

}

 

public int getGrade() {

return grade;

}

 

public void setGrade(int grade) {

this.grade = grade;

}

 

public int getStudentNum() {

return studentNum;

}

 

public void setStudentNum(int studentNum) {

this.studentNum = studentNum;

}

 

}

 

---------------------------------------------------------------------

 

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<jsp:useBean id="student" class="com.javalec.ex.Student" scope="page" />

<!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="student" property="name" value="홍길동"/>

<jsp:setProperty name="student" property="age" value="13"/>

<jsp:setProperty name="student" property="grade" value="6"/>

<jsp:setProperty name="student" property="studentNum" value="7"/>

이름 : <jsp:getProperty name="student" property="name" /><br />

나이 : <jsp:getProperty name="student" property="age" /><br />

학년 : <jsp:getProperty name="student" property="grade" /><br />

번호 : <jsp:getProperty name="student" property="studentNum" /><br />

 

 

</body>

</html>

 

여기를 보면 setgetter이 있다.


 

---------------------------------------------------------------------

빈 관련 액션 태그(useBean, setProperty, getProperty)

-> 액션 태그 중에서 Bean관련된 태그가 있다. 주로 데이터를 업데이트하고 얻어오는 역할을 한다.

 

useBean

-> 특정 Bean을 사용한다고 명시 할 때 사용한다.

 


 

Scope

page : 생성된 페이지 내에서만 사용 가능 합니다.

request : 요청된 페이지 내에서만 사용 가능 합니다.

session : 웹브라우저의 생명주기와 동일하게 사용 가능 합니다.

application : 웹 어플리케이션 생명주기와 동일하게 사용 가능 합니다.

 

---------------------------------------------------------------------

setProperty

-> 데이터 값을 설정 할 때 사용한다.


 

---------------------------------------------------------------------

getProperty

-> 데이터 값을 가져올 때 사용한다.


 

 

 

 

 

---------------------------------------------------------------------

 

 

 

<%@page import="java.sql.DriverManager"%>

<%@page import="java.sql.ResultSet"%>

<%@page import="java.sql.Statement"%>

<%@page import="java.sql.Connection"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<%!

Connection connection;

Statement statement;

ResultSet resultSet;

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@localhost:1521:xe";

String uid = "member";

String upw = "member";

String query = "select * from member";

%>

<!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>

 

<%

try{

Class.forName(driver); //oracle.jdbc.driver.OracleDriver

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

statement = connection.createStatement();

resultSet = statement.executeQuery(query); //select * from member

while(resultSet.next()){

String id = resultSet.getString("id");

String pw = resultSet.getString("pw");

String name = resultSet.getString("name");

String phone = resultSet.getString("phone");

out.println("아이디 : " + id + ", 비밀번호 : " + pw + ", 이름 : " + name + ", 전화번호 : " + phone + "<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>

 

자바에서 JDBC연동하는거랑 같다고 생각하면 될 것 같다.


'IT일반과목 > JSP' 카테고리의 다른 글

20180902 집공부13 (프로젝트1)  (0) 2018.09.02
20180902 집공부12 (프로젝트)  (0) 2018.09.02
20180831 집공부10  (0) 2018.08.31
20180829 집공부9  (0) 2018.08.29
20180827 집공부7 문제풀기  (0) 2018.08.27