디지털 컨버전스/Backend
[Backend] 예제
gimyeondong
2020. 4. 24. 17:23
toInput 버튼 -> Input 페이지로
Input 페이지에 이름, 메세지 저장
ㅐㅓ윷6 이후에는 오토 commit
toInput 버튼 누르면 메세지 입력창
JDBC 저장
서블릿 코드
package kh.backend.exam2;
import java.io.IOException;
import java.io.PrintWriter;
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 kh.backend.DAO.InputDAO;
@WebServlet("/Exam02")
public class Exam02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String toInput = request.getParameter("toInput");
String toOutput = request.getParameter("toOutput");
PrintWriter pw = response.getWriter();
if(toInput != null ) {
pw.append("<script>location.href='input.html';</script>");
String name = request.getParameter("name");
String message = request.getParameter("message");
InputDAO dao = new InputDAO();
pw.append("<html>");
pw.append("<head>");
pw.append("</head>");
pw.append("<body>");
try {
int result = dao.insert(name, message);
if(result>0) {
pw.append("<script>alert('Message input complete');location.href='index.html';</script>");
}else {
pw.append("<script>alert('fail');location.href='index.html';</script>");
}
}catch(Exception e) {
e.printStackTrace();
System.out.println("Please contact administrator");
}
pw.append("</body>");
pw.append("</html>");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
DAO 코드
package kh.backend.DAO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class InputDAO {
private Connection getConnection() throws Exception {
String url = "jdbc:oracle:thin:@localhost:1521:xe"; //thin(연결드라이버):ip주소: :xe(파일이름)
String loginId = "kh";
String loginPw = "kh";
Class.forName("oracle.jdbc.driver.OracleDriver");
return DriverManager.getConnection(url, loginId, loginPw);
}
public int insert(String name, String message) throws Exception {
String sql =
"insert into Messages values(messages_seq.nextval, ?, ?, sysdate)";
try(Connection con = this.getConnection();
PreparedStatement pstat = con.prepareStatement(sql);){
pstat.setString(1, name);
pstat.setString(2, message);
int result = pstat.executeUpdate(); //몇개의 행에 입력되었나
con.commit();
return result;
}
}
}
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.5.0.js"
integrity="sha256-r/AaFHrszJtwpe+tHyNi/XCfMxYpbsRg2Uqn0x3s2zc="
crossorigin="anonymous"></script>
</head>
<style>
fieldset{
margin: auto;
text-align: center;
width: 200px;
}
</style>
<body>
<form action="Exam02" method="get">
<fieldset>
<legend>Index</legend>
<input type="submit" name="toInput" value="toInput">
<input type="submit" name="toOutput"value="toOutput">
</fieldset>
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.5.0.js"
integrity="sha256-r/AaFHrszJtwpe+tHyNi/XCfMxYpbsRg2Uqn0x3s2zc="
crossorigin="anonymous"></script>
</head>
<style>
fieldset{
margin: auto;
text-align: center;
width: 200px;
}
</style>
<body>
<form action="Exam02" method="get">
<fieldset>
<legend>Input Message</legend>
<input type="text" name="name" placeholder="input your name"><br>
<input type="text" name="message" placeholder="input message"><br>
<input type="submit" value="send">
</fieldset>
</form>
</body>
</html>
1. index HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
</head>
<style>
fieldset{
margin: auto
text-align: center;
width: 200px;
}
</style>
<script>
$(function(){
$()
})
</script>
<body>
<form action="Exam02" method="get">
<fieldset>
<legend>Index</legend>
<input type="submit" name="toInput" value="toInput">
<input type="submit" name="toOutput"value="toOutput">
</fieldset>
</form>
</body>
</html>
2. input HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
</head>
<style>
fieldset{
margin: auto;
text-align: center;
width: 200px;
}
</style>
<body>
<form action="Exam02" method="post">
<!--Exam02 서블릿 / 길어질수 있으니 post-->
<fieldset>
<legend>Input Message</legend>
<input type="text" name="name" placeholder="input your name"><br>
<input type="text" name="message" placeholder="input message"><br>
<input type="submit" value="send">
</fieldset>
</form>
</body>
</html>
3. 서블릿 생성
exam02 말고 기능명으로 지을껄...(Input / Output)
4. DTO - 자료형
package kh.backend.DTO;
import java.sql.Date;
public class MessagesDTO {
private int seq;
private String name;
private String contents;
private Date date;
public MessagesDTO() {
super();
// TODO Auto-generated constructor stub
}
public MessagesDTO(int seq, String name, String contents, Date date) {
super();
this.seq = seq;
this.name = name;
this.contents = contents;
this.date = date;
}
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
5.DAO
inputDAO 말고 좀더 포괄적인 messagesDAO라고 지을껄... 다른 기능들도 추가되는데
package kh.backend.DAO;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import kh.backend.DTO.MessagesDTO;
import kh.backend.exam2.Messages;
public class InputDAO {
private Connection getConnection() throws Exception {
String url = "jdbc:oracle:thin:@localhost:1521:xe"; //thin(연결드라이버):ip주소: :xe(파일이름)
String loginId = "kh";
String loginPw = "kh";
Class.forName("oracle.jdbc.driver.OracleDriver");
return DriverManager.getConnection(url, loginId, loginPw);
}
public int insert(MessagesDTO dto) throws Exception {
String sql =
"insert into Messages values(messages_seq.nextval, ?, ?, sysdate)";
try(Connection con = this.getConnection();
PreparedStatement pstat = con.prepareStatement(sql);){
pstat.setString(1, dto.getName());
pstat.setString(2, dto.getContents());
int result = pstat.executeUpdate(); //몇개의 행에 입력되었나
con.commit();
return result;
//close는 알아서
}
}
}
6. 서블릿에 인서트 기능 추가
package kh.backend.exam2;
import java.io.IOException;
import java.io.PrintWriter;
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 kh.backend.DAO.InputDAO;
import kh.backend.DTO.MessagesDTO;
@WebServlet("/Exam02")
public class Exam02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String msg = request.getParameter("msg");
InputDAO dao = new InputDAO();
try {
int result = dao.insert(new MessagesDTO(0,name,msg,null));
}catch(Exception e) {
e.printStackTrace();
//에러페이지로 이동 코드
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
7. 서블릿에 응답코드 추가
package kh.backend.exam2;
import java.io.IOException;
import java.io.PrintWriter;
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 kh.backend.DAO.InputDAO;
import kh.backend.DTO.MessagesDTO;
@WebServlet("/Exam02")
public class Exam02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String msg = request.getParameter("msg");
InputDAO dao = new InputDAO();
try {
int result = dao.insert(new MessagesDTO(0,name,msg,null));
if(result>0) {
PrintWriter pw = response.getWriter();
pw.append("<html>");
pw.append("<head>");
pw.append("</head>");
pw.append("<body>");
pw.append("<script>");
pw.append("alert('Input Complete')");
pw.append("location.href='index.html';");
pw.append("</script>");
pw.append("</body>");
pw.append("</html>");
}
}catch(Exception e) {
e.printStackTrace();
//에러페이지로 이동 코드
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
8. 에러페이지 추가 (response.sendRedirect("error.html");)
catch(Exception e) {
e.printStackTrace();
//에러페이지로 이동 코드
response.sendRedirect("error.html");
}
response 에서 지원하는 기능 , 단 위의 pw.append("location.href='index.html';");와 다른 점은 alert등의 다른 기능을 보여줄수 없다.
9. 데이터베이스 준비
create table Messages (
seq number primary key,
name varchar(20) not null,
msg varchar(300) not null,
write_date timestamp default sysdate
);
create sequence messages_seq
start with 1
increment by 1
nomaxvalue
nocache;
10. 실행 테스트
실행시 다른 프로젝트도 검사하면서 실행, 나중에 다른 프로젝트 오류에 방해 받을 수도 있음
11 DAO에 selectAll 추가
public List<MessagesDTO> selectAll() throws Exception {
String sql = "select * from Messages";
try(Connection con = this.getConnection();
PreparedStatement pstat = con.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();){
//몇개의 행에 입력되었나
List<MessagesDTO> result = new ArrayList<>();
while(rs.next()) {
int seq = rs.getInt("seq");
String name = rs.getString("name");
String msg = rs.getString("msg");
Timestamp write_date = rs.getTimestamp("write_date");
MessagesDTO dto = new MessagesDTO( seq, name, msg, write_date);
result.add(dto);
}
return result;
}
}
ResultSet은 사라짐, ResultSet을 다른곳에 담아서 리턴
List result = new ArrayList<>();
12. 서블릿 아웃풋