반응형

서블릿에서 다른 서블릿으로 포워딩 할 때 RequestDispatcher를 이용하는 방법이 있지만,

포워드 액션 태그를 사용하면 자바코드 없이도 포워딩이 가능합니다.

또한 포워딩 시 다른 서블릿이나 JSP로 값을 전달할 수 도 있습니다.

 

 

 

˙ 포워드 액션 태그 형식

 

1
2
3
<jsp:forward page="포워딩할 JSP 페이지">
        ...
</jsp:forward>
cs

 

 

 

① login.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
26
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<%
    String msg = request.getParameter("msg");
    if(msg != null){
%>
        <h1><%=msg %></h1>
<%
    }
%>
    <form action="result.jsp" method="post">
    아이디 : <input type="text" name="userID"><br>
    비밀번호 : <input type="password" name="userPw"><br>
    <input type="submit" value="로그인">
    <input type="reset" value="다시 입력">
    </form>
</body>
</html>
cs

 

form 태그를 통해 로그인 버튼을 클릭하면 result.jsp로 파라미터가 전송됩니다.

 

 

 

② result.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
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding("utf-8");
%>
<%!
    String msg = "아이디와 비밀번호 모두 입력해 주세요.";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
<%
String userID = request.getParameter("userID");
String userPw = request.getParameter("userPw");
 
if(userID.length()==0 || userPw.length() == 0){
%>
    <jsp:forward page="login.jsp">
    <jsp:param name="msg" value="<%=msg %>"/>
    </jsp:forward>
<%    
}else{
%>
    <script type="text/javascript">
    alert("로그인 되었습니다.");
    location.href="login.jsp";
    </script>
<%     
}
 
%>
 
</body>
</html>
cs

 

파라미터인 userID의 길이가 0일 때 또는 userPW 길이가 0일때,

즉 아이디와 비밀번호 둘 중 하나라도 입력되지 않았을 때는 forward 태그를 통해 파라미터인 msg가 전달됩니다. 

파라미터를 전달받은 login.jsp 에서는 해당 파라미터인 msg를 출력합니다.

 

 

 

 

아이디와 비밀번호를 모두 입력한 후 로그인 버튼을누르면 alert창이 뜨고 다시 처음 화면으로 돌아옵니다.

 

 

반응형
반응형

① login3.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>login3</title>
</head>
<body>
<form name="frmLogin" method="post" action="login" encType="UTF-8">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pwd"><br>
<input type="submit" value="로그인">
<input type="reset" value="초기화">
</form>
 
</body>
</html>
cs

 

 

아이디와 비밀번호를 입력하고 로그인 버튼을 누르면 form 태그를 통해 LoginServlet으로 파라미터를 전송한다.

 

 

 

② LoginServlet.java

 

http://colorscripter.com/s/FtJrmDH

 

공유된 코드 - Color Scripter

저작권자 : jung_ye_jin@naver.com 삭제 요청 코드 설명 : LoginServlet

colorscripter.com

 

form 태그로 보낸 파라미터(아이디, 비밀번호)를 받는다. MemberVO를 세팅한 후 dao.isExisted로 간다.

 

 

 

