(1)Form.jsp
먼저, 방명록을 입력받을 폼을 만든다.
<form> 태그에 action = “writeMessage.jsp” 를 걸어서, 입력받은 데이터를
[writeMessage.jsp] 페이지로 전송한다.
<%@page import="guestbook.model.Message"%>
<%@page import="guestbook.model.MessageListView"%>
<%@page import="guestbook.service.GetMessageListService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GuestBook</title>
<style>
</style>
</head>
<body>
<form action="writeMessage.jsp" method="post">
이름: <input type="text" name="guestName" /> <br />
암호: <input type="password" name="password" /> <br />
메시지:
<textarea name="message" cols="30" row="3"></textarea>
<br /> <input type="submit" value="메시지 남기기" />
</form>
</body>
</html>
(2)writeMessage.jsp
사실 wirteMessage.jsp 페이지는 처리된 결과를 보여주는 view에 불과하다.
(3)번에서 처리하는 서비스 클래스를 보도록 하겠다.
<%@page import="guestbook.service.WriteMessageService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.사용자 입력 데이터 받기
//2.요구사항을 처리할 서비스 객체 생성 (받아오는 것)
//3.처리요청(service.write() 실행)
//4.결과 받아서 사용자에게 보여줄 응답 view 작성
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="message" class="guestbook.model.Message"/>
<jsp:setProperty property="*" name="message"/>
<%
int resultCnt = 0;
WriteMessageService service = WriteMessageService.getInstance();
resultCnt = service.write(message);
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GuestBook</title>
<style>
</style>
</head>
<body>
<%if(resultCnt>0){ %>
<h1>
방명록 메시지가 작성되었습니다.<br>
<a href="list.jsp">리스트 보기</a>
</h1>
<%}else{ %>
<h1>
메시지가 정상적으로 작성되지 않았습니다.<br>
<a href="list.jsp">리스트 보기</a>
</h1>
<%} %>
</body>
</html>
(3) WriteMessageService.java
방명록 글을 DB에 본격적으로 삽입하는 서비스 클래스이다.
이 서비스 클래스는 다른 곳에서 이 클래스를 사용할 때 괜히 객체를 생성하지 않아도 되도록 싱글
톤 처리를 했다.
package guestbook.service;
import java.sql.Connection;
import java.sql.SQLException;
import guestbook.dao.MessageDao;
import guestbook.model.Message;
import jdbc.connection.ConnectionProvider;
public class WriteMessageService {
//싱글톤
private static WriteMessageService instance = new WriteMessageService();
public static WriteMessageService getInstance() {
return instance;
}
private WriteMessageService() {
}
//본격 메서드 처리
public int write(Message message) throws ServiceException {
Connection conn = null;
try {
conn = ConnectionProvider.getConnection();
MessageDao dao = MessageDao.getInstance();
int resultCnt = dao.insert(conn, message);
return resultCnt;
} catch (SQLException e) {
throw new ServiceException("메시지 등록 실패: " + e.getMessage(), e);
/* e.printStackTrace();*/
}
}
}
어라, 이 서비스 클래스의 메서드(write())를 사용하기 위해 입력 값으로 Message 객체를 사용했
다. 그럼 이 Message 객체를 만들어준다. 또한, 이 서비스 클래스에서 MessageDao 클래스의 싱
글톤을 불러와 메서드(insert() 메서드)를 사용한다. 없다? 그럼 만들어 주면 된다.
(4) Message.java
package guestbook.model;
public class Message {
private int id;
private String guestName;
private String password;
private String message;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getGuestName() {
return guestName;
}
public void setGuestName(String guestName) {
this.guestName = guestName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean hasPassword() {
return password != null && !password.isEmpty();
}
public boolean matchPassword(String pwd) {
return password != null && password.equals(pwd);
}
}
(5) MessageDao.java
Dao 클래스를 쉽게 말하자면, DB를 연결해서 처리하는 메서드들의 모음집이라 할 수 있다. 이때
모아지는 메서드들은 insert/select/delete/update 등이다.
package guestbook.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import guestbook.model.Message;
import jdbc.JdbcUtil;
public class MessageDao {
// DAO 클래스는 기능 클래스 --> 여러 개의 인스턴스 생성이 불필요하다.
// 결론 --> 싱글톤 패턴으로 처리 하자.
// 1.private 생성자
private MessageDao() {
}
// 2.인스턴스 생성 : 1개 생성하고 공유해서 사용.
private static MessageDao instance = new MessageDao();
// 3. 외부에서 사용할 수 있는 메서드 생성.
public static MessageDao getInstance() {
return instance;
}
// insert() 메서드
public int insert(Connection conn, Message message) throws SQLException {
PreparedStatement pstmt = null;
String sql = "insert into guestbook_message values (message_id_seq.NEXTVAL, ?, ?, ?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, message.getGuestName());
pstmt.setString(2, message.getPassword());
pstmt.setString(3, message.getMessage());
return pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(pstmt);
}
return 0;
}
}
여기서 Message 객체를 사용했다. 그럼 또 Message 객체를 만들어준다.
이제 모든 준비들이 끝났다. 그럼 결과를 보여주는 view인 (2)writeMessage.jsp 페이지를 다시 보도록
하자.
(2)writeMessage.jsp
<%@page import="guestbook.service.WriteMessageService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.사용자 입력 데이터 받기
//2.요구사항을 처리할 서비스 객체 생성 (받아오는 것)
//3.처리요청(service.write() 실행)
//4.결과 받아서 사용자에게 보여줄 응답 view 작성
request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="message" class="guestbook.model.Message"/>
<jsp:setProperty property="*" name="message"/>
<%
int resultCnt = 0;
WriteMessageService service = WriteMessageService.getInstance();
resultCnt = service.write(message);
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GuestBook</title>
<style>
</style>
</head>
<body>
<%if(resultCnt>0){ %>
<h1>
방명록 메시지가 작성되었습니다.<br>
<a href="list.jsp">리스트 보기</a>
</h1>
<%}else{ %>
<h1>
메시지가 정상적으로 작성되지 않았습니다.<br>
<a href="list.jsp">리스트 보기</a>
</h1>
<%} %>
</body>
</html>
이제 싱글톤으로 미리 정의했던 서비스 클래스를 불러와 write()메서드를 사용한다.
6565
답글삭제