'Back-End/JSP'에 해당되는 글 71건

  1. 2019.05.24 19.05.24 회원가입 (model 2 동영상 11강)
  2. 2019.05.24 Dispatcher 방식과 Redirect 방식
  3. 2019.05.23 19.05.23 고급 서블릿 파라미터 활용 (model 2 동영상 9강~10강)
  4. 2019.05.23 19.05.23 고급 서블릿 파라미터 활용 (model 2 동영상 8강)
  5. 2019.05.23 19.05.23 고급 서블릿 활용 (model 2 7강)
  6. 2019.05.22 19.05.22 서블릿 이해
  7. 2019.05.21 19.05.21 jsp MVC model2 programming-JSTL (jsp model 2 4강~5강)
  8. 2019.05.21 19.05.21 Expression Laguage 사용법 (jsp model 2 2강~3강)

19.05.24 회원가입 (model 2 동영상 11강)

Back-End/JSP 2019. 5. 24. 12:03

모든 회원 보기 페이지 구현




MemberlistCon.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
package control;
 
import java.io.IOException;
import java.util.Vector;
 
import javax.servlet.RequestDispatcher;
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 model.MemberBean;
import model.MemberDAO;
 
//Servlet과 매핑될 URL 패턴을 지정한다.
//사용자를 화면에 출력하는 페이지
@WebServlet("/MemberlistCon.do")
public class MemberlistCon extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void reqPro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // 데이터 베이스에 연결하여 회원의 모든 정보를 리턴
        MemberDAO mdao = new MemberDAO();
        // 유동적이기 때문에 벡터 타입을 사용한다.
        Vector<MemberBean> v = mdao.getAllMember();
 
        request.setAttribute("v", v); // 벡터를 jsp 쪽으로 넘겨준다.
        System.out.println(v);
 
        // Dispatcher 방식은 클라이언트가 요청하면서 전송한 데이터를 그대로 유지한다.
        RequestDispatcher dis = request.getRequestDispatcher("MemberList.jsp");
        dis.forward(request, response);
    }
 
}
 
cs



MemberList.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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
 
    <center>
        <h2>모든 회원 보기</h2>
        <table width="800" border="1" bordercolor="gray">
            <tr height="40">
                <td align="center" width="50">아이디</td>
                <td align="center" width="200">이메일</td>
                <td align="center" width="150">전화</td>
                <td align="center" width="150">취미</td>
                <td align="center" width="150">직업</td>
                <td align="center" width="100">나이</td>
            </tr>
            <!-- forEach문을 돌려서 빈에 저장된 값을 차례대로 출력한다. -->
            <!-- c태그를 사용하였으므로 $를 사용하여 출력한다. -->
 
            <c:forEach var="bean" items="${v }">
 
                <tr height="40">
                    <td align="center" width="50">${bean.id }</td>
                    <td align="center" width="200"><a href="#">${bean.email }</a>
                    </td>
                    <td align="center" width="150">${bean.tel }</td>
                    <td align="center" width="150">${bean.hobby }</td>
                    <td align="center" width="150">${bean.job }</td>
                    <td align="center" width="100">${bean.age }</td>
                </tr>
            </c:forEach>
        </table>
    </center>
</body>
</html>
cs



MemberDAO.java (DB연결) 

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
103
104
105
106
107
package model;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
public class MemberDAO {
 
    Connection con;
    PreparedStatement pstmt;
    ResultSet rs;
 
