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 사용 --%>
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");
}
%>
Out
- jsp 페이지가 생성하는 모든 내용은 out 객체를 통해 전송
- 표현식(expression)의 결과값도 out 객체에 전달
- 표현식으로 대체 (jsp화면에서는 out객체 별로 쓸 일이 없음)
<%
out.print("<h1> 안녕! <h1>");
out.print("<h2> 반가워 <h2>");
%>
Application
- 웹 어플리케이션 전반에 걸쳐서 사용되는 정보를 담고 있음
- 생명주기: 톰캣을 끌때까지 1개 유지
<%@ 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 = 경로
이미지가 엑박이 뜨면 경로가 잘못된 것
오늘 하루
기억에 남는 부분
-
-
어려운 부분
-
-
문제 해결 부분
-
-
'Server > JSP' 카테고리의 다른 글
[JSP] MVC2 패턴 - 회원가입, 로그인, 회원정보 수정, 탈퇴 (0) | 2022.12.06 |
---|---|
[JSP] MVC2, JSTL, 형변환태그 (0) | 2022.12.02 |
[JSP] 예외처리 - 예외페이지, forward, JAVA Bean (0) | 2022.12.01 |
[JSP] JSP(태그), Servlet(서블릿) (0) | 2022.11.30 |
[JSP] 개발 환경 설정 (2) | 2022.11.29 |