Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
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
Tags more
Archives
Today
Total
관리 메뉴

David의 블로그

[JSP/Servlet]상태를 유지할 수 있는 Session, 세션(두번째) 본문

프로그래밍/Jsp_Servlet

[JSP/Servlet]상태를 유지할 수 있는 Session, 세션(두번째)

David 리 2024. 1. 20. 11:50

앞서 첫 번째에는 간단하게 로그인 정보를 세션멤버변수로 등록하여 로그인을 해보는 방법을 살펴보았다.

 

두 번째는 2. 세션멤버변수를 유틸클래스(VO)로 이용해 화면에 뿌려주기를 해 볼 것이다.

 

 

 

[세션멤버변수를 유틸클래스(VO)로 이용해 화면에 뿌려주기]

앞서 내가 저장된 세션 멤버 속성을 가져올 때, 하나 하나 일일이 변수를 만들어 초기화를 해 주었다.

ex) String id = (String)session.getAttribute("MEMBERID");

또, 초기화 한 변수에 맞게 형변환도 해줘야한다. 세션이 Object이기 때문.

만약,

저장된 세션 속성 값들이 여럿 존재한다면? 가령 아이디 / 비밀번호 / 이메일 / 주소 / 핸드폰번호 / 키 / 좋아하는 연예인 등..

여러개 되는 변수들을 초기화하고 형변환까지 하는 행동은 귀찮을 것이다.

 

이처럼,

유틸클래스(VO)로 만들어 준다면 이 귀찮은 행동은 사라지게 된다.

 

 

 

[MemberInfo.java]

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
package util;
 
public class MemberInfo {
    private String id;
    private String pw;
    private String name;
    private String email;
    
    public MemberInfo(String id, String pw, String name, String email) {
        super();
        this.id = id;
        this.pw = pw;
        this.name = name;
        this.email = email;
    }
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPw() {
        return pw;
    }
    public void setPw(String pw) {
        this.pw = pw;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
 
    @Override
    public String toString() {
        return "MemberInfo [id=" + id + ", pw=" + pw + ", name=" + name + ", email=" + email + "]";
    }
    
    
    
}
 
cs

변수 아이디 / 패스워드 / 이름 / 이메일를 초기화 해줬다.

파라미터있는 생성자, 게터/세터 메소드, toString()메소드를 구현했다.

 

 

 

[loginForm.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼 화면입니다.</title>
</head>
<body>
<form method="post" action="<%=request.getContextPath()%>/controller/SessionServlet.do">
    아이디 : <input type="text" name="id" />
    비밀번호 : <input type="password" name="pw" />
    이름 : <input type="text" name="name" />
    이메일 : <input type="email" name="email" />
    <input type="submit" value="전송" />
</form>
</body>
</html>
cs

아이디 / 비밀번호 / 이름 / 이메일을 request객체로 서블릿에다가 보내줄 것이다.

 

 

 

[SessionServlet.java]

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
package controller;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.PageContext;
 
import util.MemberInfo;
 
@WebServlet(urlPatterns = {"/controller/SessionServlet.do"})
public class SessionServlet extends HttpServlet{
 
    MemberInfo memberInfo = null;
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //super.doPost(req, resp);
        process(req, resp);
    }
 
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString();
    }
 
    public void process (HttpServletRequest req, HttpServletResponse res) throws IOException{
        System.out.println("환영합니다!");
        
        HttpSession session = req.getSession(false); 
        
        String id = req.getParameter("id");
        String pw = req.getParameter("pw");
        String name = req.getParameter("name");
        String email = req.getParameter("email");
        
        memberInfo = new MemberInfo(id, pw, name, email);
        
        if (memberInfo != null) {
            session.setAttribute("memberInfo", memberInfo);
        }
                
        System.out.println(memberInfo.toString());
        
        res.sendRedirect(req.getContextPath()+"/practice/viewSession.jsp");
    }
    
    
}
 
cs

38 ~ 41Line : request객체에 있는 아이디 / 비밀번호 / 이름 / 이메일을 각 변수에 초기화 해준다.

43Line : 그리고, 초기화 한 변수를 유틸클래스(VO) 생성자를 호출한다.

45 ~ 47Line : 생성자를 호출해 생성된 멤버변수(memberInfo) 발리데이션 체크를 하고

세션변수를 "memberInfo"로 만들어준다.

49Line : 생성된 세션 변수를 찍어보기 위한 출력문.

 

마지막으로 viewSession.jsp로 리다이렉트 해준다.

 

 

 

[viewSession.jsp]

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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "util.MemberInfo" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>member 세션 정보 뿌려주기 화면입니다.</title>
</head>
<body>
<%
    if (session.getAttribute("memberInfo"!= null) {
        MemberInfo member = (MemberInfo)session.getAttribute("memberInfo");
%>
아이디 : <%= member.getId() %>
패스워드 : <%= member.getPw() %>
이름 : <%= member.getName() %>
이메일 : <%= member.getEmail() %>
<% } else {    %>
세션 정보가 들어있지 않습니다.
<%
    }
%>
</body>
</html>
cs

12 ~ 14Line : 생성된 세션변수를 가져와서 유틸클래스(VO)로 맞춰준다.

15 ~ 18Line : 유틸클래스(VO)에서 구혀한 게터/세터로 출력을 해 볼 수 있다.

세션 정보가 없다면 '세션 정보가 들어있지 않습니다'를 뿌려준다.

 

 

 

[결과]

아이디 / 비밀번호 / 이름 / 이메일을 입력하고 전송을 누른다.