    public void getCon() {
        try {
 
            // 데이터베이스 연결 코드
            Context initctx = new InitialContext();
            Context envctx = (Context) initctx.lookup("java:comp/env");
            DataSource ds = (DataSource) envctx.lookup("jdbc/pool");
            con = ds.getConnection();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    // 회원 한사람에 대한 정보를 저장하는 메소드
    public void insertMember(MemberBean bean) {
        getCon();
 
        try {
 
            // 쿼리 준비하기
            String sql = "insert into member values (?,?,?,?,?,?,?,?) ";
 
            // 쿼리 실행할 객체 선언
            pstmt = con.prepareStatement(sql);
 
            // ?에 값을 대입시켜준다.
            pstmt.setString(1, bean.getId());
            pstmt.setString(2, bean.getPass1());
            pstmt.setString(3, bean.getEmail());
            pstmt.setString(4, bean.getTel());
            pstmt.setString(5, bean.getHobby());
            pstmt.setString(6, bean.getJob());
            pstmt.setString(7, bean.getAge());
            pstmt.setString(8, bean.getInfo());
 
            // 쿼리 실행
            pstmt.executeUpdate();
            con.close();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    // 모든 회원의 정보를 리턴하는 메소드
    public Vector<MemberBean> getAllMember() {
 
        // 리턴타입을 먼저 선언(객체를 먼저 생성)한다.
        Vector<MemberBean> v = new Vector<>();
 
        getCon();
 
        try {
            // 쿼리 준비
            String sql = "select * from member";
            // 쿼리 객체 준비
            pstmt = con.prepareStatement(sql);
            // 쿼리 실행후 결과를 리턴한다.
            rs = pstmt.executeQuery();
            // 반복문을 돌면서 회원의 정보를 저장한다.
            // 저장을 하려면 빈 클래스안에 빈공간이 있어야 하기 때문에 객체를 생성한다.
            while (rs.next()) {
                MemberBean bean = new MemberBean();
                bean.setId(rs.getString(1));
                bean.setPass1(rs.getString(2));
                bean.setEmail(rs.getString(3));
                bean.setTel(rs.getString(4));
                bean.setHobby(rs.getString(5));
                bean.setJob(rs.getString(6));
                bean.setAge(rs.getString(7));
                bean.setInfo(rs.getString(8));
 
                // 벡터의 빈 클래스에 저장함
                v.add(bean);
            }
 
            con.close();
 
        } catch (Exception e) {
 
            e.printStackTrace();
        }
        return v;
    }
 
}
 
cs




:

Dispatcher 방식과 Redirect 방식

Back-End/JSP 2019. 5. 24. 11:17

Dispatcher 방식과  Redirect 방식


1. Dispatcher방식 -->forward()

forward()[전달하기]는 클라이언트가 요청하면서 전송한 데이터를 그대로 유지한다.


(1) 예제

RequestDispatcher dispatcher = request.getRequestDispatcher("dispatcher.jsp");

      request.setAttribute("request","requestValue");

     dispatcher.forward(request, response);


dispatcher.jsp

request 속성 값 : <%=request.getAttribute("request") %>

포워딩이 되더라도 주소가 변경되지 않는다. (같은 request영역을 공유하게 됨)



출처: https://devbox.tistory.com/entry/Comporison-Dispatcher방식과-Redirect-방식 [장인개발자를 꿈꾸는 :: 기록하는 공간]



2. Redirect 방식 --> sendRedirect()

Redirect()[이동하기]는 새로운 페이지로 완전히 이동해서 기존 데이터를 하나도 사용할 수 없다.


request.setAttribute("request", "requestValue");

response.sendRedirect("redirect.jsp");


 redirect.jsp

 request 속성 값 : <%=request.getAttribute("request") %> // null

포워딩될 때 브라우저의 주소 표시줄의 URL이 변경된다. 포워딩된 jsp페이지에서는 서블릿에서 request영역에 공유한 속성값에 접근 할 수 없다.


(1) 예제

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;


public class Round14_05_Servlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

//한글 데이터가 없기 때문에 Encode 설정 하지 않음.

String method = request.getMethod();

//요청 메서드를 얻어내는 작업

if(method.equalsIgnoreCase("GET")) {

//요청 방식이 GET이라면

response.sendRedirect("http://localhost:8080/Round14/Round14_05_Get_Servlet.htm");

//Round14_05_Get_Servlet.htm으로 이동한다.

return;

}

else if(method.equalsIgnoreCase("POST")){

//요청 방식이 POST라면

response.sendRedirect("Round14_05_Post_Servlet.htm");

//Round14_05_Post_Servlet.htm으로 이동한다.

return;

}

}

}



출처: https://devbox.tistory.com/entry/Comporison-Dispatcher방식과-Redirect-방식 [장인개발자를 꿈꾸는 :: 기록하는 공간]

:

19.05.23 고급 서블릿 파라미터 활용 (model 2 동영상 9강~10강)

Back-End/JSP 2019. 5. 23. 15:59

MemberJoin.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
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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 
<center>
    <h2>회원 가입</h2>
    <body>
//proc.do 서블릿으로 회원가입시 입력한 값을 넘겨준다.
        <form action="proc.do" method="post">
            <table width="500" border="1">
 
                <tr height="50">
                    <td width="150" align="center">아이디</td>
                    <td width="350" align="center"><input type="text" name="id"
                        size="40" placeholder="id를 넣으세요."></td>
                <tr height="50">
                    <td width="150" align="center">패스워드</td>
                    <td width="350" align="center"><input type="password"
                        name="pass1" size="40" placeholder="비밀번호는 영문과 숫자만 넣어주세요."></td>
                <tr height="50">
                    <td width="150" align="center">패스워드 확인</td>
                    <td width="350" align="center"><input type="password"
                        name="pass2" size="40"></td>
                <tr height="50">
                    <td width="150" align="center">이메일</td>
                    <td width="350" align="center"><input type="email"
                        name="email" size="40" placeholer></td>
                <tr height="50">
                    <td width="150" align="center">전화번호</td>
                    <td width="350" align="center"><input type="tel" name="tel"
                        size="40"></td>
                <tr heigth="50">
                    <td width="150" align="center">당신의 관심분야</td>
                    <td width="350" align="center"><input type="checkbox"
                        name="hobby" value="캠핑">캠핑 &nbsp;&nbsp; <input
                        type="checkbox" name="hobby" value="등산">등산 &nbsp;&nbsp; <input
                        type="checkbox" name="hobby" value="영화">영화 &nbsp;&nbsp; <input
                        type="checkbox" name="hobby" value="독서">독서 &nbsp;&nbsp;</td>
                </tr>
                <tr heigth="50">
                    <td width="150" align="center">당신의 직업은</td>
                    <td width="350" align="center"><select name="job">
                            <option value="교사">교사</option>
                            <option value="변호사">변호사</option>
                            <option value="의사">의사</option>
                            <option value="기술사">기술사</option>
                    </select></td>
                </tr>
                <tr height="50">
                    <td width="150" align="center">당신의 연령은</td>
                    <td width="350" align="center"><input type="radio" name="age"
                        ㄴㄴ
                        value="20">20대&nbsp;&nbsp; <input
                        type="radio" name="age" value="30">30대&nbsp;&nbsp; <input
                        type="radio" name="age" value="40">40대&nbsp;&nbsp;</td>
                </tr>
 
                <tr height="50">
                    <td width="150" align="center">하고싶은말</td>
                    <td width="350" align="center"><textarea rows="5" cols="40"
                            name="info"></textarea></td>
                </tr>
 
                <tr height="50">
                    <td align="center" colspan="2"><input type="submit"
                        value="회원 가입"> <input type="reset" value="취소">
            </table>
        </form>
</center>
</body>
</html>
cs



MemberList.jsp (회원 리스트 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
MemberList로 이동
</body>
</html>
cs



LoginError.jsp (에러 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
LoginError.jsp
</body>
</html>
cs



MemberBean.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
package model;
 
public class MemberBean {
    
    private String id;
    private String pass1;
    private String pass2;
    private String email;
    private String tel;
    private String hobby;
    private String job;
    private String age;
    private String info;
    
    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPass1() {
        return pass1;
    }
    public void setPass1(String pass1) {
        this.pass1 = pass1;
    }
    public String getPass2() {
        return pass2;
    }
    public void setPass2(String pass2) {
        this.pass2 = pass2;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    public String getJob() {
        return job;
    }
    public void setJob(String job) {
        this.job = job;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    
    
    
    
    
    
}
 
cs



MemberDAO.java (DB연결 클래스)

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
package model;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
public class MemberDAO {
 
    Connection con;
    PreparedStatement pstmt;
    ResultSet rs;
 
    public void getCon() {
        try {
 
            // 데이터베이스 연결 코드
            Context initctx = new InitialContext();
            Context envctx = (Context) initctx.lookup("java:comp/env");
            DataSource ds = (DataSource) envctx.lookup("jdbc/pool");
            con = ds.getConnection();

            

//InitialContext는 프로젝트에서 서버를 사용할 수 있도록 Context를 구성, //web.xml에서 앤트리나 리소스 정보가 위치해있는 곳이 "java:comp/env" //Context의 lookup(참고)메서드로 "java:comp/env" 정보 읽어들임 //읽어들인 정보를 envctx에 담고 서버를 사용하기위해 설정했던 이름인 jdbc/pool를 참고하여 //(jdbc/pool과 매핑되는 리소스를 가져옴) //DataSource객체에 담는다. //(생성된 Context객체에서 리소스 위치한 환경 참고, 커넥션풀 리소스의 이름 참고하여 데이터소스 객체에 담음 ) //DataSource객체에서 getConnection하여 커넥션 객체에 담는다. //정리 : Context 객체로 리소스 위치와 리소스 이름을 참고하여 미리 설정해둔 타입(데이터소스)으로 커넥션 객체를 얻음



 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
    // 회원 한사람에 대한 정보를 저장하는 메소드
    public void insertMember(MemberBean bean) {
        getCon();
 
        try {
 
            // 쿼리 준비하기
            String sql = "insert into member values (?,?,?,?,?,?,?,?) ";
 
            // 쿼리 실행할 객체 선언
            pstmt = con.prepareStatement(sql);
 
            // ?에 값을 대입시켜준다.
            pstmt.setString(1, bean.getId());
            pstmt.setString(2, bean.getPass1());
            pstmt.setString(3, bean.getEmail());
            pstmt.setString(4, bean.getTel());
            pstmt.setString(5, bean.getHobby());
            pstmt.setString(6, bean.getJob());
            pstmt.setString(7, bean.getAge());
            pstmt.setString(8, bean.getInfo());
 
            // 쿼리 실행
            pstmt.executeUpdate();
            con.close();
 
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
 
}
 
cs



MemberJoinProc.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
package control;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
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 model.MemberBean;
import model.MemberDAO;
 
@WebServlet("/proc.do") //proc.do url을 매핑한다.
public class MemberJoinProc extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void reqPro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // 빈클래스 객체를 생성하고 각각 값들을 받아서 빈 클래스에 저장한다.
 
        // 빈클래스에 저장하기 위해 빈클래스 객체 생성
        MemberBean bean = new MemberBean();
 
        // request.getParameter메소드를 사용해서 받은 값들을 빈 클래스에 저장시킨다.
 
        bean.setId(request.getParameter("id"));
        String pass1 = request.getParameter("pass1");
        String pass2 = request.getParameter("pass2");
        bean.setPass1(pass1);
        bean.setPass2(pass2);
        bean.setEmail(request.getParameter("email"));
        bean.setTel(request.getParameter("tel"));
 
        // 취미는 여러개를 선택할 수 있기때문에 배열에 담아서 저장하고
        String[] arr = request.getParameterValues("hobby");
        // data의 초기값을 선언
        String data = "";
        // 향상된 for문 arr배열의 원소를 하나씩 출력해 string에 저장한다.
        for (String string : arr) {
            data += string + " "// 하나의 스트링으로 자료를 연결;
        }
 
        bean.setHobby(data);
        bean.setJob(request.getParameter("job"));
        bean.setAge(request.getParameter("age"));
        bean.setInfo(request.getParameter("info"));
 
        // 패스워드가 같을 경우에만 데이터 베이스에 저장
        if (pass1.equals(pass2)) {
            // 데어터베이스 객체 생성
            MemberDAO mdao = new MemberDAO();
 
            mdao.insertMember(bean);
 
            RequestDispatcher dis = request.getRequestDispatcher("MemberList.jsp");
            dis.forward(request, response);
 
        } else // 패스워드가 다를시 메시지를 출력하고 에러페이지로 이동함
        {
            // RequestDispatcher은 특정 자원에 처리를 요청하고 처리 결과를 얻어오는 기능을 수행하는 클래스.
            // 즉 a.jsp 내에서 RequestDispatcher을 사용하여 b.jsp로 요청을 보낼 수 있습니다.
 
            request.setAttribute("msg""패스워드가 일치 하지 않습니다.");
            RequestDispatcher dis = request.getRequestDispatcher("LoginError.jsp");
            dis.forward(request, response);
 
        }
 
        // 데이터베이스 객체 선언한 후에 저장
 
    }
 
}
 
cs


:

19.05.23 고급 서블릿 파라미터 활용 (model 2 동영상 8강)

Back-End/JSP 2019. 5. 23. 11:38

-(Bean 클래스를 활용) 서블릿 파라미터 처리-


use bean은 서블릿에서 사용불가 (자바코드이기 때문에)


requset.getParameter를 사용하지 않고 


빈클래스를 만들어 jsp로 자료를 한번에 넘기기




-예제 및 출력 결과-


Memberjoin2.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
39
40
41
42
43
44
45
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <center>
        <h2>회원 가입 양식</h2>
        <form action="MProc2" method="post">
            <!--서블릿 이름 (맵핑할) 클래스 이름이 아님-->
            <table width="400" border="1" bordercolor="gray">
                <tr height="40">
                    <td width="150" align="center">아이디</td>
                    <td width="250"><input type="text" name="id"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">패스워드</td>
                    <td width="250"><input type="password" name="password"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">이메일</td>
                    <td width="250"><input type="email" name="email"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">전화번호</td>
                    <td width="250"><input type="tel" name="tel"></td>
                </tr>
 
                <tr height="40">
                    <td width="150" align="center">주소</td>
                    <td width="250"><input type="text" name="address"></td>
                </tr>
 
                <tr height="40">
                    <td width="40" align="center" colspan="2"><input type="submit"
                        value="회원가입"></td>
                </tr>
 
            </table>
        </form>
    </center>
</body>
</html>
cs



MemberJoinProc2.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
package control;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
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 model.MemberBean;
 
/**
 * Servlet implementation class MemberJoinProc2
 */
@WebServlet("/MProc2"// Memberjoin2 jsp파일에서 MProc2를 호출하고 있으므로 url도 그거에 맞게끔 변경 (맵핑 한다)
public class MemberJoinProc2 extends HttpServlet {
 
    // doGet와 doPost는 값을 2개 밖에 받지못한다 . (request, response 두개만 받을수 있다. 개수가 넘어갈시에는
    // 넘겨지지 않음)
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void reqPro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // 유즈빈은 자바코드이므로 사용이 불가하다 그러므로 멤버빈 클래스를 활용한다.
 
        // 멤버빈을 사용하기 위해 멤버빈 객체를 생성
        MemberBean bean = new MemberBean();
 
        // 값들을 하나씩 받아와 빈 클래스에 저장함
        bean.setId(request.getParameter("id"));
        bean.setPassword(request.getParameter("password"));
        bean.setEmail(request.getParameter("email"));
        bean.setTel(request.getParameter("tel"));
        bean.setAddress(request.getParameter("address"));
 
        // request 객체에 bean 클래스를 추가
        request.setAttribute("bean", bean);
 
        RequestDispatcher dis = request.getRequestDispatcher("MemberView.jsp");
        dis.forward(request, response);
 
    }
}
 
cs



MemberBean.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
package model;
 
public class MemberBean {
 
    private String id;
    private String password;
    private String email;
    private String tel;
    private String address;
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public String getTel() {
        return tel;
    }
 
    public void setTel(String tel) {
        this.tel = tel;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
}
 
cs



MemberView.jsp (빈클래스에서 자료를 넘겨받아서 출력하는 페이지)

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>당신의 아이디는 ${bean.id } 당신의 패스워드는 ${bean.password }
 
 
</body>
</html>
cs




:

19.05.23 고급 서블릿 활용 (model 2 7강)

Back-End/JSP 2019. 5. 23. 10:27

-예제 및 출력 결과-


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
package control;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
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 HelloWorld
 */
@WebServlet("/HelloWorld"// /HelloWorld라고 주소 url에 표시해주어야 이 서블릿 클래스가 실행됩니다.
                            // 만약 코드를 (" ") 안쪽에 주소를 변경하면 실행되지 않는다. (인위적으로 변경시 실행가능)
                            // 이것을 url 매핑이라 한다. (url과 서블릿이 동일해야 실행된다.)
 
public class HelloWorld extends HttpServlet {
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        reqPro(request, response);
    }
 
    // Get방식과 Post방식을 둘다 처리해주는 메소드를 만들면 편하다.
    // 일괄처리 즉, doget 이던 dopost 이던 아래 reqpro 메소드가 실행되게 해줌
    protected void reqPro(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        // 화면에 Helloworld 라고 출력을 하고 싶어요.. jsp 쪽으로 넘겨질 데이터를 설정
        String msg = "Hello World~~ 안녕하세요.";
        Integer data = 12;
 
        // jsp 쪽으로 데이터를 request에 부착하여 넘겨줌
        // setAttribute는 오브젝트 타입이므로 모든 객체를 다 집어넣을 수 있다.
        request.setAttribute("msg", msg);
        request.setAttribute("data", data);
 
        // 서블릿에서 jsp를 호출하면서 데이터를 같이 넘겨주는 객체 RequestDispatcher(인터페이스) 를 선언
        RequestDispatcher rd = request.getRequestDispatcher("HelloWorld.jsp"); // jsp 파일명을 기술
        // jsp로 (request, response) 데이터를 이동
        rd.forward(request, response);
 
    }
 
}
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
 
    <center>
        <h2>결과 보기</h2>
 
        인사말 : ${msg }
        <p>숫자 : ${data }
    </center>
</body>
</html>
 
cs


HelloWorld URL과 매핑된 값이 출력된다.



:

19.05.22 서블릿 이해

Back-End/JSP 2019. 5. 22. 23:46



  

  서블릿의 이해


  1. 홈페이지 (클라이언트)에서 자료를 요구함


  2. 사용자의 요청을 받아들여서 Controller (Servlet) 에서 처리함


  3. DAO클래스가 DB서버로 접근해서 모든 DB데이터를 가져온다.


  4. Servlet쪽에 받은  자료를 넘겨준다.


  5. Servlet쪽에서는 결과를 JSP에 보내준다.


  6. JSP 에서는 다시 홈페이지 (클라이언트에) 자료를 출력해준다.





-MVC 패턴 (Model View Controller)-


사용자 인터페이스로부터 개발하는 부분을 완전히 분리해놓은 형태.

개발, 테스트, 유지를 독립적으로 수행 할 수 있게 해주기도 한다.




-서블릿 사용 이유-


JSP 페이지에서 자바코드를 분리하기 위함




-서블릿 작성, 맵핑하는 두 가지 방법-


1. 프로그램 실행 시 web.xml을 가장 먼저 읽어들이므로 web.xml 코드에 URL과 서블릿을 맵핑(대응)시키는 방법

   ( ex. URL에 hello.do가 들어오면 서블릿클래스인 HellowWorld가 실행되게끔)


2. 어노테이션을 이용한 방법 ( 최신버전에서만 사용 가능 )



  

  1. 이클립스에서 서블릿코드 생성


  2. 서블릿(Servlet) 코드 작성


  3. URL과 서블릿 맵핑(Mapping)하기


  4. 실행 후 웹브라우저에서 결과 확인 


:

19.05.21 jsp MVC model2 programming-JSTL (jsp model 2 4강~5강)

Back-End/JSP 2019. 5. 21. 17:55

JSTL 이란?


표현언어 (EL : Expression Language)의 값(데이터)를 웹 페이지에 표시 (표현) 하는데 사용되는 태그 입니다.


(자바 . 스탠다드 . 태그 . 라이브러리) 의 약자



- JSTL -


라이브러리

하위기능 

접두어 

관련 URL 

코어

변수지원, 흐름제어, URL 처리 

http://java.sun.com/jsp/jstl/core

XML

XML 관련 처리, Xml 흐름제어

x

http://java.sun.com/jsp/jstl/xml

국제화

국제화 처리, 메시지 관리

fmt

http://java.sun.com/jsp/jstl/fmt

데이터베이스

데이터베이스 접근

sql

http://java.sun.com/jsp/jstl/sql

함수

Collection 처리 String 처리

fn

http://java.sun.com/jsp/jstl/functions



-코어 라이브러리 사용이유-


유동적인 값을 출력할때는 벡터를 사용해서 출력을 해야하는데 그렇게 하려면 반복문 FOR문을 사용해야 한다.

for문을 사용하게되면 model2방식을 사용하더라도 jsp 파일에 자바코드가 섞여들어가서 model 2방식을 사용하는 의미가 없어지게 된다.

그렇기 때문에 코어 라이브러리를 사용하게 된다.



태그 요약 (Tag Summary)

catch


  body 위치에서 실행되는 코드의 예외를 잡아내는 역할을 담당한다. 사용 시에는 <c:catch> 태그로 사용된다.


choose


  자바의 switch 문과 같지만, 조건에 문자열 비교도 가능하고 쓰임의 범위가 넓다.

  하나 이상의 <when> 과 하나 이하의 <otherwise> 서브태그를 가지고 있다. 사용 시에는  <c:choose> 태그로 사용된다.


if


  조건문을 사용할 때 쓴다. 사용 시에는 <c:if> 태그로 사용한다. 


import


  웹 어플리케이션 내부의 자원 접근은 물론이고, http, ftp 같은 외부에 자원도 가져온다.

  자원을 자유롭게 가공할 수도 있고, 편집도 가능하다. 사용 시에는 <c:import> 태그로 사용된다. 


forEach


  객체 전체에 걸쳐 반복 실행을 할 때 사용한다. 사용 시에는 <c:forEach> 태그로 사용된다. 


forTokens


  자바의 String Tokenizer 클래스를 사용하는 것과 같다. 사용 시에는 <c:forToken> 태그로 사용된다. 


out


  JSP의 표현식을 대체하는 것으로 가장 많이 사용된다. 사용 시에는 <c:out> 태그로 사용된다.


otherwise


  <choose> 의 서브 태그로 <when> 태그 다음에 표시되는 것으로 조건을 만족하지 못한 경우에 사용한다.

  사용시에는 <c:otherwise> 태그로 사용된다. 


param


  <import> 태그의 URL 뒤에 파라미터로 붙여서 사용할 수 있다. 사용 시에는 <c:param> 태그로 사용된다.


redirect


  response.sendRedirect() 를 대체하는 태그로 지정한 다른 페이지로 이동한다.

  사용시에는 <c:redirect> 태그로 사용된다. 


remove


  JSP의 removeAttribute()와 같은 역할을 한다. (page | request | session | application) 범위의 변수 (속성)를 제거한다.

  사용시에는 <c:remove> 태그로 사용한다.


set


  JSP의 setAttribute()와 같은 역할을 한다. (page | request | session | application) 범위의 변수 (속성)를 설정한다.

  사용시에는 <c:set> 태그로 사용한다.


url


  쿼리 파라미터로부터 URL을 생성한다. 사용시에는 <c:url> 태그로 사용한다.

 

when


  <choose>의 서브태그로 조건의 비교시에 조건을 만족한 경우에 사용한다.

  사용 시에는 <c:when> 태그로 사용된다.





  JSTL 파일 다운로드


  출처

  https://cafe.naver.com/contentskorealab


  다운로드 받고 톰캣 lib 폴더 안에 넣기




-예제 및 출력 결과-

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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
 
    <!-- 
         *          1개
       ***        3개
      *****        5개
     *******    7개
    *********    9개
 -->
 
 
    <!-- 변수 선언 -->
 
    <!-- for문이 총 3개가 필요하다 공백 for문 , *을 출력하는 for문, 전체 for문 -->
 
    <!-- 5개의 반복적인 일을 하는 outer for문들 -->
    <c:forEach var="i" begin="0" end="4">
 
        <!-- 공백을 출력하는 반복문을 작성 -->
        <c:forEach var="j" begin="${i+1}" end="4">
    
        &nbsp;
    </c:forEach>
 
        <!-- *을 출력하는 반복문을 작성 -->
        <c:forEach var="j" begin="1" end="${1+(i*2)}">
    
    *
    
    </c:forEach>
 
        <br>
    </c:forEach>
 
</body>
</html>
cs




:

19.05.21 Expression Laguage 사용법 (jsp model 2 2강~3강)

Back-End/JSP 2019. 5. 21. 12:07

Expression Laguage = 표현언어라고도 하며 줄여서 "EL" 이라고도 한다.


- 표현식으로 attribute 나 parameter 등을 JSP 파일에서 출력할 용도로 사용하는 언어


- attribute를 출력할 때는 $[애트리뷰트 이름] 으로 출력


- 파라미터는 ${param.이름} 또는 ${paramValue.이름[인덱스]}의 형태로 출력함.




-Expression Laguage 내부에서 사용할 수 있는 연산자 목록-


기호 연산자

영문단어 연산자

/

div

%

 mod

&&

 and

||

 or

!

 not

==

 eq

!=

 ne

<

It (less than)

>

gt (greater than)

<=

le (less or equal)

>=

ge (greater or equal) 

empty - null 이면 true




-예제 및 출력 결과-


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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 
    <!-- 화면에 출력하는 3가지 방법 -->
 
    <%
        int i = 3;
        //1. println을 사용 출력하는 방법
        //만약 out.println("i = "+i > 4); 처럼 비교문이 들어간 경우엔 출력 불가능 
        out.println("i = " + i);
 
        //2. ${}을 사용해 출력하는 방법, 단, 여기서 i는 위에서 3이라는 값을준 변수 i가 아니라, 
        // request.setAttribute 안에 있는 i에 3을 준다는 의미이다.
 
        request.setAttribute("ia"3);
    %>
    <p>
        <!-- 3. p태그를 이용해 자료를 출력하는 방법  -->
        <!-- 객체에 담긴 이름은 바로 출력이 불가능 request.setAttribute("ia", 3);에 담긴 ia값은 출력이 불가능 -->
        <!-- 즉 객체 자체를 호출할 수 없다. -->
        <!-- 만약 i자리에 "3"과 +4가 들어있다면 문자를 합친 값인 34가 출력이 된다.  -->
        i =
        <%=i%>
    </p>
 
 
    <!-- 여기 안에 있는 ia는  request.setAttribute안에 있는 ia를 호출한다. 즉 3이 출력됨, 이런것을 El이라고 한다.-->
    <!-- 이러한 형식은  request나 session에 자료를 담아두고 사용할때 사용한다.-->
    <!-- + 같은 연산자도 사용이 가능하다. 객체에 자료를 담아두고 있을때 숫자의 형식이 String 타입이라면 자동으로 integer로 타입이 변환되서 연산을 해준다.-->
    i = ${ia > 4}
 
 
 
</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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
 
    <center>
        <!-- 로그인 페이지 작성 -->
        <h2>로그인</h2>
        <form action="ElLoginProc.jsp" method="post">
            <table width="300" border="1">
 
                <tr height="40">
                    <td width="120">아이디</td>
                    <td width="180"><input type="text" name="id"></td>
                </tr>
 
                <tr height="40">
                    <td width="120">패스워드</td>
                    <td width="180"><input type="password" name="password">
                    </td>
                </tr>
 
                <tr height="40">
                    <td align="center" colspan="2"><input type="submit"
                        value="로그인"></td>
                </tr>
 
            </table>
        </form>
    </center>
 
</body>
</html>
cs


1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
 
    <!-- param을 사용하면 변수의 값을 출력 할수 있다. -->
    <!-- El 표현식을 사용하는 이유는 파라미터의 데이터를 바로 받아서 사용할때 편하기 때문에 사용한다.-->
    당신의 아이디는 ${param.id } 패스워드는 ${param.password } 입니다.
 
</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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <center>
        <h2>계산기</h2>
        <form action="ElCul.jsp" method="post">
            <table width="450">
                <tr height="40">
                    <td align="center" width="100"><input type="text" name="exp1"
                        value="${ param.exp1 }"></td>
                    <td align="center" width="50"><select name="exp2">
                            <option value="+">+</option>
                            <option value="-">-</option>
                            <option value="*">*</option>
                            <option value="/">/</option>
                    </select></td>
                    <td align="center" width="100"><input type="text" name="exp3"
                        value="${ param.exp3 }"></td>
                    <td align="center" width="20">=</td>
                    <td align="center" width="100">
                        <% //계산기의 계산한 결과값을 출력하는 페이지
        //exp2(기호)를 파라미터로 받고 그 파라미터와 equals의 값이 동일하면 el문으로 연산한 값을 출력되게 한다.
        String exp2 = request.getParameter("exp2");
            //exp2가 null값이 되므로 null 처리를 해주어야 한다.
            if(exp2==null){
                exp2 = "+";
            }
    
        if(exp2.equals("+")){
            
    %> <input type="text" name="exp4" value="${param.exp1 + param.exp3 }">
                        <% 
        }
        if(exp2.equals("-")){
            
    %> <input type="text" name="exp4" value="${param.exp1 - param.exp3 }">
                        <% 
                }
        if(exp2.equals("*")){
            
    %> <input type="text" name="exp4" value="${param.exp1 * param.exp3 }">
                        <% 
                }
        if(exp2.equals("/")){
            
    %> <input type="text" name="exp4" value="${param.exp1 / param.exp3 }">
                        <% 
                }
                
    %>
                    </td>
                    <td align="center" width="100"><input type="submit"
                        value="결과보기"></td>
                    <!-- Proc에서 연산한 값을 다시 이페이지로 가져와서 출력해야된다. -->
                </tr>
 
            </table>
        </form>
    </center>
</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
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
    <center>
        <h2>결과 보기</h2>
        <form action="ElCul.jsp" method="post">
            <%
                //계산기의 계산한 결과값을 출력하는 페이지
                //exp2(기호)를 파라미터로 받고 그 파라미터와 equals의 값이 동일하면 el문으로 연산한 값을 출력되게 한다.
                String exp2 = request.getParameter("exp2");
 
                if (exp2.equals("+")) {
            %>
            결과는 ${ param.exp1 + param.exp3 }
            <%
                }
                if (exp2.equals("-")) {
            %>
            결과는 ${param.exp1 - param.exp3 }
            <%
                }
                if (exp2.equals("*")) {
            %>
            결과는 ${param.exp1 * param.exp3 }
            <%
                }
                if (exp2.equals("/")) {
            %>
            결과는 ${param.exp1 / param.exp3 }
            <%
                }
            %>
 
        </form>
    </center>
</body>
</html>
cs




: