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. 서블릿 아웃풋

+ Recent posts