자바35일차

달달한스위츠·2024년 4월 2일

자바배우기

목록 보기
32/43

오늘의 코드
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>
    	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>

0개의 댓글