원지의 개발
article thumbnail
728x90

 

JSP 내장 객체

  • jsp 파일 내에 객체 생성 없이 바로 사용할 수 있는 객체
  • jsp 컨테이너에 의해 서블릿으로 변환될 때 자동으로 객체 생성

Requset

  • 웹 브라우저를 통해 서버에 어떤 정보를 요청
  • 요청 정보가 담기고 관리되는 곳이 request 객체
  • 생명주기: 페이지 별로(요청 영역마다) 생성되고 사라짐
  • request 객체가 제공하는 기능 (읽기)
    클라이언트, 서버와 관련된 정보 읽기 / 클라이언트가 전송한 요청 파라미터 읽기 / 클라이언트가 전송한 쿠키 읽기
name = 변수명
value = 값

checkbox, radio, select = value 필수

<form> 태그를 통해 데이터를 전송할 때는 request.getParameter() 메서드를 사용하여 요청(request)에서 데이터를 받고, 받은 데이터를 처리한 후 response 객체를 사용하여 클라이언트로 응답(response)을 보내는 것이 일반적인 방법

Requset 메서드

메서드 (이름보면 앎) 기능
getContextPath() String - 경로 얻기, 프로젝트 식별이름
getMethod(): String - 웹  브라우저가  정보를  전송할  때  사용한  요청  방식(get, post)
getServerName() String - 연결할  때  사용한  서버  이름
getServerPort() int - 서버가  실행중인  포트  번호
getRequestURL() String - 전체주소
getRequestURI() String - 전체주소 - 포트번호
getRemoteAddr() String - ip 주소
 getProtocol() String - 프로토콜
 getParameter(name) 단일값, String 사용
이름이  name인  파라미터  값, 존재하지  않을  경우  null
getParameterValues(name) 단일값x, String 사용
이름이  name인  모든  파라미터  값들을  배열로, 존재하지  않을  경우  null

1.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%--
		태그에 필요한 속성을 지정하고 POST방식으로 전달하고, OK페이지에서는 사용자가 입력한 값 출력
	--%>

	<form action="req_quiz_ok.jsp" method="post">
		<h3>입력양식</h3>
		아이디: <input type="text" name="id" placeholder="힌트: 8글자" maxlength="8" size="10"> <br>
        비번: <input type="password" name="pw" placeholder="힌트: 알면뭐하게" size="10"> <br>

		<!-- checkbox, radio속성은 반드시 name속성을 통일 시켜서 하나의 그룹으로 묶습니다. -->
		<!-- checkbox 다중행 여러개 선택가능, radio는 단 1개 선택가능 -->
		관심분야: <input type="checkbox" name="inter" value="Java"> JAVA
        		 <input type="checkbox" name="inter" value="JSP"> JSP
                 <input type="checkbox" name="inter" value="JS"> JS
                 <input type="checkbox" name="inter" value="HTML"> HTML
                 <input type="checkbox" name="inter" value="ORACLE"> ORACLE <br>

		전공분야: <input type="radio" name="major" value="경영">경영
        		 <input type="radio" name="major" value="컴퓨터">컴퓨터
                 <input type="radio" name="major" value="수학">수학
                 <input type="radio" name="major" value="기계공학">기계공학 <br>

		<!-- name이란 속성은 다 가지고 있어야 함. 나중에 식별할 때 사용됨 -->
		<!-- 식별할 수 있는 value값 있어야 함. 아니면 서울,경기,부산,인천 나옴 -->
		지역: <select name="region">
			<option value="s">서울</option>
			<option value="k">경기</option>
			<option value="b">부산</option>
			<option value="e">인천</option>
		</select> <br> 정보입력: <br>
		<textarea rows="5" cols="30" name="입력란"></textarea>

		<br>
		<!-- form태그의 데이터를 서버로 전송하는 역할 -->

		<input type="submit" value="확인">
        <input type="reset" value="폼초기화">

	</form>

