오늘의 코드
session
<%@page import="java.util.Date"%>
<%@ 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>
<%
// session 객체 : session 범위에 존재하는 객체
// 세션 생성 시간
Date createTime = new Date(session.getCreationTime());
// 이 웹페이지의 마지막 접속 시간
Date lastAccessTime = new Date(session.getLastAccessedTime());
// 세션 유지 시간 설정 방법1 (일반적으로 서블릿에서 세션을 건든다)
session.setMaxInactiveInterval(10); // 10초
// 세션 유지 시간 설정 방법2
// - web.xml 설정
/*
<session-config>
<session-timeout>10</session-timeout> // 분 단위
</sesstion-config>
*/
// 세션에 키-값 저장하기
session.setAttribute("userId", "운영자");
%>
<%--
* HTTP 특성
- stateless protocol : 통신이 끝나면 상태를 유지하지 않는 특성
- 쿠키와 세션은 HTTP 특성이 아닌 연결 상태를 유지하기 위해 사용
* 세션(session)
- 쿠키를 기반으로 사용
- 서버 측에서 데이터를 관리
- 세션 ID를 부여하여 브라우저를 종료할 때까지 데이터를 유지
- 세션 객체 : 사용자를 식별할 수 있는 방법을 제공
ㄴ 사용자에 대한 정보 저장
- 주의사항 : 세션은 현재에 프로젝트에 실행되는 모든 웹 페이지에 적용됨
따라서, 하나의 클라이언트에 세션을 많이 사용하면 충돌이 발생할 수 있음.
- session 객체는 session의 메소드를 사용하면 생성됨.
(예. session.setAttribute())
--%>
<h2>세션 아이디 : <%=session.getId() %></h2>
<h2>세션 생성 시간 : <%=createTime %></h2>
<h2>마지막 접속 시간 : <%=lastAccessTime %></h2>
<a href="sessionTest.jsp">sessionTest.jsp 페이지로 이동</a>
</body>
</html>
<%@page import="java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session invalidate</title>
</head>
<body>
<h1>세션 속성(attribute)값 제거/invalidate(무효화)</h1>
<%
// 세션 attribute에 데이터 저장
session.setAttribute("password", 123);
// 세션 attribute 출력
Enumeration<String> attrNames = session.getAttributeNames();
while(attrNames.hasMoreElements()) {
String name = attrNames.nextElement();
out.println(name + "<br>");
}
out.println("<p>userId 속성 제거</p>");
session.removeAttribute("userId");
attrNames = session.getAttributeNames();
while(attrNames.hasMoreElements()) {
String name = attrNames.nextElement();
out.println(name + "<br>");
}
session.invalidate(); // 세션 무효화 : 모든 세션 속성을 제거
// 유효하지 않은 세션 : 세션 속성이 아무것도 없거나 세션이 invalidate된 경우
// 현재 세션이 유효(valid)한 지 체크
if(request.isRequestedSessionIdValid()) {
out.println("유효한 세션<br>");
} else {
out.println("유효하지 않은 세션<br>");
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session Test</title>
</head>
<body>
<%
String userId = (String) session.getAttribute("userId");
%>
<h2><%=userId %>님, 환영합니다.</h2>
</body>
</html>
18강
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Hit count</title>
</head>
<body>
<%
Integer hitCount = // 형 변환도 int는 안된다 Integer로 해주어야 한다.
(Integer) application.getAttribute("hitCounter"); // 처음에는 null로 만들어진다 0이 아니다
if(hitCount == null || hitCount == 0) {
out.println("첫 방문을 환영합니다.");
hitCount = 1;
} else {
out.println(" 재방문을 환영합니다.");
hitCount += 1;
}
application.setAttribute("hitCounter",hitCount); // 여기에 저장이
// 시간이 남으면 만드는 게 좋다.
%>
<p>전체 방문 횟수 : <%=hitCount %></p>
</body>
</html>
19강 파일업로드
<%@ 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. commons-fileupload-x.x.jar을 다운로드 및 WEB-INF/lib 폴더에 저장
2. commons-in.x.x.jar을 다운로드 및 WEB-INF/lib 폴더에 저장
--%>
<h2>파일 업로드</h2>
<p>파일 선택</p>
<form action="uploadFile.jsp" method="post" enctype="multipart/form-data">
<input type="text" name="name"><br>
<input type="file" name="files" multiple="multiple"><br>
<input type="submit" value="파일 업로드"><br>
</form>
</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>
<%
String fileName = (String) session.getAttribute("fileName");
%>
<img alt="이미지" src="../images/<%=fileName %>" width="200" height="200">
<a href="../images/<%=fileName %>">링크</a>
</body>
</html>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8"); // 한글 인코딩
String realPath = "";
String savePath = "images";
String type = "utf-8";
int maxSize = 10 * 1024 * 1024; // 10MB
// 현재 애플리케이션 정보 저장
ServletContext context = request.getServletContext();
realPath = context.getRealPath(savePath);
out.println(realPath);
out.println("<hr>");
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setRepository(new File(realPath)); // 저장하는 경로(저장소)
diskFileItemFactory.setSizeThreshold(maxSize); // 넘어가면 안되는 용량(임계점)
diskFileItemFactory.setDefaultCharset(type);
// 업로드 핸들러
ServletFileUpload fileupload
= new ServletFileUpload(diskFileItemFactory);
// request 정보를 가져와서 upload 형태에 맞게 파싱
List<FileItem> items = fileupload.parseRequest(request);
for(FileItem item : items) {
if(item.isFormField()) { // form 데이터인 경우
out.print(item.getString() + "<br>");
} else { // 파일인 경우
out.print("파일명 : " + item.getName() + ", 파일크기 : " + item.getSize() + "<br>");
String separator = File.separator;
int index = item.getName().lastIndexOf(separator);
String fileName = item.getName().substring(index + 1);
File uploadFile = new File(realPath + separator + fileName);
item.write(uploadFile); // 받은 파일을 서버에 업로드
out.print(uploadFile + "<br>");
// 다른 jsp에서 전송된 이미지 확인
response.sendRedirect("/Web06_JSP_Servlet/ch19/imageView.jsp");
session.setAttribute("fileName", fileName);
}
}
%>
HW3
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 정보 전송 페이지</title>
</head>
<body onload="noBack();"
onpageshow="if(event.persisted) noBack();"
onunload="">
<%--
1. 로그인 정보 전송 페이지(HW3.jsp)
- <form action="HW3_login_auth.jsp" method="post">
- id, pw input 태그 생성
2. 로그인 인증 페이지(HW3_login_auth.jsp)
-전송받은 id, pw를 확인하여 id는 "test", pw는 "1234"일 경우
id 세션을 생성(만료 시간은 자유롭게 설정)
- 세션을 생성한 이후에 HW3_login_result.jsp 페이지로 이동
- 페이지 이동 코드
ㄴ out.print("<script>location.href='HW_login_result.jsp'</script>");
-전송받은 id, pw가 "test", "1234"가 아닌 경우, HW3.jsp 페이지로 이동
3. 로그인 결과 페이지(HW3_login_result.jsp)
-세션에서 id 값을 꺼내서 HTML 태그에 출력
- 만약, 로그인을 하지 않고 url로 접속할 경우 '로그인 해주세요!!'라고 alert를 띄우고
HW3.jsp 페이지로 이동
ㄴ out.print("<script>alert('로그인 해주세요!!')'</script>");
--%>
<%
session.invalidate(); // 세션 무효화 : 모든 세션 속성을 제거
%>
<form action="HW3_login_auth.jsp" method="post">
id : <input type="text" name="id"><br>
pw : <input type="password" name="pw"><br><br>
<button type="submit">로그인</button>
</form>
<script type="text/javascript">
function noBack(){window.history.forward();}
</script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 결과 페이지</title>
</head>
<body>
<!--
3. 로그인 결과 페이지(HW3_login_result.jsp)
-세션에서 id 값을 꺼내서 HTML 태그에 출력
- 만약, 로그인을 하지 않고 url로 접속할 경우 '로그인 해주세요!!'라고 alert를 띄우고
HW3.jsp 페이지로 이동
ㄴ out.print("<script>alert('로그인 해주세요!!');</script>");
-->
<%
// 세션에서 id 값을 꺼내서 HTML 태그에 출력
String id = null;
if (session != null) {
id = (String) session.getAttribute("id");
}
if (id != null) {
%>
<h2><%=id%>님이 로그인 하셨습니다.
</h2>
<%
} else {
// 만약, 로그인을 하지 않고 url로 접속할 경우 '로그인 해주세요!!'라고 alert를 띄우고 HW3.jsp 페이지로 이동
out.print("<script>alert('로그인 해주세요!!'); location.href='HW3.jsp';</script>");
}
%>
<form action="HW3.jsp" method="post">
<button type="submit">로그아웃</button>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 인증 페이지</title>
</head>
<body>
<!--
2. 로그인 인증 페이지(HW3_login_auth.jsp)
-전송받은 id, pw를 확인하여 id는 "test", pw는 "1234"일 경우
id 세션을 생성(만료 시간은 자유롭게 설정)
- 세션을 생성한 이후에 HW3_login_result.jsp 페이지로 이동
- 페이지 이동 코드
ㄴ out.print("<script>location.href='HW_login_result.jsp'</script>");
-전송받은 id, pw가 "test", "1234"가 아닌 경우, HW3.jsp 페이지로 이동
-->
<%
// id, pw 가져오기
String id = request.getParameter("id");
String pw = request.getParameter("pw");
// 아이디와 비밀번호가 "test"와 "1234"인지 확인
if (id.equals("test") && pw.equals("1234")) {
session.setMaxInactiveInterval(10); // 세션 만료 시간
// id 세션을 생성(만료 시간은 자유롭게 설정)
session.setAttribute("id", id);
// 세션을 생성한 이후에 HW3_login_result.jsp 페이지로 이동
out.print("<script>location.href='HW3_login_result.jsp'</script>");
} else {
// 전송받은 id, pw가 "test", "1234"가 아닌 경우, HW3.jsp 페이지로 이동
out.print("<script>alert('아이디랑 비번이 다릅니다.'); location.href='HW3.jsp';</script>");
}
%>
</body>
</html>