3. Servlet & JSP 응용실습

JSP

jsp파일은 내부적으로 서블릿으로 변환 된다는 점을 잊지말자.
톰캣이 자동으로 해준다.

리다이렉트 포워드의 차이

포워드 - 새로운 페이지는 이전 페이지에서 처리하던 것과 같은 요청을 처리하게 하고 응답하여 브라우저는 하나 이상의 페이지가 연관 된 것을 알 수 없다.

리다렉트 - 첫번째 페이지는 브라우저에게 새로운 페이지로 다시 요청해야 한다는 내용의 응답을 보낸다. 브라우저는 이 응답을 받으면 즉시 새로운 페이지로 다시 요청을 보낸다.

실습

다이나믹 웹 프로젝트 생성
-서버우클릭 add and remove 프로젝트 추가

프로젝트 우클릭 후 - 프로퍼티스 -JAVA BUILD PATH - add library 후 ojdbc 추가
프로젝트 우클릭 후 - 프로퍼티스 -deployment assembly - add -jdbc 추가 후 apply

JSTL
jsp standard tag library

EmailListDao.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package com.bigdata2017.emaillist.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.bigdata2017.emaillist.vo.EmailListVo;

public class EmailListDao {
public int insert( EmailListVo vo) {
int count = 0;

Connection conn= null;
PreparedStatement pstmt = null;

try {
conn = getConnection();
String sql = "INSERT "
+"INTO EMAILLIST " +
"VALUES (SEQ_EMAILLIST.NEXTVAL,?,?,?)";

pstmt = conn.prepareStatement(sql);
pstmt.setString(1, vo.getFirstName());
pstmt.setString(2, vo.getLastName());
pstmt.setString(3, vo.getEmail());

count = pstmt.executeUpdate();
}
catch (SQLException e) {
System.out.println( "error" + e );
} finally {
//3. 자원정리
try {

if( pstmt != null ) {
pstmt.close();
}
if( conn != null ) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return count;
}


public List<EmailListVo> getList(){
List<EmailListVo> list = new ArrayList<EmailListVo>();

Connection conn = null ;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection();

//3. Statement 객체 생성
stmt = conn.createStatement();

//4. SQL문 실행
String sql ="SELECT NO,FIRST_NAME,LAST_NAME,EMAIL\r\n" +
"FROM EMAILLIST ORDER BY NO DESC";
rs = stmt.executeQuery(sql);

System.out.println("connection 성공");

//5. 결과 사용하기
while( rs.next() ) {
Long no = rs.getLong( 1 );
String firstName = rs.getString(2);
String lastName = rs.getString(3);
String email = rs.getString(4);

EmailListVo vo = new EmailListVo();
vo.setNo(no);
vo.setFirstName(firstName);
vo.setLastName(lastName);
vo.setEmail(email);
list.add(vo);
}

} catch (SQLException e) {
System.out.println( "error" + e );
} finally {
//3. 자원정리
try {
if( rs != null ) {
rs.close();
}
if( stmt != null ) {
stmt.close();
}
if( conn != null ) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
private Connection getConnection() throws SQLException {

Connection conn = null ;
//1. JDBC 드라이버 로딩

try {
Class.forName( "oracle.jdbc.driver.OracleDriver" );

//2. Connection 얻어오기
String url = "jdbc:oracle:thin:@localhost:1521:xe";
conn = DriverManager.getConnection(url, "webdb", "webdb");

} catch (ClassNotFoundException e) {
e.printStackTrace();
}

return conn;
}
}

form.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"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>메일 리스트 가입</h1>
<p>
메일 리스트에 가입하려면,<br>
아래 항목을 기입하고 등록 버튼을 클릭하세요.
</p>
<form method="post" action="<%=request.getContextPath() %>/insert.jsp" >
First name: <input type="text" name="fn" value="" /><br>
Last name: <input type="text" name="ln" value="" /><br>
Email address: <input type="text" name="email" value=""/><br>
<input type="submit" value="submit">
</form>
<br>
<p>
<a href = "<%=request.getContextPath()%>">리스트 바로가기</a>
</p>
</body>
</html>

index.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 import="com.bigdata2017.emaillist.vo.EmailListVo"%>
<%@page import="java.util.List"%>
<%@page import="com.bigdata2017.emaillist.dao.EmailListDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%

EmailListDao dao = new EmailListDao();
List<EmailListVo> list = dao.getList();
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>메일 리스트에 가입되었습니다.</h1>
<p>입력한 정보 내역입니다.</p>
<!-- 메일정보 리스트 -->
<%-- list에서 하나씩 빼서 테이블를 채운다--%>

<% for(EmailListVo vo : list ){ %>

<table border="1" cellpadding="5" cellspacing="2">
<tr>
<td align=right>First name: </td>
<td><%=vo.getFirstName() %></td>
</tr>
<tr>
<td align=right width="110">Last name: </td>
<td width="110"><%=vo.getLastName()%></td>
</tr>
<tr>
<td align=right>Email address: </td>
<td><%=vo.getEmail()%></td>
</tr>
</table>
<br>
<%} %>
<p>
<a href="<%=request.getContextPath() %>/form.jsp" >추가메일 등록</a>
</p>
<br>
</body>
</html>
insert.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
<%@page import="com.bigdata2017.emaillist.dao.EmailListDao"%>
<%@page import="com.bigdata2017.emaillist.vo.EmailListVo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding( "utf-8");
String firstName = request.getParameter( "fn" );
String lastName = request.getParameter( "ln" );
String email = request.getParameter("email");

EmailListVo vo = new EmailListVo();
vo.setFirstName(firstName);
vo.setLastName(lastName);
vo.setEmail(email);

new EmailListDao().insert(vo);

response.sendRedirect( request.getContextPath() );
%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>성공적으로 등록되었습니다.</h1>
<a href="index.jsp">리스트 돌아가기</a>
</body>
</html>
Share