</body>
</html>
<%@page import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%-- 변수 설정시 영어로 하자~ --%>
<%
	request.setCharacterEncoding("utf-8");

	String 아이디 = request.getParameter("id");
	String 비밀번호 = request.getParameter("pw");
	
	String[] 관심분야 = request.getParameterValues("inter"); //checkbox
	String 전공분야 = request.getParameter("major");
	
	String 지역 = request.getParameter("region");
	
	String 정보입력 = request.getParameter("입력란");	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	아이디:
	<%=아이디 %><br> 비밀번호:
	<%=비밀번호 %><br>
	<br> 관심분야:
	<%=Arrays.toString(관심분야) %><br> 전공분야:
	<%=전공분야 %><br>
	<br> 지역:
	<%=지역 %><br> 추가정보:
	<%=정보입력 %><br>

</body>
</html>

2.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%--
	1. form태그를 이용하여 post형식으로 이름, 키와 몸무게를 입력받음
	2. req_quiz02_ok.jsp로 전송
	3. 해당 페이지에서는 넘어간 값을 BMI지수로 처리
	4. BMI공식 = kg / (cm/100 * cm/100)  -> 문자열이기 때문에 형변환 진행(실수)
	화면에 이름, 키, 몸무게 BMI지수를 출력
	if를 통해 BMI지수가 25이상 과체중, 18 이하라면 저체중, 나머지는 정상으로 출력
	 --%>

	<form action="req_quiz02_ok.jsp" method="post">

		<h3>BMI 지수 확인</h3>
		이름: <input type="text" name="name"><br>
		키: <input type="text" name="height"><br>
		몸무게: <input type="text" name="weight"><br>
		<input type="submit" value="확인">
		
	</form>


</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%
	request.setCharacterEncoding("utf-8");
	
	//값 받기
	String name = request.getParameter("name");
	String height = request.getParameter("height");
	String weight = request.getParameter("weight");
	
	//실수형으로 변환
	double dh = Double.parseDouble(height);
	double dw = Double.parseDouble(weight);
	
	// 제곱이어서 Math.pow 사용해도 됨
	double bmi = dw / (dh/100 * dh/100);
	
	//String result 변수 선언해서 result값만 출력하는 것도 가능
	
%>

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

	<h3>
		IBM 지수 확인<br>
	</h3>
	이름: <%=name %><br>
	키: <%=height %><br>
	몸무게: <%=weight %><br>
	BMI: <%=bmi %><br>

	<%-- 출력하기 위해서는 여기에 if문 사용해줘야함 / %로 감싸고, "과체중" 써도 됨 --%>
	<%if(bmi >= 25) {%>
	과체중
	<% } else if (bmi > 18) {%>
	정상
	<% } else { %>
	저체중
	<% } %>


</body>
</html>

3.

Response

  • 웹 브라우저의 요청을 응답
  • 응답의 정보를 가지고 있는 곳이 request 객체

Response 메서드

메서드 기능
getCharacterEncoding() 굳이 사용x, 응답할 때 문자의 인코딩 형태
addCookie(Cookie c) 쿠키 지정
sendRedirect(URL) 지정한 URL로 이동

1.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<form action="res_ex01_result.jsp" method="post">

		이름:<input type="text" name="name"><br>
        나이:<input type="text" name="age"><br>
        <input type="submit" value="확인"><br>

	</form>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%

	request.setCharacterEncoding("utf-8"); //한글처리
	
	String name = request.getParameter("name");
	String age = request.getParameter("age");
	
	//age에 따라서 다른 결과 페이지로 이동
	int result = Integer.parseInt(age);
	
	if(result >= 20) {
		response.sendRedirect("res_ex01_ok.jsp"); //강제 페이지 이동(응답)
	} else {
		response.sendRedirect("res_ex01_no.jsp");
	}

%>

<%-- html 사용안해서 자바코드 밖에 안 남음, 나중에 servlet 사용 --%>

res_ex01_ok.jsp / res_ex01_no.jsp

2.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

<style>
.containter {
	display: flex;
	height: 100vh;
	background-color: lightgrey;
	justify-content: center;
	align-items: center;
}

#wrap {
	border: 1px solid #777;
	background-color: #ffffff;
	padding: 10px;
	text-align: center;
}
</style>


