일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ReactDOM.render is no longer supported in React 18. Use createRoot instead
- Colaboratory 글자 깨짐
- intllij 내 Bean을 찾지 못해서 발생하는 오류
- node.js로 로그인하기
- react오류
- JS 개념
- DB Browser
- 리액트
- intellij
- 모두의 파이썬
- Spring-Framework
- Concurrently
- 타자 게임 만들기
- 거북이 대포 게임
- You are importing createRoot from "react-dom" which is not supported. You should instead import it from "react-dom/client"
- 모던자바스크립트
- vs code 내 node
- Python
- props
- 자바스크립트
- react
- node.js 설치
- googleColaboratory
- 계산맞추기 게임
- 웹 게임을 만들며 배우는 리액트
- 인프런
- spring-boot
- 따라하며 배우는 노드 리액트 기본 강의
- Do it 자바스크립트 + 제이쿼리 입문
- 노드에 리액트 추가하기
- Today
- Total
프로그래밍 삽질 중
JSP 쿠키(Cookie), 파일 업로드, 오류 처리 본문
※쿠키
- 상태를 유지하는 방법(세션과 쿠키)
- 쿠키는 세션과 달리 상태정보를 웹 서버가 아닌 클라이언트에 저장
ex) 회원가입 화면에 자동으로 주소, 전화번호 입력
쇼핑몰에서 주문할 때 장바구니에서 선택한 상품 정보들 유지
이전에 방문한 적이 있는 웹서버에 다시 방문했을 때 몇 번째 방문인지 출력
쇼핑몰에서 클라이언트가 체크했던 상품 정보 유지
쿠키 동작 과정
1) 쿠키 생성 단계 : 응답 데이터와 함꼐 저장(response)
- 쿠키 생성
: Cookie myCookie = new Cookie(String(이름), String(값))
- 생성된 쿠키에 대한 설정
: myCookie.setValue(String)
- 설정이 완료된 쿠키 전송
: response.addCookie(myCookie)
* 쿠키 생성 후 반드시 response 내장객체의 addCookie()메소드로 쿠키 설정해야 함
2) 쿠키 객체 얻기
-요청에 포함된 쿠키 가져오기
: Cookie[] cookies = request.getCookies()
- 쿠키 이름을 얻어오기
: cookies[i].getName()
- 얻어진 이름을 통해 정보 사용
: cookies[i].getValue()
- 쿠키 삭제
: cookies[i].setMaxAge(0); //유효기간을 0으로 설정
: response.addCookie(cookies[i]);
※ 쿠키 vs 세션
- 쿠키
1) Cookie클래스
2) 저장 형식 : 텍스트
3) 저장 장소 : 클라이언트
4) 종료 시점 : 쿠키 저장 시 설정
4) 클라이언트의 리소스 사용
5) 클라이언트에 저장되므로 사용자 변경 가능, 보안에 취약
- 세션
1) HttpSession인터페이스
2) 저장 형식 : Object형
3) 서버 (세션 아이디만 클라이언트에 저장)
4) 종료시점 : 정확한 시점을 알 수 없음
5) 서버의 리소스 사용
6) 서버에 저장되어 있어 보안이 상대적으로 안정적
[예시 1]
<조건>
1) 파일은 총 4개(loginFrm.jsp, loginPro.jsp, logout.jsp, loginChk.jsp)
2) 아이디 : admin 비밀번호 : 1234 로 기억(로그인 성공으로 표시)
→ web.xml 이용해야 함
3) 로그인 성공 시
로그인 성공했음
로그인 폼으로(되돌아 가기)로 표시(로그아웃도 표시)
4) 아이디가 틀릴 경우 아이디 정보 오류, 비밀번호가 틀릴 경우 비밀번호 정보 오류
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[loginFrm.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>
<form action='loginPro.jsp' method='post'>
관리자 로그인<br>
아이디: <input type='text' name='id'>
<input type="checkbox" name="idRemember" value="yes">아이디 기억<br>
비밀번호 : <input type='password' name='pwd'>
<input type='submit' value='전송'>
</form>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
[loginPro.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>
<!-- getInitParameter(String paramName) :
매개변수로 web.xml에 지정했던 param-name 넘겨주면 그에 해당하는 값 갖고 옴-->
<!-- <input type="checkbox" name="idRemember" value="yes">아이디 기억<br> -->
<%! String idRemember; %>
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
if(request.getParameter("idRemember")==null){
idRemember = null;
}else{
idRemember = request.getParameter("idRemember"); //idRemember가 null이 아니면 getParameter
}
//loginFrm에서 CheckBox가 선택된 상태 = idRemember 값 표시
if(id.equals(application.getInitParameter("adminId"))&&
pwd.equals(application.getInitParameter("adminPwd"))&&
idRemember!=null){ //CheckBox가 선택되지 않은 상태 = null
session.setAttribute("id", id);
session.setAttribute("pwd", pwd); //session.setAttribute("설정한 세션아이디", 세션에 넣을 값);
//요청한 쿠키 갖고 오기
Cookie[] cookies = request.getCookies();
if(cookies.length!=2){//이 조건을 넣어줘야 loginFrm가 2번 실행되도 오류가 안남
Cookie cookie = new Cookie("idRemember", id); /위의 조건을 다 만족 시 쿠키를 만들어 줌. 안에 값으로는 id값이 들어가야 함
response.addCookie(cookie);
}
%>
로그인에 성공했음<br>
<a href="loginChk.jsp">로그인 정보 확인</a>
//아이디만 틀릴 때
<% }else if(!id.equals(application.getInitParameter("adminId"))&&
pwd.equals(application.getInitParameter("adminPwd"))){
%>
<script>
alert('로그인 아이디 정보 오류'); //자바스크립트 명령어임... 로그인 실패시 팝업으로 문제를 알려줌
history.back(); // 전의 페이지로 돌아감
</script>
//비밀번호만 틀릴 때
<% }else if(id.equals(application.getInitParameter("adminId"))&&
!pwd.equals(application.getInitParameter("adminPwd"))){
%>
<script>
alert('패스워드 정보 오류');
history.back();
</script>
//아이디랑 비밀번호는 맞으나 아이디 기억 체크 안했을 때
<% }else if(id.equals(application.getInitParameter("adminId"))&&
pwd.equals(application.getInitParameter("adminPwd"))&&
idRemember==null){
session.setAttribute("id", id);
%>
로그인에 성공했음<br>
<a href="loginChk.jsp">로그인 정보 확인</a>
<%
}else{
%>
<script>
alert('아이디와 패스워드 정보 둘다 오류');
history.back();
</script>
<%
}
%>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[loginChk.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>
아이디 <%=session.getAttribute("id") %>로 로그인 한 상태<br>
<a href='logout.jsp'>로그아웃</a>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[logout.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>
<% session.invalidate(); %>
로그아웃 완료.<br>
<a href='loginFrm.jsp'>로그인 화면으로</a>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[web.xml]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<display-name>global_jsp</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
//<context-param></context-param>부분만 입력하면 됨
<context-param>
<param-name>adminId</param-name>
<param-value>admin</param-value>
</context-param>
<context-param>
<param-name>adminPwd</param-name>
<param-value>1234</param-value>
</context-param>
</web-app>
|
cs |
※파일 업로드
- 웹 브라우저 → 서버로 파일 전송, 서버에 저장
- 서버로 업로드 가능한 파일 : 텍스트 파일, 바이너리 파일, 이미지 파일, 문서 등
- JSP 페이지에서 폼 태그 사용(post방식)
※ MultipartRequest
- 웹 페이지에서 서버로 업로드 되는 파일자체만 다루는 클래스
- 웹 브라우저가 전송한 multipart/form-data 유형과 POST 방식의 요청 파라미터 등을
분석한 후 일반 데이터와 파일 데이터를 구분하여 파일 데이터에 접근
- 일반 데이터 : getParameter() 메소드 =/= 파일 : getFileNames() 메소드
[예시 2]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[upload.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>
<form action="uploadProc.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="file"><p>
<input type="submit" value="파일 업로드">
</form>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
[uploadProc.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.*,
com.oreilly.servlet.multipart.*,
java.util.*, java.io.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% String path=application.getRealPath("/upload");
int size= 1024*1024*10;
try {
MultipartRequest multi = new MultipartRequest(
request, path, size, "UTF-8", new DefaultFileRenamePolicy());
Enumeration files = multi.getFileNames();
String name = (String) files.nextElement();
String file = multi.getFilesystemName(name);
long fileSize = multi.getFile("file").length();
String orgFile = multi.getOriginalFileName(name);
String type = multi.getContentType(name);
out.println("파일명" +file+"<br/>");
out.println("파일크키" +fileSize+"<br/>");
out.println("원본파일명" +orgFile+"<br/>");
out.println("콘텐츠유형" +type+"<br/>");
} catch(Exception e) {
out.println("오류 발생" + e);
}
%>
</body>
</html>
|
cs |
※ 오류 처리
- 내부 로직을 처리하는 JSP페이지 내에서 오류나 예외가 발생할 경우 사용자에게
오류가 그대로 노출되는 것 방지, 적절히 처리
- 사용자의 잘못된 입력으로 발생하는 오류는 Javascript를 이용하여 클라이언트 선에서
막아주는 것이 서버측 트래픽 부담을 덜어 줌
[예시3]
정수만 입력하세요
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[divEx.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>
<%
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
%>
<%=num1 %> / <%=num2 %> = <%= (double) num1 / (double) num2%>
<br/>
<a href="div.html">back</a>
<%@page errorPage="div_error.jsp" %>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[divEx.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>
<%
int num1 = Integer.parseInt(request.getParameter("num1"));
int num2 = Integer.parseInt(request.getParameter("num2"));
%>
<%=num1 %> / <%=num2 %> = <%= (double) num1 / (double) num2%>
<br/>
<a href="div.html">back</a>
<%@page errorPage="div_error.jsp" %>
</body>
</html>
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ pafe isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
나누기 처리 중 에러가 발생했습니다.
</body>
</html>
|
cs |
'과거 프로그래밍 자료들 > 자바(Java)' 카테고리의 다른 글
(수정 필요)JDBC&SQL를 이용해 회원 가입 폼 만들기(수정하기) (0) | 2021.04.14 |
---|---|
JSP EL (Expression Language) (0) | 2021.04.13 |
JSP Session & param (0) | 2021.04.12 |
JSP 디렉티브 태그(page, include, taglib) (0) | 2021.04.08 |
JSP 전반적인 설명 및 스크립트 태그(+스크립틀릿 태그) (0) | 2021.04.08 |