hardcoding(날코딩) - base
model1 - *
mvc model2 - 향상
controller - servlet
parameter
url
회원을 유지한다는 개념
저장구역이 필요
1.page 영역
한 페이지 내에서의 값을 저장할 수 있는 것
2.request 영역
request(inclide / foward)
3.session 영역
브라우저가 꺼질때 까지 / session파기까지
4.application 영역
톰캣 종료 / 톰캣내의 전 사이트에 공유
영역에 저장하려면 - setAttribute("키", 값) 형식으로 저장
가져오는 것은 - getAttribute("키", 값) 형식으로 가져옴
= HashMap 구조
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=exploit_code&logNo=220088741485 (참고)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// pageContext.jsp
String data1 = "값1";
System.out.println(data1);
// setAttribute(String name, Object value)
pageContext.setAttribute("data2","값2");
// Object getAttribute(String name) / Object이기때문에 형변환 해주는게 예의
System.out.println((String)pageContext.getAttribute("data2"));
// 객체형태로 해보기
pageContext.setAttribute("data3", new java.util.Date());
// 받아오기
java.util.Date date = (java.util.Date)pageContext.getAttribute("data3");
System.out.println(date.toLocaleString());
// Wrapper / data4에 1 집어넣기
pageContext.setAttribute("data4", 1);
// Object이기때문에 정수형 1은 들어갈 수 없어서 변환 해줌
pageContext.setAttribute("data5", Integer.valueOf(1));
// 가져오기
Integer i = (Integer)pageContext.getAttribute("data5");
System.out.println(i.intValue());
// 쉽게 가져오기
int i2 = (Integer)pageContext.getAttribute("data5");
System.out.println(i2);
%>
<%@ 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>
<!-- request.jsp -->
<form action="request_ok.jsp" method="post" >
데이터 <input type="text" name="data" />
<input type="submit" value="전송" />
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- request_ok.jsp -->
<!-- 받기 -->
<%
out.println(request.getParameter("data") + "<br />");
%>
<!-- include 되는 페이지 -->
<jsp:include page="request_ok_sub.jsp">
<jsp:param name="data2" value="value2" />
</jsp:include>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
Hello request_ok_sub.jsp <br>
data2 : <%=request.getParameter("data2") %><br>
data2 : <%=request.getAttribute("data2") %><br>
request_ok_sub.jsp에 추가 / Attribute로 값 받기
session은 클라이언트의 상태정보를 서버에 저장하여 유지하고자 하는 목적으로 사용
ex) 쇼핑몰 사이트 장바구니 기능, 로그인 또는 로그아웃처럼 사용자 인증처리 경우
브라우저마다 다른 객체를 가진다.
session id를 통해 구별
<%@ 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>
<%
// C890125348FB0DE51C8B8CDFAC62F250 / 브라우저마다 다르다
out.println(session.getId() + "<br>");
%>
</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>
session02.jsp<br>
<%
// C890125348FB0DE51C8B8CDFAC62F250 / 브라우저마다 다르다
out.println(session.getId() + "<br>");
%>
</body>
</html>
이런식으로 시간이 나옴
Date클래스로 시간 간단하게 보기 / session 유효시간
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
session01.jsp<br>
<%
// getId() : 세션id를 얻어오는 메소드
// C890125348FB0DE51C8B8CDFAC62F250 / 브라우저마다 다르다
out.println(session.getId() + "<br>");
// getCreationTime() : 세션이 생성된 시간을 얻어오는 메소드 (1970.1.1~시간, 단위:ms)
out.println(new Date(session.getCreationTime()).toLocaleString() + "<br>");
// getLastAccessedTime() : 웹 브라우저가 가장 마지막에 세션에 접근한 시간
out.println(new Date(session.getLastAccessedTime()) + "<br>");
// getMaxInactiveInterval() : 최대 허용 시간
out.println(session.getMaxInactiveInterval() + "<br>");
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
session02.jsp<br>
<%
// getId() : 세션id를 얻어오는 메소드
// C890125348FB0DE51C8B8CDFAC62F250 / 브라우저마다 다르다
out.println(session.getId() + "<br>");
// getCreationTime() : 세션이 생성된 시간을 얻어오는 메소드 (1970.1.1~시간, 단위:ms)
out.println(new Date(session.getCreationTime()).toLocaleString() + "<br>");
// getLastAccessedTime() : 웹 브라우저가 가장 마지막에 세션에 접근한 시간
out.println(new Date(session.getLastAccessedTime()) + "<br>");
// session의 유효시간 / 1800이라고 나오는데 초 단위임
out.println(session.getMaxInactiveInterval() + "<br>");
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
session01.jsp<br>
<%
// getId() : 세션id를 얻어오는 메소드
// C890125348FB0DE51C8B8CDFAC62F250 / 브라우저마다 다르다
out.println(session.getId() + "<br>");
// getCreationTime() : 세션이 생성된 시간을 얻어오는 메소드 (1970.1.1~시간, 단위:ms)
out.println(new Date(session.getCreationTime()).toLocaleString() + "<br>");
// getLastAccessedTime() : 웹 브라우저가 가장 마지막에 세션에 접근한 시간
out.println(new Date(session.getLastAccessedTime()) + "<br>");
//session의 유효시간 / 1800이라고 나오는데 초 단위임
out.println(session.getMaxInactiveInterval() + "<br>");
// 세션 넣기
session.setAttribute("data1", "value1");
session.setAttribute("data2", "value2");
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
session02.jsp<br>
<%
// getId() : 세션id를 얻어오는 메소드
// C890125348FB0DE51C8B8CDFAC62F250 / 브라우저마다 다르다
out.println(session.getId() + "<br>");
// getCreationTime() : 세션이 생성된 시간을 얻어오는 메소드 (1970.1.1~시간, 단위:ms)
out.println(new Date(session.getCreationTime()).toLocaleString() + "<br>");
// getLastAccessedTime() : 웹 브라우저가 가장 마지막에 세션에 접근한 시간
out.println(new Date(session.getLastAccessedTime()) + "<br>");
// session의 유효시간 / 1800이라고 나오는데 초 단위임
out.println(session.getMaxInactiveInterval() + "<br>");
// 세션 데이터 받기
out.println("data1 : " + (String)session.getAttribute("data1") + "<br>");
out.println("data2 : " + (String)session.getAttribute("data2") + "<br>");
%>
</body>
</html>
값을 전달해주는 session1.jsp를 실행시켜야 바뀐다
데이터 삭제시 id값도 변한다.
// 데이터 지우기
session.removeAttribute("data1");
// 데이터 전체 지우기
session.invalidate();
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
session02.jsp<br>
<%
out.println("data1 : " + (String)session.getAttribute("data1") + "<br>");
out.println("data2 : " + (String)session.getAttribute("data2") + "<br>");
// 데이터 지우기
// session.removeAttribute("data1");
// 데이터 전체 지우기
session.invalidate();
%>
</body>
</html>
삭제코드가있는 session03.jsp를 실행하면 session02.jsp의 값이 지워진다. 그리고 set으로 값을 넣어주는 session01.jsp를 실행하면 다시 값이 들어온다.
로그인 폼(login_form.jsp)
(id, password, 회원등급 ...)
로그인 화면(login_ok.jsp)
성공 - 성공하면 세션 부여 -> 성공확인(login_complete.jsp)
세션검사
성공
페이지 내용
-> 로그아웃(logout_ok.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>
<!-- login_form.jsp -->
<form action="login_ok.jsp" method="post" >
아이디 <input type="text" name="id" />
비밀번호 <input type="password" name="password" />
<input type="submit" value="로그인" />
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// login_ok.jsp
request.setCharacterEncoding("utf-8");
//데이터 받기
String id = request.getParameter("id");
String password = request.getParameter("password");
// 실제 아이디와 패스워드
// 패스워드는 select 형식으로 받고 직접 가져오지않음.
String save_id = "tester";
String save_password = "123456";
// 0 : 로그인 성공, 1 : 비밀번호 오류, 2 : 기타에러 / 로그인 처리 페이지 만들기
int flag = 2;
if(save_id.equals(id) && save_password.equals(password)) {
flag = 0;
} else {
flag = 1;
}
// 로그인 처리 페이지
out.println("<script type='text/javascript'>");
if(flag == 0) {
// session
// 민감한 개인정보는 입력 금지 .. 프로그램적 필요한 정보를 넣어서 처리
session.setAttribute("sid", id);
session.setAttribute("sgrade", "a");
out.println("alert('로그인 되었습니다')");
out.println("location.href='login_complete.jsp'"); // 이동하기
} else if(flag == 1) {
out.println("alert('비밀번호 오류')");
out.println("history.back()");
} else if(flag == 2) {
out.println("alert('기타 오류')");
out.println("history.back()");
}
out.println("</script>");
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int flag = 1;
// 로그인이 됐으면
if(session.getAttribute("sid") != null || session.getAttribute("sgrade") != null) {
flag = 0;
}
if(flag == 0) {
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
login_complete.jsp
<a href="logout_ok.jsp">로그아웃</a>
</body>
</html>
<%
} else if(flag == 1) {
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
alert('로그인 해야합니다.');
location.href = 'login_form.jsp';
</script>
</body>
</html>
<%
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// logout_ok.jsp
session.invalidate();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
alert('로그아웃 되었습니다.');
location.href='login_form.jsp';
</script>
</body>
</html>
정해준 아이디 패스워드 입력
로그인 성공시
그럼 complete.jsp 창이 띄워짐
다른 브라우저에서 complete.jsp 접근시 로그인 해야한다는 문구가 나오면서 로그인창으로 돌아가짐
로그아웃 누를 시
로그인창으로 돌아옴
테이블명 : member1
번호 - seq int not null primary key
아이디 - id varchar(12) not null
비빌번호 - password varchar(12) not null
이름 - name varchar(12) not null
이메일 - mail varchar(50)
등급 - grade char(1) not null
등록일 - wdate datetime not null
project 데이터베이스에 생성
create table member1 (
seq int not null primary key,
id varchar(12) not null,
password varchar(12) not null,
name varchar(12) not null,
mail varchar(50),
grade char(1) not null,
wdate datetime not null
);
insert into member1 values(0,'tester','123456','이름','메일','a',now());
login 폴더 복사 붙이기 login2 폴더 생성
login_ok.jsp 변경 / DB연동 후 바인딩 에러가 나면 한번 껏다 켜보기.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.SQLException"%>
<%@page import="javax.naming.NamingException"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%
// login_ok.jsp
request.setCharacterEncoding("utf-8");
//데이터 받기
String id = request.getParameter("id");
String password = request.getParameter("password");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// 0 : 로그인 성공, 1 : 비밀번호 오류, 2 : 기타에러 / 로그인 처리 페이지 만들기
int flag = 2;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource) envCtx.lookup("jdbc/mariadb3");
conn = dataSource.getConnection();
// select
// count(*) - 회원 수 / 아이디 중복검사에도 활용
// name, mail, grade => session
// 패스워드는 암호화
String sql = "select name, mail, grade from member1 where id=? and password=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if(rs.next()) {
flag = 0;
session.setAttribute("sid", id);
session.setAttribute("sname", rs.getString("name"));
session.setAttribute("sgrade", rs.getString("grade"));
} else {
flag = 1;
}
} catch (NamingException e) {
System.out.println("[에러] : " + e.getMessage());
} catch (SQLException e) {
System.out.println("[에러] : " + e.getMessage());
} finally {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
out.println("<script type='text/javascript'>");
if(flag == 0) {
out.println("alert('로그인 되었습니다')");
out.println("location.href='login_complete.jsp'"); // 이동하기
} else if(flag == 1) {
out.println("alert('비밀번호 오류')");
out.println("history.back()");
} else if(flag == 2) {
out.println("alert('기타 오류')");
out.println("history.back()");
}
out.println("</script>");
%>
위처럼 로그인 로그아웃 기능실행이 된다.
서버가 클라이언트에 저장하는 정보로 클라이언트쪽에 필요한 정보를 저장해놓고 필요할때 추출하는 것
클라이언트(브라우저내부)에 저장
세션은 끊어지면 없어지지만 쿠키는 남아있다.
<%@ 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>
<!-- setCookies -->
<%
// 쿠키 생성
Cookie cookie1 = new Cookie("data1", "value1");
// 쿠키 전송
response.addCookie(cookie1);
%>
</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>
<%
// 여러 개 넣을 수 있어서 배열로 처리 / 브라우저에 들어간 여러개의 쿠키들은 배열형태로 쌓이게 된다
// request.getCookies() 메서드로 클라이언트가 보낸 쿠키 정보 읽기
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length > 0) {
for(int i=0; i<cookies.length; i++) {
out.println(cookies[i].getName() + ":");
out.println(cookies[i].getValue() + "<br>");
}
}
%>
</body>
</html>
setCookies를 getCookies로 변경
setMaxAge() 메서드로 정해줄 수 있다.
setMaxAge(0)으로 설정하면, 쿠키는 삭제
<%@ 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>
<!-- setCookies -->
<%
Cookie cookie1 = new Cookie("data1", "value1");
// 30번 * 60초 해서 30분 설정해준 것 / 24 * 60 * 60 은 24번 * 60번 * 60초 라는 것(24시간)
cookie1.setMaxAge(30 * 60);
response.addCookie(cookie1);
Cookie cookie2 = new Cookie("data2", "value2");
cookie1.setMaxAge(30 * 60);
response.addCookie(cookie2);
%>
</body>
</html>
Cookie cookie = new Cookie("data1", "");
// 0이나 0보다 작은수 넣어주면 삭제 된다.
cookie.setMaxAge(0);
response.addCookie(cookie);
<%@ 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>
<%
// 여러 개 넣을 수 있어서 배열로 처리
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length > 0) {
for(int i=0; i<cookies.length; i++) {
out.println(cookies[i].getName() + " : ");
out.println(cookies[i].getValue() + "<br>");
}
}
Cookie cookie = new Cookie("data1", "");
// 0이나 0보다 작은수 넣어주면 삭제 된다.
cookie.setMaxAge(0);
response.addCookie(cookie);
%>
</body>
</html>
data1 사라짐
login 폴더 복사하여 login3 폴더 생성
<%@ 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>
<!-- login_form.jsp -->
<form action="login_ok.jsp" method="post" >
아이디 <input type="text" name="id" />
비밀번호 <input type="password" name="password" />
<input type="submit" value="로그인" />
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// login_ok.jsp
request.setCharacterEncoding("utf-8");
//데이터 받기
String id = request.getParameter("id");
String password = request.getParameter("password");
// 실제 아이디와 패스워드
// 패스워드는 select 형식으로 받고 직접 가져오지않음.
String save_id = "tester";
String save_password = "123456";
// 0 : 로그인 성공, 1 : 비밀번호 오류, 2 : 기타에러 / 로그인 처리 페이지 만들기
int flag = 2;
if(save_id.equals(id) && save_password.equals(password)) {
flag = 0;
} else {
flag = 1;
}
// 로그인 처리 페이지
out.println("<script type='text/javascript'>");
if(flag == 0) {
Cookie cookie1 = new Cookie("login_id", id);
Cookie cookie2 = new Cookie("login_grade", "A");
// 쿠키 넣어줌
response.addCookie(cookie1);
response.addCookie(cookie2);
out.println("alert('로그인 되었습니다')");
out.println("location.href='login_complete.jsp'"); // 이동하기
} else if(flag == 1) {
out.println("alert('비밀번호 오류')");
out.println("history.back()");
} else if(flag == 2) {
out.println("alert('기타 오류')");
out.println("history.back()");
}
out.println("</script>");
%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
int flag = 1;
// 쿠키를 검사하는 방법
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length >= 0) {
for(int i=0; i<cookies.length; i++) {
if(cookies[i].getName().equals("login_id") && !cookies[i].getValue().equals("")) {
flag = 0;
break;
}
}
}
if(flag == 0) {
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
login_complete.jsp <br>
<a href="logout_ok.jsp">로그아웃</a>
</body>
</html>
<%
} else if(flag == 1) {
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
alert('로그인 해야합니다.');
location.href = 'login_form.jsp';
</script>
</body>
</html>
<%
}
%>
로그인 구현 됨.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// logout_ok.jsp
Cookie cookie1 = new Cookie("login_id", "");
Cookie cookie2 = new Cookie("login_grage", "");
cookie1.setMaxAge(0);
cookie2.setMaxAge(0);
response.addCookie(cookie1);
response.addCookie(cookie2);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script type="text/javascript">
alert('로그아웃 되었습니다.');
location.href='login_form.jsp';
</script>
</body>
</html>
view페이지에서 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>
<!-- 출력문 -->
<%
out.println("2" + "<br>");
%>
<%="2"%><br>
<!-- EL 로 출력 -->
${2}<br>
${"2"}<br>
<!-- 이런식으로 쓰면 변수로 인식 test가 출력되지않음 / 변수가 선언이 안돼있어도 에러가 안난다. -->
${test}<br>
${"test"}<br>
<!-- 단일따옴표도 허용 '' -->
${'test'}<br>
<!-- \ 사용하면 EL사용을 하지 않는다는 뜻. 그대로 출력된다. -->
\${'test'}<br>
</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>
${2+5}<br>
${2 div 5 }<br>
${2 mod 5 }<br>
<br><br>
<!-- 문자열이 아님 -> 자동 형변환 -->
${"2" + 5 }<br>
${"2" + "5" }<br>
<!-- 덧셈이 안돼서 에러남 -->
\${"일" + "5" }<br>
${"일"}${"5"}<br>
<!-- 덧셈이 안된상태로 출력하고싶으면 밑에처럼 나누면 됨. -->
${"2"}${"5"}<br>
</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>
${2 < 3}<br>
${2 lt 3}<br>
<!-- 데이터가 비어있는지 확인 -->
${ empty data }<br>
<!-- 삼항연산자 처리도 가능 -->
${ (2 < 3) ? "작다" : "크다" }<br>
</body>
</html>
pageContext
<%@ 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>
<%
String name1 = "홍길동";
pageContext.setAttribute("name2", "홍길동");
%>
<%=name1 %><br>
<!-- EL로 출력 -->
${name1}<br>
<%=pageContext.getAttribute("name2") %><br>
${pageScope.name2}<br>
${pageScope['name2']}<br>
${name2}<br>
</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>
<%
pageContext.setAttribute("name1", "홍길동");
request.setAttribute("name2", "박문수");
session.setAttribute("name3", "성춘향");
application.setAttribute("name4", "이몽룡");
// pageContext.setAttribute("name", "홍길동");
// request.setAttribute("name", "박문수");
session.setAttribute("name", "성춘향");
%>
<!-- EL을 통해 가져오기 -->
${pageScope.name1}<br>
${requestScope.name2}<br>
${sessionScope.name3}<br>
${applicationScope.name4}<br>
<br>
<!-- 간편하게 쓰기 -->
${name1}<br>
${name2}<br>
${name3}<br>
${name4}<br>
<br>
<!-- 단순한 변수선언이 아닌 가장 가까운 페이지를 보여줌
1번 보여주고 1번없으면 2번 2번 없으면 3번 다 없으면 공백으로 처리
만약 위의 name에서 전부다 주석이 안돼있으면 홍길동 출력
홍길동 주석이면 박문수 출력 이런식이다.-->
${name}<br>
</body>
</html>
package model1;
public class BoardTO {
private String subject;
private String writer;
public String getSubject() {
System.out.println("getSubject() 호출");
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getWriter() {
System.out.println("getWriter() 호출");
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model1.BoardTO" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
BoardTO to = new BoardTO();
to.setSubject("제목");
to.setWriter("작성자");
request.setAttribute("to", to);
%>
<!-- TO의 println값 가져옴 -->
${to.subject}<br>
${to.writer}<br>
</body>
</html>
elex06.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model1.BoardTO" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
BoardTO to = new BoardTO();
to.setSubject("제목");
to.setWriter("작성자");
BoardTO to1 = new BoardTO();
to1.setSubject("제목1");
to1.setWriter("작성자1");
BoardTO to2 = new BoardTO();
to2.setSubject("제목2");
to2.setWriter("작성자2");
BoardTO[] lists = {to1, to2};
// ArrayList로 활용하기 / BoardTO[] lists = {to1, to2}; 주석하고 사용
ArrayList<BoardTO> lists = new ArrayList();
lists.add(to1);
lists.add(to2);
// request.setAttribute("to", to);
// request.setAttribute("list1", lists);
request.setAttribute("lists", lists);
%>
\${to.subject}<br>
\${to.writer}<br>
<!-- 배열이든 ArrayList든 똑같이 가지고 나올 수 있음. -->
${lists[0].subject}<br>
${lists[1].subject}<br>
${lists[2].subject}<br>
</body>
</html>
package model1;
import java.util.ArrayList;
public class BoardListTO {
private String cpage;
private BoardTO boardTO;
private ArrayList<BoardTO> boardLists;
public String getCpage() {
return cpage;
}
public void setCpage(String cpage) {
this.cpage = cpage;
}
public BoardTO getBoardTO() {
return boardTO;
}
public void setBoardTO(BoardTO boardTO) {
this.boardTO = boardTO;
}
public ArrayList<BoardTO> getBoardLists() {
return boardLists;
}
public void setBoardLists(ArrayList<BoardTO> boardLists) {
this.boardLists = boardLists;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="model1.BoardTO" %>
<%@ page import="model1.BoardListTO" %>
<%@ page import="java.util.ArrayList" %>
<%
BoardTO to1 = new BoardTO();
to1.setSubject("제목 1");
to1.setWriter("작성자 1");
BoardTO to2 = new BoardTO();
to2.setSubject("제목 2");
to2.setWriter("작성자 2");
BoardListTO listTO1 = new BoardListTO();
listTO1.setCpage("1");
listTO1.setBoardTO(to1);
BoardListTO listTO2 = new BoardListTO();
listTO2.setCpage("2");
listTO2.setBoardTO(to2);
ArrayList<BoardListTO> lists = new ArrayList();
lists.add(listTO1);
lists.add(listTO2);
pageContext.setAttribute("lists", lists);
// => EL을 통해서 데이터에 접근
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${lists[0].cpage}<br>
${lists[1].cpage}<br>
${lists[0].boardTO.subject}<br>
${lists[0].boardTO.writer}<br>
</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>
<%
// 브라우저 정보를 알 수 있다.
out.println(request.getHeader("user-agent") + "<br>");
%>
<!-- EL로 접근 -->
${header['host']}<br>
${header['user-agent']}<br>
<br>
<!-- 모든 내용 가져옴 -->
${header}<br>
<br>
${pageContext.request.requestURI}<br>
${pageContext.request.remoteAddr}<br>
</body>
</html>
EL의 내장객체인 param은 웹 브라우저에서 전송된 지르이 문자열에 대하여 작업을 쉽게 할 수 있게 한다.
param을 사용하여 데이터 받기 가능
JSTL은 Java Server Pages Standard Tag Library의 약자로 jsp에서 사용하는 태그 라이브러리를 공통으로 사용하기 위해 정해진 표준
라이브러리 설치해서 사용
태그를 규정해놓은 것
자바를 html태그처럼 만들어서 사용
자바코드없이 view페이지 만듦
core : 프로그램 개발 시 사용되는 기본적인 기능들이 포함되어 있음.
formatting : 날짜, 시간에 관한 형식을 처리하는 기능
sql : 데이터베이스 작업에 관한 기능들을 수행하는 태그들이 포함되어 있음
XML : XML을 지원하는 기능의 태그들 포함
Functions : 여러가지 함수 기능을 제공
현재 JSP페이지에 데이터를 출력하기 위해 사용하는 태그.
JSTLEx01 프로젝트 생성 -> jstl01 jsp파일 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${"browser"}<br>
<!-- jstl로 출력 -->
<c:out value="browser"></c:out><br>
<%
pageContext.setAttribute("data", "browser");
%>
EL : ${data}<br>
JSTL : <c:out value="${data}"></c:out><br>
<!-- 선언 안돼있어도 에러 없이 공백 출력해줌 -->
JSTL : <c:out value="${data1}"></c:out><br>
<!-- default값 / 데이터가 있으면 그 데이터값이 나오고 아니면 디폴트값이 나옴-->
JSTL : <c:out value="${data1}" default="nobrowser"></c:out>
</body>
</html>
JSP 페이지에서 사용하는 변수를 설정하는 태그
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="data1" value="value1" />
<c:set var="data2" value="value2" scope="page" />
<c:set var="data3">value3</c:set>
data1 : <c:out value="${data1}" /><br>
data2 : <c:out value="${data2}" /><br>
data3 : <c:out value="${data3}" /><br>
data1 : <c:out value="data1" /><br>
<!-- 데이터 집어넣기 -->
<c:set var="data" value="value1" scope="page" />
<c:set var="data" value="value2" scope="request" />
<c:set var="data" value="value3" scope="session" />
<!-- 각 영역별 데이터 넣음 -->
${pageScope.data}<br>
${requestScope.data}<br>
${sessionScope.data}<br>
</body>
</html>