</head>
<body>

	<!-- 
	태그의 class 속성 - 태그를 식별하는 이름(화면에서 중복O)
	주로 디자인을 적용하는데 사용, head 테이블에 적음
	선택자 class는 . , id는 # 으로 지정해서 나타냄(폼은 고유할 필요가 있음)
	
	태그의 id - 고유하게 식별하는 이름(화면에서 중복이 있으면X)
	 -->

	<div class="containter">
		<form action="res_ex02_result.jsp" method="post" id="wrap">
			<h3>로그인 연습</h3>
			<input type="text" name="id" placeholder="아이디"><br>
            <input type="password" name="pw" placeholder="비밀번호"><br>
            <input type="submit" value="로그인">
		</form>
	</div>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");

/*
	1. id, pw을 받아서 처리
	2. id가 abc1234이고 비밀번호가 asd123이라면 로그인 성공으로 간주하고 res_ex02_ok 리다이렉트
	3. id 혹은 pw가 틀린 경우 res_ex02_no페이지로 리다이렉트
*/

	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	
	if(id.equals("abc1234") && pw.equals("asd123")) {
		response.sendRedirect("res_ex02_ok.jsp");
	} else {
		response.sendRedirect("res_ex02_no.jsp");
	}

%>

res_ex02_ok.jsp / res_ex02_no.jsp

 

Out

  • jsp 페이지가 생성하는 모든 내용은 out 객체를 통해 전송
  • 표현식(expression)의 결과값도 out 객체에 전달
  • 표현식으로 대체 (jsp화면에서는 out객체 별로 쓸 일이 없음)
<%
	out.print("<h1> 안녕! <h1>");
 	out.print("<h2> 반가워 <h2>");
%>

Application

  • 웹 어플리케이션 전반에 걸쳐서 사용되는 정보를 담고 있음
  • 생명주기: 톰캣을 끌때까지 1개 유지

브라우저를 닫아도 total 값이 하나씩 증가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	/*
	application은 session과 사용방법은 거의 동일하며
	생명주기가 톰캣을 stop할 때까지 1개 유지가 됩니다.
	*/
	
	int total = 0;
	
	if(application.getAttribute("total") != null) {
		total = (int)application.getAttribute("total");
	}//값 누적 가능
	
	total++;
	
	application.setAttribute("total", total); //저장

%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<a href="app_basic_ok.jsp">total값 확인</a>
	
	app에 유지되는 total값: <%=total %>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	int total = (int)application.getAttribute("total");

	//삭제는removeAttr

%>    
    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	app에 유지되는 total값: <%=total %>
	
</body>
</html>

cookie && session

  • 웹 브라우저가 서버로 어떤 데이터를 요청하면 서버측에서 응답 후 웹 브라우저와의 관계를 종료
    페이지를 넘어다니더라도 지속적으로 연결을 유지하기 위한 수단

  cookie session
저장 위치 브라우저(클라이언트)에 저장 서버에 저장
객체타입 내장객체x 내장객체o
특징 네트워크를 통해 전달
(HTTP 프로토콜을 사용하는 경우)
중간에서 쿠키의 값을 읽어올 수 있음
오직 서버에 저장
중요한 데이터 저장
웹 브라우저가 쿠키를 지원하지 않거나 강제로 사용자가 쿠키를 차단한 경우 사용할 수 있음
서버 공유 여러 서버에서 공유 가능
포털사이트들은 쿠키에 로그인 방식 저장 선호
여러 서버에서 공유 불가
사용 사용자 인증 - 로그인 자격증명, 고유 식별자 저장
사용자 기호 설정 저장(테마 등)
개인화된 광고
로그인 안하고 장바구니 저장(선택한 상품 정보를 쿠키에 담아 장바구니 유지)
추적과 분석 - 방문한 페이지, 본 상품 등
아이디 저장
오늘 하루 보지 않기
사용자 상태 유지 - 로그인하면 서버에 세션 생성
사용자 데이터 관리 - 장바구니 정보, 프로필, 주문 내역 등 (다른 페이지에서도 해당 정보 사용 가)
권한 관리

