Web

Server, Servlet으로 DB에내용 저장/출력하기

greenyellow-s 2024. 9. 10. 13:19
필요한 파일

 

HTML / Servlet / DAO / DTO


저장

 

HTML

<form method="post" action="/guestbookServlet/write">
	<input type="text" name="name" id="name"/>
	//...
	<input type="submit" value="글쓰기"/>
	//...
</form>

 

form으로 정보를 입력받는 HTML 작성한다.

여기서 form의 action 주소를 servlet으로 지정한다.  [프로젝트명/웹서블릿명] 

 

실제 servlet 파일 위치 : [guestbookServlet.project] - [src/main/java] - [guestbook.service.package] - [GuestbookWriteServlet.java]

 

나는 웹 서블릿이름을 /write로 지정했다.


Servlet

@WebServlet("/write")
public class GuestbookWriteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		
		String name = request.getParameter("name");
		//...
        
		GuestbookDTO guestbookDTO = new GuestbookDTO();
		guestbookDTO.setName(name);
		//...
		
		//DB
		GuestbookDAO guestbookDAO = GuestbookDAO.getInstance(); //싱글톤
		guestbookDAO.guestbookWrite(guestbookDTO);
		
		//응답
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();

 

@WebServlet("/write")

웹 서블릿을 /write로 지정한다.

 

protected void doPost(){  }

HTML의 FORM태그에서 메소드(Method)를 POST로 지정했기 때문에 POST로 받는다.

 

request.setCharacterEncoding("UTF-8");

POST 전송 방식은 데이터를 사용자에게 보이지 않게 내부에서 보내진다.

단, 한글처리를 하지 못하기 때문에 위에 구문으로 request(받은 값) 값을 한글로 변환시켜서 받는다.

 

DTO에 값들을 저장하고 한번에 DAO로 보내 DB처리를 한다.(데이터 테이블에 insert) 


DAO

public void guestbookWrite(GuestbookDTO guestbookDTO) {
	//...
  	String sql = "INSERT INTO GUESTBOOK VALUES(seq_guestbook.nextval, ?,?,?,?,SYSDATE)";

}//guestbookWrite();

출력

 

HTML

<input type="button" value='글목록' id='list' onclick="location.href='/guestbookServlet/list?pg=1'"/>

 

button을 클릭했을때(onclick), pg=1의 값을 가지고 servlet 파일로 이동한다.(location.href='주소')

 

pg=1의 값을 가져가는 이유는 페이징 처리를 하기 위해서이다.


Servlet

@WebServlet("/list")
public class GuestbookListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//데이터
		int pg = Integer.parseInt(request.getParameter("pg"));
		
		//1페이지당 3개씩
		int endNum = pg*3;
		int startNum = endNum-2;
		
		//DB
		GuestbookDAO guestbookDAO = new GuestbookDAO();
		ArrayList<GuestbookDTO> list = guestbookDAO.guestbookList(startNum, endNum);
		int count = guestbookDAO.guestbookListCount();
		
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
  
  		for(GuestbookDTO data : list) {
			out.print( data.getName() +"," + data.getEmail() ...

 

 

@WebServlet("/list")

웹서블릿을 /list라고 선언한다. == 별칭

따라서 해당 servlet 파일로 이동하고 싶을 때는 주소의 값에 [  /프로젝트명/웹서블릿(/guestbookServlet/list) ] 으로만 적어도 가능하다.

 

protected void doGet

form에서 post로 처리한게 아니기 때문에 default값인 get으로 한다.

 

여러개의 DTO를 받아와야되기 때문에 List로 받아온다.


DAO

public ArrayList<GuestbookDTO> guestbookList(int startNum, int endNum) {

	ArrayList<GuestbookDTO> list = new ArrayList<>();
	
	//...
	String sql = """
			select * from
			(select rownum rn, tt.* from
			(select * from guestbook order by seq desc) tt
			) where rn>=? and rn<=?
			""";
	//...

	while(rs.next()) {
		GuestbookDTO dto = new GuestbookDTO();

		dto.setSeq(rs.getInt("seq"));
		//...
		dto.setLogtime(rs.getDate("logtime"));
	}
    
	//..
	return list;
}//guestbookList

 

페이징 처리로 pg값은 페이지 번호이고

한 페이지에 3개의 게시물씩 보이도록 하는 sql문이다.

'Web' 카테고리의 다른 글

Server, Session / Cookie 사용 방법  (0) 2024.09.10
Server, Connection Pool이란?  (0) 2024.09.10
Server, JSP란?  (0) 2024.09.10
Server, Servlet이란?  (0) 2024.09.09
AJax, AJax란?  (0) 2024.08.27