③ MemberDAO.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
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
99
100
101
102
package sec03.ex04;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
public class MemberDAO {
    private PreparedStatement pstmt;
    private Connection con;
    private DataSource dataFactory;
    public MemberDAO() {
        try {
            Context ctx = new InitialContext();
            Context envContext = (Context) ctx.lookup("java:/comp/env");
            dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
    
    public List<MemberVO> listmembers(){
        List<MemberVO> list = new ArrayList<MemberVO>();
        try {
            connDB();
            String query = "select * from t_member";
            System.out.println(query);
            pstmt = con.prepareStatement(query);
            ResultSet rs = pstmt.executeQuery();
            while(rs.next()) {
                String id = rs.getString("id");
                String pwd = rs.getString("pwd");
                String name = rs.getString("name");
                String email = rs.getString("email");
                Date joinDate = rs.getDate("joinDate");
                
                MemberVO vo = new MemberVO();
                vo.setId(id);
                vo.setPwd(pwd);
                vo.setName(name);
                vo.setEmail(email);
                vo.setJoinDate(joinDate);
                
                list.add(vo);
            }
            rs.close();
            pstmt.close();
            con.close();
        }catch(Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    
    private void connDB() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("Oracle 드라이버 로딩 성공");
 
            con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe""jyj""java");
            System.out.println("Connection 생성 성공");
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    
    
    public boolean isExisted(MemberVO memberVO) {
        boolean result = false;
        String id = memberVO.getId();
        String pwd = memberVO.getPwd();
        try {
            con = dataFactory.getConnection();
            
            String query="select decode(count(*),1,'true','false') as result from t_member";
            query += " where id=? and pwd=?";
            
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, id);
            pstmt.setString(2, pwd);
            ResultSet rs = pstmt.executeQuery();
            
            rs.next();
            result = Boolean.parseBoolean(rs.getString("result"));
            System.out.println("result = " + result);
        }catch(Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}
 
cs

 

isExisted 메소드에서 해당 아이디와 비밀번호를 가지고 있는 회원이 있는지 확인 후 있으면 true, 없으면 false를 반환한다.

 

 

 

 

LoginServlet.java로 반환된 값이 true이면 아래의 화면을 띄운다. 

회원정보 보기를 클릭하면 ShowMemeber.java로 넘어간다.

 

 

 

ShowMemeber.java 

 

http://colorscripter.com/s/0rPQnMj

 

공유된 코드 - Color Scripter

저작권자 : jung_ye_jin@naver.com 삭제 요청 코드 설명 : ShowMember

colorscripter.com

 

 

 

 

⑥  ③번에서 false가 반환 되면 아래의 화면을 띄운다.

 

 

반응형
반응형

▶ GET 방식과 POST 방식의 차이  

 

GET 방식

- 서블릿에 데이터를전송할 때는 데이터가 URL 뒤에 name=value 형태로 전송됨

- 여러 개의 데이터를 전송할 때는 '&'로 구분해서 전송됨

- 보안이 취약함

- 전송할 수 잇는 데이터는 최대 255자

- 기본 전송 방식이고 사용이 쉬움

- 웹 브라우저에 직접 입력해서 전송 가능

- 서블릿에서는 doGet( )을 이용해 데이터 처리

 

POST 방식

- 서블릿에 데이터를 전송할 때는 TCP/IP 프로토콜 데이터의 body 영역에 숨겨진 채 전송됨

- 보안에 유리

- 전송 데이터 용량이 무제한

- 전송 시 서블릿에서는 또 다시 가져오는 작업을 해야하므로 처리속도가 GET 방식보다 느림

- 서블릿에서는 doPost( )를 이용해 데이터 처리 

 

 

 

▶ GET 방식과 POST 방식 요청 동시에 처리하기  

 

① login.html 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 창</title>
</head>
<body>
<form name="frmLogin" method="get" action="login2" encType="UTF-8">
    아이디 : <input type="text" name="user_id"><br>
    비밀번호 : <input type="password" name="user_pw"><br>
    <input type="submit" value="로그인"><input type="reset" value="다시입력">
</form>
</body>
</html>
cs

 

 

② LoginServlet2.java 작성 (생성 시 doGet과 doPost에 체크)

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
package sec01.ex01;
 
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class LoginServlet2
 */
@WebServlet("/login2")
public class LoginServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init 메서드 호출");
    }
 
    /**
     * @see Servlet#destroy()
     */
    public void destroy() {
        System.out.println("destroy 메서드 호출");
    }
 
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        System.out.println("doGet 메서드 호출");
        doHandle(request, response);
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        System.out.println("doPost 메서드 호출");
        doHandle(request, response);
    }
 
    private void doHandle(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException{
        request.setCharacterEncoding("utf-8");
        String user_id = request.getParameter("user_id");
        System.out.println("doHandle 메서드 호출");
        String user_pw = request.getParameter("user_pw");
        System.out.println("아이디 : " + user_id);
        System.out.println("비밀번호 : " + user_pw);
        
    }
    
 
}
 
cs

이 방식은 GET 방식으로 요청 시 다시 doHandle( )을 호출하고,

POST 방식으로 요청시 다시 doHandle( )을 호출하기 때문에 모든 호출방식에 대해 처리 가능

 

 

 

③ GET 방식으로 요청한 결과

 

 

 

 

④ POST 방식으로 요청한 결과 ( login.html 에서 method를 post로 변경한 후 실행 )

 

반응형

+ Recent posts