cookie (내장객체x) - 다시보기

  • 서버 생성, 클라이언트 저장
  • 서버에서 요청할 때마다 쿠키의 속성값 참조, 변경 가능
  • 개당 4kb로 용량이 제한적, 300개(1.2MB) 까지 데이터 정보 가짐
  • 쿠키는 내장객체가 아니라서 바로 사용하지는 못하고, 객체 생성 후 사용 가능
쿠키 문법
쿠키class(서버)에서 쿠키 생성 ▶ setter메서드로 쿠키의 속성 설정 (만료시간 有) 
▶ response객체에 쿠키 탑재 = reponse.addCookie("변수명") (응답객체에 담아서 클라이언트에 저장)
▶ 로컬 환경에 저장

Cookie 객체 메서드

메서드 기능
setMaxAge() 유효시간 설정
setPath() 쿠키 사용의 유효 디렉토리를 설정
setValue() 값 설정
getMaxAge() 버전 설정
getName() 유효기간 정보 얻음
getPath() 쿠키 사용의 유효 디렉토리 정보 얻음
getValue() 쿠키 값 얻음
getVersion() 쿠키 버전 얻음

 

쿠키는 서버에서 생성 ▶ 시간 설정 ▶ response로 클라이언트에게 던짐

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	//쿠키는 서버에서 생성해서 responser에 담아서 클라이언트로 보냅니다.
	//1. 쿠키 생성문
	Cookie idCookie = new Cookie("user_id", "kkk123"); // 이름, 값
	Cookie nameCookie = new Cookie("user_name", "홍길동");
	
	//2. 쿠키 시간 설정
	idCookie.setMaxAge(3600); //1시간
	nameCookie.setMaxAge(30); //30초
	
	//3.쿠키를 response에 저장
	response.addCookie(idCookie); //서버에서 클라이언트에게 쿠키 던짐(클라이언트에 쿠키 저장)
	response.addCookie(nameCookie);

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<a href="cookie_ex01_ok.jsp">쿠키 확인하기</a>



</body>
</html>

클라이언트에 저장된 쿠키를 서버한테 request로 던지면서 연결됨을 알려줌 ▶ if 조건절은 쿠키 확인하려고

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	//쿠키 확인하기
	//브라우저에 쿠키는 request객체에 자동으로 넘어와서 저장됩니다. (완료되기 전까지는 어디서든 사용가능)
	
	Cookie[] cookies = request.getCookies(); //클라이언트가 서버한테 request로 쿠키 던짐(연결되어있다고 알려주려고)	
	//쿠키가 없다면 null이기 때문에 에러발생
	if(cookies != null) {
		for(Cookie c : cookies) {
			out.println(c.getName() + "<br>"); //USER_ID, USER_NAME
			out.println(c.getValue() + "<br>"); //KKK123, 홍길동
		}
	}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h3>쿠키 사용하기</h3>

	<a href="cookie_ex01_reset.jsp">쿠키삭제</a>

</body>
</html>

쿠키 삭제 - 삭제가 없어서 동일한 이름의 쿠키를 0초로 만들어서 삭제

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	//쿠기 삭제 - 쿠키는 삭제가 없어서 동일한 이름의 쿠키의 0초로 만들어서 삭제
	
	Cookie idCookie = new Cookie("user_id", "kkk123");
	idCookie.setMaxAge(0);
	response.addCookie(idCookie);
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h3>쿠키삭제</h3>

</body>
</html>

 

2. cookie 활용

우선 아이디의 value값 없어 form만들어서 post로 ok에 넘기기

 

