관리 메뉴

프로그래밍 삽질 중

JSP Session & param 본문

과거 프로그래밍 자료들/자바(Java)

JSP Session & param

평부 2021. 4. 12. 16:47

 

seeion(중요함)

- HTTP 프로토콜 문제점 해결, HTTP 프로토콜이 비연결형 프로토콜이기에 한 페이지가 출력된 후

다음에는 클라이언트와 서버의 연결이 끊어짐

- jvavax.servlet.http.HttpSession 인터페이스의 참조 변수

- 접속하는 사용자 별로 따로 생성되며 일정시간 유지되고 소멸

- setAttribute() 메서드를 통해 임의의 값을 저장해 놓고 활용 가능

 

 

session이 주로 사용되는 경우

- 로그인 후 세션 설정하고 일정 시간이 지난 후 다시 사용자 인증 요구할 때

- 사용자의 페이지 이동 동선 등 웹 페이지 트래킹 분석 기능

 

 

session 내장객체

1) getId() <-- String 반환

- 해당 세션의 세션 ID 반환

2) getCreationTime() <-- long 반환

- 세션의 생성된 시간을 반환

3) getLastAccessedTime(0 <-- long 반환

- 클라이언트 요청이 마지막으로 시도된 시간을 반환

4) setMaxInactiveInterval(int time) <-- int 반환

- 세션을 유지하기로 지정된 값 반환, 기본값은 30

5) isNew() <-- boolean 반환

- 클라리언트 세션 ID를 할당하지 않은 경우 true반환

6) invalidate() <-- void 반환

- 해당 세션을 종료시킴

 

 

[예시1]

[로그인 처리 - 로그아웃 처리]

 

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
[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>
 
<%if(session.isNew() || session.getAttribute("userId")==null) {
String msg = (String)request.getAttribute("error"); %>
 
<form action="loginProc.jsp" method="POST">
 
ID:<input type="text" name="userId"/><br>
PW: <input type="password" name="userPwd"><br>        
<input type="submit" value="로그인">
 
<!-- ../responseProc.jsp (여러개면 && 연결) ? fruit=사과(name=value 형식)&season=여름 -->
 
</form>
 
<% } else {%> <a href="loginProc.jsp">로그아웃</a>
<% } %>
</body>
</html>
 
 
 
[loginProc.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>
 
<%if(request.getMethod().equals("POST")) { %>
<%
 
request.setCharacterEncoding("UTF-8"); 
String userId = request.getParameter("userId");        
String userPwd = request.getParameter("userPwd");



// 유효성 처리 -- 비어 있으면 다시 loginFrm.jsp 
 
if(userId.isEmpty() || userPwd.isEmpty()) {
RequestDispatcher rd = request.getRequestDispatcher("loginFrm.jsp");
rd.forward(request, response)
 
 
//RequestDispatcher : 현재 request에 담긴 정보를 저장하고 있다가
//  다음 페이지  다음 페이지에도 해당 정보를   있게 저장하는 기능
 
//request - repsonse 단계에는 foward와 sendRedirct방식 2가지 존재
 
//forward에는 A.jsp  Servlet  B.jsp로 넘어감
//sendRedirect : 모든 파라미터 정보를 제외하고 단순 페이지 호출만 하는 차이
 
//RequestDispatcher rd(변수선언) = request.getRequestDispatcher("loginFrm.jsp" -- forward를 요청할 페이지);
//모델 m = new 모델() --- 모델 호출(객체 생성)
 



//로그인 처리
 
if(session.isNew() || session.getAttribute("userId") == null) {
    session.setAttribute("userId", userId); //"userId" 이름으로 userId 등록
    session.setMaxInactiveInterval(1*60);  //재시동  60초에  번씩  *, 로그아웃  문제 발생할  있어서 주석 처리/
    out.print("로그인 완료되었음");
} else {
out.print("이미 로그인 상태임");
}
 
%>
 
아이디 : <%=userId %> / 비밀번호 : <%=userPwd %>
<%
} else if(request.getMethod().equals("GET")) { //짝 맞춰가면서 진행하기(<%)
if(session != null || session.getAttribute("userId") != null) {
session.invalidate();
out.print("로그아웃 작업 완료");
} else {
out.println("현재 로그인 상태가 아님");
}
}
 
%>
 
</body>
 
</html>
 
<!-- a href => get 방식 -->
cs

 

 

※ 액션 태그

- 서버나 클라이언트에 어떤 행동을 하도록 명령하는 태그

- JSP 페이지에서 페이지와 페이지 사이를 제어

- XML형식 <jsp: .../>를 사용

 

 

※ 표준 액션 태그 : JSP 컨테이너에서 제공하는 미리 정해진 기능들

 

 

※ 액션 태그 종류 (주로 많이 사용)

1) forward

2) include

3) useBean