+ 2. idCheck 쿠키가 있으면 값을 찾아서 체크가 되어 있어야 하므로 idCheck를 사용하기 위해 찾는 작업 진행

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	/*
	이 페이지 처음 진입하면 idCheck쿠키를 찾아서 값을 얻고 아이디 태그 안에
	미리 값을 넣어주는 코드를 작성
	input 태그에 value 속성을 활용
	*/
	//쿠키는 requset에 배열로 담음
	Cookie[] checkarr = request.getCookies();
	
	String idCheck = ""; //쿠키 없으면 공백값임
	if(checkarr != null) { //쿠키가 없을 수도 있으니까 null이 아닐때
		for(Cookie c : checkarr) { //for문으로 이름을 찾아봄
			if( c.getName().equals("remember_id") ) { //쿠키배열에 들어있는 이름값이랑 ok.jsp의 key값 = remember_id랑 같으면 
				idCheck = c.getValue(); //값을 꺼내서 idCheck변수에 담음
			}
		}
	}
	

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h2>쿠키 로그인 연습</h2>

	<form action="cookie_ex02_ok.jsp" method="post">

		아이디:<input type="text" name="id" size="10" value="<%=idCheck %>"><br>
		비밀번호:<input type="password" name="pw" size="10"><br>
		<input type="submit" value="로그인">
		<input type="checkbox" name="idCheck" value="y"> 아이디기억하기

	</form>

</body>
</html>

 

request.getParameter로 받고, 로그인이 성공이라면 서버에서 id쿠키 "user_id" 생성

▶ 서버 → 클라이언트 response.addCookie로 넘겨서 클라이언트에 쿠키 저장

▶ reponse.sendRedirect로 성공 페이지 or 로그인 화면 넘기기

 

+ 1. 체크박스를 체크했다면 idCheck 쿠키 생성 ▶ 클라이언트에 쿠키 저장

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");

	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	String idCheck = request.getParameter("idCheck");
	
	//로그인 성공이라 가정
	if(id.equals("aaa123") && pw.equals("1234")) {
		
		//로그인 성공시 id쿠키 생성
		Cookie cookie = new Cookie("user_id", id);
		cookie.setMaxAge(1800);
		response.addCookie(cookie);
		
		//idCheck쿠키
		//사용자가 체크박스를 체크했다면 idCheck를 생성, 시간은 30초
		if(idCheck != null && idCheck.equals("y")) { //y가 없으면 null값인데 equals로는 비교할 수 없음
			Cookie idCheckCookie = new Cookie("remember_id",id);
			idCheckCookie.setMaxAge(30);
			response.addCookie(idCheckCookie);
		}
		
		response.sendRedirect("cookie_ex02_welcome.jsp");//성공페이지	
	} else {
		response.sendRedirect("cookie_ex02.jsp");//로그인화면
	}
	
	



%>

welcome 페이지에서 저장된 id를 보여주려 user_id 쿠키를 찾는 작업 진행

    //user_id쿠키를 찾는 작업
    Cookie[] arr = request.getCookies();

    String id = "";
    if(arr != null) {
        for(Cookie c : arr) {
            if( c.getName().equals("user_id") ) {
                id = c.getValue();
            }
        }
    }
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	//user_id쿠키를 찾는 작업
	Cookie[] arr = request.getCookies();
	
	String id = "";
	if(arr != null) {
		for(Cookie c : arr) {
			if( c.getName().equals("user_id") ) {
				id = c.getValue();
			}
		}
	}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	내가만든쿠키~ 만든사람(<%=id %>)
	<br>
	<a href="cookie_ex02.jsp">뒤로</a>

</body>
</html>

session (내장객체o)

  • 서버 생성, 서버에 객체 형태로 저장 (쿠키보다 안전)
  • 서버당 하나의 세션 객체 가짐 = 브라우저 별 서로 다른 세션 사용
  • 저장할 수 있는 데이터의 한계x
  • 생명주기: 브라우저별로 생성되고 사라짐
  • jsp에서는 session이라는 내장객체를 지원하며 세션의 속성 설정 가능, session id는 자동으로 만들어져 들어옴
  • 세션에 저장된 값을 브라우저가 종료되기 전까지, 또는 기본 30분 유지되고, 어느 페이지에서나 사용 가능

session 객체 메서드

메서드 기능
setAttribute(키, 값) 세션에 데이터 저장
getAttribute() 세션에 저장되어 있는 데이터 얻음
getAttributeNames() 세션에  저장되어  있는  모든  데이터의  세션  이름(key)을  얻음
getId() 자동생성된  세션의  유니크한  아이디를  얻음
getCreationTime() 세션이  생성된  시간
getLastAccessedTime() 웹  브라우저가  가장  마지막에  세션에  접근한  시간
setMaxInactiveInterval() 세션의  유효시간을  설정, 초 단위 기록
getMaxInactiveInterval() 세션의  유효시간을  얻음, 가장  최근  요청시점을  기준으로  카운트
removeAttribute() 특정 세션 삭제
invalidate() 모든 세션 삭제

1.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	/*
	세션은 서버와 정보를 유지하기 위해 사용하는 내장객체입니다.
	setAttribute("이름", "값")으로 저장합니다.
	*/
	
	//세션 저장
	session.setAttribute("user_id", "ccc123");
	session.setAttribute("user_name", "쿠키몬스터");
	
	//시간 설정
	session.setMaxInactiveInterval(3600); //1시간 - 기본값 30분
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<a href="session_ex01_ok.jsp">세션 확인하기</a>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	/*
	세션에 저장된 값을 브라우저가 종료되기 전까지, 또는 기본 30분 유지되고
	어느 페이지에서나 사용할 수 있습니다.
	getAttribute("이름") 을 사용합니다.
	*/
	
	//세션 사용
	String user_id = (String)session.getAttribute("user_id");
	String user_name = (String)session.getAttribute("user_name");
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	세션값:
	<%=user_id %><br> 세션값:
	<%=user_name %><br>

	<a href="session_ex01_remove.jsp">세션삭제</a>

</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	//세션 삭제
	session.removeAttribute("user_id");

	//세션 사용(얻기)
	String user_id = (String)session.getAttribute("user_id");
	String user_name = (String)session.getAttribute("user_name");

	//세션 전부 삭제
	session.invalidate();
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h3>리무브된 결과</h3>
	세션값:
	<%=user_id %><br> 세션값:
	<%=user_name %><br>

</body>
</html>

2. session - ok - welcome - logout

로그인 할 input 받아서 session_login_ok로 넘기기

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

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

	<h2>세션 로그인 연습</h2>

	<form action="session_login_ok.jsp" method="post">

		아이디:<input type="text" name="id"><br>
		비밀번호:<input type="password" name="pw"><br>
		닉네임:<input type="text" name="nick"><br>
		<input type="submit" value="로그인">
		
	</form>


</body>
</html>

reqeust.getParameter로 매개변수값 받기 ▶ 로그인 성공 가정 세션 값 저장 후 성공, 실패시 welcome, login 페이지로 이동

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	/*
	1. 아이디, 비밀번호, nick을 받습니다.
	2. 아이디 비밀번호가 동일하면 로그인 성공이라고 간주하고 (user_id, id)의 세션생성
	(user_nick, 닉네임)을 세션을 생성
	
	session_welcome로 이동해서 화면에 "id님 환영합니다"를 출력합니다.
	틀린경우는 로그인페이지로 리다이렉트 처리해주세요.
	
	session_welcome페이지에서는 a태그를 이용해서 session_logout을 만들고, 
	세션을 무효화한 이후에 로그인 페이지로 리다이렉트 시키면 됩니다
	
	*/
	
	//세션 사용
	
	request.setCharacterEncoding("utf-8");//post로 받아옴
	String seid = request.getParameter("id");
	String sepw = request.getParameter("pw");
	String senick = request.getParameter("nick");
	
	if(seid.equals("dodo123") && sepw.equals("1111")) { //login 성공
		session.setAttribute("user_id", seid);//세션(이름, 값)
		session.setAttribute("user_nick", senick); 
		
		response.sendRedirect("session_welcome.jsp");//성공시 welcome으로 이동
	} else {
		response.sendRedirect("session_login.jsp");//실패시 다시 로그인으로 이동
	}
	
%>