5) setProperty

6) getProperty

7) param

 

 

forward 액션 태그

- 현재 JSP 페이지에서 다른 페이지로 이동하는 태그

-<jsp:forward page="파일명"/> OR <jsp:forward page="파일명">뭔가 삽입 가능(page 속성값)</jsp.forward>

 

page 속성값

- 현재 JSP 페이지에서 이동할 페이지의 외부 파일명

- 외부 파일은 현재 JSP 페이지에 같은 디렉토리에 있으면 파일명만(그렇지 않으면 전체 URL 지정)

 

forward 액션 태그 처리 과정

- forward 태그가 있던 JSP 페이지의 모든 내용을 버리고 forward 태그가 지정하는 다른 페이지로 이동

- Request 기본 객체, response 기본 객체가 second.jsp로 전달

 

[예시 2]

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
[ex13.jsp] GET 방식
 
-> ctrl+f11 -> 주소창에 : http://localhost:9090/JSP_global/0409/ex13.jsp?p=hello.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>
<%String p = request.getParameter("p"); %>
<jsp:forward page="<%=p%>"/>
</body>
</html>
 
 
 
[postEx] POST방식
 
-> 입력창에 "hello"입력
<%@ 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 method="POST" action="post.jsp">
이동하고 싶은 페이지 <input type="text" name="page"/>
<input type="submit" value="이동">
</form>
</body>
</html>
 
 
[post.jsp] - POST 방식 사용 시 필요
 
<%@ 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 p = request.getParameter("page") + ".jsp"; %>
<jsp:forward page="<%=p %>"></jsp:forward>
</body>
</html>
 
 
[hello.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>
<h1>Hello!!!</h1>
</body>
</html>
 
cs

 

[예시3]

입력양식을 통해 전달받은 요청 페이지로 foward하여 이동

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
[select.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="<%=request.getContextPath() %>/view.jsp"> --%>
<form action="view.jsp" method="post">
 
보고 싶은 페이지 선택:
 
<select name="code">
<option value="A">A 페이지</option>
<option value="B">B 페이지</option>
<option value="C">C 페이지</option>
 
</select>
<input type="submit" value="이동">
</form>
</body>
</html>
 
 
[view.jsp]
 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String code = request.getParameter("code");
String viewPageURI = null;
if(code.equals("A")) {
viewPageURI = "a.jsp";
} else if (code.equals("B")) {
viewPageURI = "b.jsp";
} else if (code.equals("C")) {
viewPageURI = "c.jsp";
}
%>
<jsp:forward page="<%=viewPageURI %>"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
 
 
[a.jsp] b.jsp, c.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>
이 페이지는 <b><font size="5">A</font></b>
</body>
</html>
cs

 

param 액션 태그

- 단독 사용x, 현재 JSP 페이지에서 다른 페이지에 정보 전달

-<jsp:forward> <jsp:include> 태그를 내부에서 사용

- 다른 페이지에서 여러 개의 정보 전송해야 할 때는 다중의 param 액션 태그 사용

 

[예시 4]

param 예시

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
[param.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>
 
<!-- param태그를 이용하여 prama_data.jsp로 정보 전달 -->
<jsp:forward page="param_data.jsp">
<jsp:param name="userId" value='admin'/>
<jsp:param name="name" value='<%=java.net.URLEncoder.encode("관리자") %>'/>
</jsp:forward>
<p>Java Server Page
</body>
</html>
 
 
[param_data.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>
<p>
아이디: <%=request.getParameter("userId") %>
<% String name = request.getParameter("name"); %>
<p>
이름 : <%=java.net.URLDecoder.decode(name) %>
</body>
</html>
 
 
cs

include 액션 태그

- include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에

외부파일(HTML, JSP, 서블릿 페이지 등) 내용을 포함하는 태그

 

page 속성 값

- 현재 JSP 페이지 내에 포함할 내용을 가진 외부 파일명

- 외부파일은 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정하고,

그렇지 않으면 전체 URL(또는 상대경로)로 설정해야 함

 

flush 속성 값

- 설정한 외부 파일로 제어가 이동할 때