if 세션값이 있는지 확인 ▶ 세션 사용을 위해 session.getAttribute로 String 변수에 담아줌

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	
	//세션이 없다면 리다이렉트
	if(session.getAttribute("user_id") == null) {
		response.sendRedirect("session_login.jsp");
	}

	//세션사용
	String seid = (String)session.getAttribute("user_id");
	String senick = (String)session.getAttribute("user_nick");

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<%-- seid와 senick을 body에서 출력 --%>
	<%=seid %>님 환영합니다.
	<br>
	<a href="session_logout.jsp">session_logout</a>

</body>
</html>

로그아웃시 세션무효화 session.invalidate();

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%

	session.invalidate(); //세션무효화
	response.sendRedirect("session_login.jsp");

%>
<%-- 화면에서 출력할 동작이 없으므로 html 부분 지워줘도 됨 --%>

path(경로)

  • 절대경로: 프로젝트의 전체경로 (IP주소, port번호를 제외한 / 컨텍스트 경로부터 시작)
  • 상대경로: 현재 위치에서 다른 파일의 경로를 참조
  /  full경로를 찾아서 나가겠다 (= 전체경로)
 ./  현재 디렉토리
../   한단계 상위 디렉토리      (path_ex03 → test폴더로 감)
../../ 두단계 상위 디렉토리로 올라가겠다

path_ex02에서 한단계 들어가는 건 test/path_ex03.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h2>path_ex01</h2>
	<!-- 
	절대경로: 프로젝트의 전체경로 (IP주소, port번호를 제외한 / 컨텍스트 경로부터 시작)
	상대경로: 현재 위치에서 다른 파일의 경로를 참조
	 -->
	
	<a href="path_ex02.jsp">ex02(상대)</a>
	<a href="http://localhost:8181/JSPBasic/path/path_ex02.jsp">ex02(절대)</a>
	<a href="/">ex02(절대)</a> <!-- apache 홈페이지로 이동 -->
	<a href="/JSPBasic/path/path_ex02.jsp">ex02(절대)</a>
	
	
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<h2>path_ex02</h2>

	<a href="test/path_ex03.jsp">ex03(상대)</a>
	<a href="/JSPBasic/path/test/path_ex03.jsp">ex03(절대)</a>
	
	
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h2>path_ex03</h2>
	
	<a href="../path_ex01.jsp">ex01(상대)</a>
	<a href="/JSPBasic/path/path_ex01.jsp">ex01(절대)</a>
	
	<hr>
	<!-- a태그를 이용해서 session_login 페이지로 상대경로, 절대경로로 이동 -->
	
	<a href="../../session/session_login.jsp">session_login(상대)</a>
	<a href="/JSPBasic/session/session_login.jsp">session_login(절대)</a><br>
	
	<hr>
	<!-- a태그를 이용해서 TestServlet으로 상대경로, 절대경로로 이동 -->
	
	<!-- ../../까지 가면 JSPBasic이고, TestServlet url 확인하면 http://localhost:8181/JSPBasic/hello 이므로 뒤에 hello만 붙여주면 됨 -->
	<a href="../../hello">TestServlet(상대)</a>
	<a href="http://localhost:8181/JSPBasic/hello">TestServlet(절대)</a><br>
	
	<hr>
	<!-- img태그를 이용해서 HTML 폴더 안에 1.jpg 참조 -->
	
	<!-- src가 경로여서 여기에 적으면 됨 -->
	<!-- alt: 이미지가 뜨지 않으면 대신해서 "상대경로 or 절대경로"이라는 글자가 나타남 -->
	<!-- 이미지가 엑박이 뜨면 경로 설정이 잘못된 것 -->
	<img alt="상대경로" src="../../HTML/1.png"><br>
	<img alt="절대경로" src="/JSPBasic/HTML/1.png">
	
	
</body>
</html>
  • 같은 디렉토리는 바로 넘어갈 수 있음
  • img의 alt = 이미지가 뜨지 않으면 나타나는 글자 / scr = 경로
    이미지가 엑박이 뜨면 경로가 잘못된 것

오늘 하루

더보기

기억에 남는 부분

 

어려운 부분

 

문제 해결 부분

 

728x90
profile

원지의 개발

@원지다

250x250