본문 바로가기

학원/복기

[Servlet] 방명록 프로그램 예제 (삽입,변경,삭제,검색)

select.itwill >> list.itwill


 

SQL 디벨로퍼에서 방명록 게시글을 저장하기 위한 GUEST 테이블 생성 

create table guest(num number primary key, writer varchar2(50), subject varchar2(200),
    content varchar2(1000), regdate date);

 

명록 게시글의 글번호를 제공하기 위한 시퀀스 생성 

create sequence guest_seq;

 


GUEST 테이블의 행을 표현하기 위한 GuestDTO 클래스 생성

package xyz.itwill.dto;

public class GuestDTO {
	private int num;
	private String writer;
	private String subject;
	private String content;
	private String regdate;
	
	//생성자
	public GuestDTO() {
		// TODO Auto-generated constructor stub
	}

	public GuestDTO(int num, String writer, String subject, String content, String regdate) {
		super();
		this.num = num;
		this.writer = writer;
		this.subject = subject;
		this.content = content;
		this.regdate = regdate;
	}
	
	//SETTER GETTER 메소드 
	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getRegdate() {
		return regdate;
	}

	public void setRegdate(String regdate) {
		this.regdate = regdate;
	}
	
	
}

GUEST 테이블에 행을 삽입, 변경, 삭제, 검색하기 위한 기능을 제공하는 GuestDAO 클래스 생성 

package xyz.itwill.dao;

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

import xyz.itwill.dto.GuestDTO;

public class GuestDAO extends JdbcDAO {
	private static GuestDAO _dao;
	
	private GuestDAO() {
		// TODO Auto-generated constructor stub
	}
	
	static {
		_dao=new GuestDAO();
	}
	
	public static GuestDAO getDAO() {
		return _dao;
	}
	
	//방명록 게시글정보를 전달받아 GUEST 테이블에 삽입하고 삽입행의 갯수를 반환하는 메소드
	public int insertGuest(GuestDTO guest) {
		Connection con=null;
		PreparedStatement pstmt=null;
		int rows=0;
		try {
			con=getConnection();
			
			String sql="insert into guest values(guest_seq.nextval, ?, ?, ?, sysdate)";
			pstmt=con.prepareStatement(sql);
			pstmt.setString(1, guest.getWriter());
			pstmt.setString(2, guest.getSubject());
			pstmt.setString(3, guest.getContent());
			
			rows=pstmt.executeUpdate();
		} catch (SQLException e) {
			System.out.println("[에러]insertGuest() 메소드의 SQL 오류 = "+e.getMessage());
		} finally {
			close(con, pstmt);
		}
		return rows;
	}
	
	//방명록 게시글정보를 전달받아 GUEST 테이블에 저장된 행을 변경하고 변경행의 갯수를 반환하는 메소드
	public int updateGuest(GuestDTO guest) {
		Connection con=null;
		PreparedStatement pstmt=null;
		int rows=0;
		try {
			con=getConnection();
			
			String sql="update guest set writer=?, subject=?, content=? where num=?";
			pstmt=con.prepareStatement(sql);
			pstmt.setString(1, guest.getWriter());
			pstmt.setString(2, guest.getSubject());
			pstmt.setString(3, guest.getContent());
			pstmt.setInt(4, guest.getNum());
			
			rows=pstmt.executeUpdate();
		} catch (SQLException e) {
			System.out.println("[에러]updateGuest() 메소드의 SQL 오류 = "+e.getMessage());
		} finally {
			close(con, pstmt);
		}
		return rows;
	}
	
	//방명록 게시글번호를 전달받아 GUEST 테이블에 저장된 행을 삭제하고 삭제행의 갯수를 반환하는 메소드
	public int deleteGuest(int num) {
		Connection con=null;
		PreparedStatement pstmt=null;
		int rows=0;
		try {
			con=getConnection();
			
			String sql="delete from guest where num=?";
			pstmt=con.prepareStatement(sql);
			pstmt.setInt(1, num);
			
			rows=pstmt.executeUpdate();
		} catch (SQLException e) {
			System.out.println("[에러]deleteGuest() 메소드의 SQL 오류 = "+e.getMessage());
		} finally {
			close(con, pstmt);
		}
		return rows;
	}
	
	//방명록 게시글번호를 전달받아 GUEST 테이블에 저장된 행을 검색하여 반환하는 메소드
	public GuestDTO selectGuest(int num) {
		Connection con=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		GuestDTO guest=null;
		try {
			con=getConnection();
			
			String sql="select * from guest where num=?";
			pstmt=con.prepareStatement(sql);
			pstmt.setInt(1, num);
			
			rs=pstmt.executeQuery();
			
			if(rs.next()) {
				guest=new GuestDTO();
				guest.setNum(rs.getInt("num"));
				guest.setWriter(rs.getString("writer"));
				guest.setSubject(rs.getString("subject"));
				guest.setContent(rs.getString("content"));
				guest.setRegdate(rs.getString("regdate"));
			}
		} catch (SQLException e) {
			System.out.println("[에러]selectGuest() 메소드의 SQL 오류 = "+e.getMessage());
		} finally {
			close(con, pstmt, rs);
		}
		return guest;
	}
	
	//GUEST 테이블에 저장된 모든 행을 검색하여 반환하는 메소드
	public List<GuestDTO> selectGuestList() {
		Connection con=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		List<GuestDTO> guestList=new ArrayList<>();
		try {
			con=getConnection();
			
			String sql="select * from guest order by num desc";
			pstmt=con.prepareStatement(sql);
			
			rs=pstmt.executeQuery();
			
			while(rs.next()) {
				GuestDTO guest=new GuestDTO();
				guest.setNum(rs.getInt("num"));
				guest.setWriter(rs.getString("writer"));
				guest.setSubject(rs.getString("subject"));
				guest.setContent(rs.getString("content"));
				guest.setRegdate(rs.getString("regdate"));
				
				guestList.add(guest);
			}
		} catch (SQLException e) {
			System.out.println("[에러]selectGuestList() 메소드의 SQL 오류 = "+e.getMessage());
		} finally {
			close(con, pstmt, rs);
		}
		return guestList;
	}
	
}

 


 

GUEST 테이블에 저장된 모든 행을 검색하여 클라이언트에게 전달하여 응답하는 GuestSelectServlet 생성

 

 [글쓰기]를 클릭한 경우 방명록 입력페이지(/guest/insertForm.itwill)로 이동하도록 처리 

→ 방명록 게시글의 [변경] 태그를 클릭한 경우 방명록 게시글의 입력페이지(/guest/modifyForm.itwill)로 이동 - 글번호 전달 

→ 방명록 게시글의 [삭제] 태그를 클릭한 경우 방명록 게시글 삭제페이지(/guest/remove.itwill)로 이동 - 글번호 전달

package xyz.itwill.guest;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

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 xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;

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

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		
		//GUEST 테이블에 저장된 모든 행을 검색하여 List 객체로 반환하는 DAO 클래스의 메소드 호출
		List<GuestDTO> guestList=GuestDAO.getDAO().selectGuestList();
		
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>Servlet</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>방명록 글목록</h1>");
		out.println("<hr>");
		out.println("<table width='1000'>");
		out.println("<tr>");
		out.println("<td align='right'>");
		out.println("<button type='button' onclick='location.href=\"writeForm.itwill\";'>글쓰기</button>");
		out.println("</td>");
		out.println("</tr>");
		if(guestList.isEmpty()) {//List 객체에 요소가 없는 경우 - 검색행이 없는 경우
			out.println("<tr>");
			out.println("<td>");
			out.println("<table border='1' cellspacing='0' width='100%'>");
			out.println("<tr>");
			out.println("<td align='center'>검색된 방명록 게시글이 하나도 없습니다.</td>");
			out.println("</tr>");
			out.println("</table>");
			out.println("</td>");
			out.println("</tr>");
		} else {//List 객체에 요소가 있는 경우 - 검색행이 있는 경우
			for(GuestDTO guest : guestList) {
				out.println("<tr>");
				out.println("<td align='center'>");
				out.println("<table border='1' cellspacing='0' width='100%'>");
				out.println("<tr>");
				out.println("<th width='150'>작성자</th>");
				out.println("<td width='200' align='center'>"+guest.getWriter()+"</td>");
				out.println("<th width='150'>작성일자</th>");
				out.println("<td width='500' align='center'>"+guest.getRegdate()+"</td>");
				out.println("</tr>");
				out.println("<tr>");
				out.println("<th width='150'>제목</th>");
				out.println("<td width='650' colspan='3'>"+guest.getSubject()+"</td>");
				out.println("</tr>");
				out.println("<tr>");
				out.println("<th width='150'>내용</th>");
				out.println("<td width='650' colspan='3'>"+guest.getContent().replace("\n", "<br>")+"</td>");
				out.println("</tr>");
				out.println("<tr>");
				out.println("<td align='right' colspan='4'>");
				out.println("<button type='button' onclick='location.href=\"modifyForm.itwill?num="+guest.getNum()+"\";'>변경</button>");
				out.println("<button type='button' onclick='location.href=\"remove.itwill?num="+guest.getNum()+"\";'>삭제</button>");
				out.println("</td");
				out.println("</tr>");
				out.println("</table>");
				out.println("</td>");
				out.println("</tr>");
				out.println("<tr>");
				out.println("<td>&nbsp;</td>");
				out.println("</tr>");
			}
		}
		out.println("</table>");
		out.println("</body>");
		out.println("</html>");
	}
}

 


사용자로부터 방명록 게시물을 입력받기 위한 GuestInsertFormServlet 생성

 

→ [글저장] 태그를 클릭한 경우 방명록 게시글 삽입페이지(/guest.write.itwil)로 이동 

→ [글목록] 태그를 클릭한 경우 방명록 게시글 목록페이지(/guest.list.itwill)로 이동 

 

package xyz.itwill.servlet;

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;

@WebServlet("/guest/writeForm.itwill")
public class GuestInsertFormServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>Servlet</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>방명록 글쓰기</h1>");
		out.println("<hr>");
		out.println("<form action='write.itwill' method='post' name='insertForm'>");
		out.println("<table>");
		out.println("<tr>");
		out.println("<td>작성자</td>");
		out.println("<td><input type='text' name='writer'></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>제목</td>");
		out.println("<td><input type='text' name='subject'></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>내용</td>");
		out.println("<td><textarea rows='4' cols='60' name='content'></textarea></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td colspan='2'>");
		out.println("<button type='button' id='saveBtn'>글저장</button>");
		out.println("<button type='reset'>다시쓰기</button>");
		out.println("<button type='button' onclick='location.href=\"list.itwill\";'>글목록</button>");
		out.println("</td>");
		out.println("</tr>");
		out.println("</table>");
		out.println("</form>");
		out.println("<script type='text/javascript'>");
		out.println("insertForm.writer.focus();");
		out.println("document.getElementById('saveBtn').onclick=function() {");
		out.println("if(insertForm.writer.value=='') {");
		out.println("alert('작성자를 입력해 주세요.');");
		out.println("insertForm.writer.focus();");
		out.println("return;");
		out.println("}");
		out.println("if(insertForm.subject.value=='') {");
		out.println("alert('제목을 입력해 주세요.');");
		out.println("insertForm.subject.focus();");
		out.println("return;");
		out.println("}");
		out.println("if(insertForm.content.value=='') {");
		out.println("alert('내용을 입력해 주세요.');");
		out.println("insertForm.content.focus();");
		out.println("return;");
		out.println("}");
		out.println("insertForm.submit();");
		out.println("}");
		out.println("</script>");
		out.println("</body>");
		out.println("</html>");
	}

}


방명록 게시글을 전달받아 GUEST 테이블에 삽입하고 방명록 게시글 목록페이지(/guest/list.itwill)로 이동하기 위한 URL 주소를 클라이언트에게 전달하여 응답하는 GuestInsertServlet 생성

→ 방명록 게시글 입력페이지(guest/writeForm.itwill)에서 form 태그를 사용해 post 방식으로 요청하는 서블릿

package xyz.itwill.guest;

import java.io.IOException;
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 xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;

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

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//서블릿을 GET 방식으로 요청한 경우 - 비정상적 요청
		if(request.getMethod().equals("GET")) {
			response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return;
		}
		
		//리퀘스트 메세지 몸체부에 저장되어 전달되는 값에 대한 캐릭터셋 변경
		request.setCharacterEncoding("utf-8");
		
		//전달값을 반환받아 저장
		String writer=request.getParameter("writer");
		String subject=request.getParameter("subject");
		String content=request.getParameter("content");
		
		//DTO 객체를 생성하여 전달값으로 필드값 변경
		GuestDTO guest=new GuestDTO();
		guest.setWriter(writer);
		guest.setSubject(subject);
		guest.setContent(content);
		
		//DTO 객체를 전달받아 GUEST 테이블에 행을 삽입하는 DAO 클래스의 메소드 호출
		GuestDAO.getDAO().insertGuest(guest);
		
		//클라이언트에게 URL 주소를 전달하여 응답 처리
		// => 클라이언트는 전달받은 URL 주소의 서블릿을 요청하여 실행결과를 응답받아 출력 - 리다이렉트 이동
		response.sendRedirect("list.itwill");
	}
}

 


 

글번호를 전달받아 GUEST 테이블에 저장된 방명록 게시글을 검색하여 입력태그의 초기값으로 설정하고 사용자로부터 방명록 게시글(변경값)을 입력받기 위한 GuestUpdateFormServlet 생성

 

→ [글변경] 태그를 클릭한 경우 방명록 게시글 변경페이지(/guest/modify.itwill)로 이동 - 입력값 전달

→ [글목록] 태그를 클릭한 경우 방명록 게시글 목록페이지(/guest/list.itwill)로 이동 

 

package xyz.itwill.guest;

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 xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;

@WebServlet("/guest/modifyForm.itwill")
public class GuestUpdateFormServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out=response.getWriter();
		
		//전달값이 없는 경우 - 비정상적인 요청
		if(request.getParameter("num")==null) {
			response.sendError(HttpServletResponse.SC_BAD_REQUEST);
			return;
		}
		
		//전달값을 반환받아 정수값으로 변환하여 저장  
		int num=Integer.parseInt(request.getParameter("num"));
		
		//글번호를 전달받아 GUEST 테이블에 저장된 해당 글번호의 방명록 게시글을 검색하여
		//DTO 객체를 반환하는 DAO 클래스의 메소드 호출
		GuestDTO guest=GuestDAO.getDAO().selectGuest(num);
		
		//검색된 방명록 게시글이 없는 경우 - 비정상적인 요청
		if(guest==null) {
			response.sendError(HttpServletResponse.SC_BAD_REQUEST);
			return;
		}
		
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head>");
		out.println("<meta charset='UTF-8'>");
		out.println("<title>Servlet</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>방명록 글변경</h1>");
		out.println("<hr>");
		out.println("<form action='modify.itwill' method='post' name='modifyForm'>");
		//방명록 게시글을 구분하기 위한 글번호를 반드시 전달
		out.println("<input type='hidden' name='num' value='"+guest.getNum()+"'>");
		out.println("<table>");
		out.println("<tr>");
		out.println("<td>작성자</td>");
		out.println("<td><input type='text' name='writer' value='"+guest.getWriter()+"'></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>제목</td>");
		out.println("<td><input type='text' name='subject' value='"+guest.getSubject()+"'></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td>내용</td>");
		out.println("<td><textarea rows='4' cols='60' name='content'>"+guest.getContent()+"</textarea></td>");
		out.println("</tr>");
		out.println("<tr>");
		out.println("<td colspan='2'>");
		out.println("<button type='button' id='modifyBtn'>글변경</button>");
		out.println("<button type='reset'>다시쓰기</button>");
		out.println("<button type='button' onclick='location.href=\"list.itwill\";'>글목록</button>");
		out.println("</td>");
		out.println("</tr>");
		out.println("</table>");
		out.println("</form>");
		out.println("<script type='text/javascript'>");
		out.println("modifyForm.writer.focus();");
		out.println("document.getElementById('modifyBtn').onclick=function() {");
		out.println("if(modifyForm.writer.value=='') {");
		out.println("alert('작성자를 입력해 주세요.');");
		out.println("modifyForm.writer.focus();");
		out.println("return;");
		out.println("}");
		out.println("if(modifyForm.subject.value=='') {");
		out.println("alert('제목을 입력해 주세요.');");
		out.println("modifyForm.subject.focus();");
		out.println("return;");
		out.println("}");
		out.println("if(modifyForm.content.value=='') {");
		out.println("alert('내용을 입력해 주세요.');");
		out.println("modifyForm.content.focus();");
		out.println("return;");
		out.println("}");
		out.println("modifyForm.submit();");
		out.println("}");
		out.println("</script>");
		out.println("</body>");
		out.println("</html>");
	}

}

방명록 게시글을 전달받아 GUEST 테이블에 삽입하고 방명록 게시글 목록페이지(/guest/list.itwill)로 이동하기 위한 URL 주소를 클라이언트에게 전달하여 응답하는 GuestUpdateServlet 생성

→ 방명록 게시글 입력페이지(guest/modifyForm.itwill)에서 form 태그를 사용해 post 방식으로 요청하는 서블릿

 

package xyz.itwill.guest;

import java.io.IOException;
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 xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;

@WebServlet("/guest/modify.itwill")
public class GuestUpdateServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//서블릿을 GET 방식으로 요청한 경우 - 비정상적 요청 
		if(request.getMethod().equals("GET")) {
			response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return;
		}
		
		//리퀘스트 메세지 몸체부에 저장되어 전달되는 값에 대한 캐릭터셋 변경 
		request.setCharacterEncoding("utf-8");
		
		//전달값을 반환받아 저장 
		//String numParam=request.getParameter("num");
		//Integer num = Integer.valueOf(numParam);
		
		int num=Integer.parseInt(request.getParameter("num"));
		String writer=request.getParameter("writer");
		String subject=request.getParameter("subject");
		String content=request.getParameter("content");
		
		//DTO 객체를 생성하여 전달값으로 필드값 변경 
		GuestDTO guest=new GuestDTO();
		guest.setNum(num);
		guest.setWriter(writer);
		guest.setSubject(subject);
		guest.setContent(content);
		
		//DTO 객체를 전달받아 GUEST 테이블에 저장된 행을 변경하는 DAO 클래스의 메소드 호출 
		GuestDAO.getDAO().updateGuest(guest);
		
		//클라이언트에게 URL 주소를 전달하여 응답 처리
		// => 클라이언트는 전달받은 URL 주소의 서블릿을 요청하여 실행결과를 응답받아 출력 - 리다이렉트 이동
		response.sendRedirect("list.itwill");
	}

}

 

 


글번호를 전달받아 GUEST 테이블에 저장된 행을 삭제하고 방명록 게시글 목록페이지(/guest/list.itwill)로 이동하기 위한 URL 주소를 클라이언트에게 전달하여 응답하는 GuestDeleteServlet 생성

package xyz.itwill.guest;

import java.io.IOException;
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 xyz.itwill.dao.GuestDAO;
import xyz.itwill.dto.GuestDTO;

@WebServlet("/guest/remove.itwill")
public class GuestDeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//전달값이 없는 경우 - 비정상적 요청 
		if(request.getParameter("num")==null) {
			response.sendError(HttpServletResponse.SC_BAD_REQUEST);
			return;
		}
		
		//전달값을 반환받아 정수값으로 변환하여 저장 
		int num=Integer.parseInt(request.getParameter("num"));
		
		//글번호를 전달받아 GUEST 테이블에 저장된 행을 삭제하는 DAO 클래스의 메소드 호출 
		int rows=GuestDAO.getDAO().deleteGuest(num);
		
		if(rows>0) {//삭제된 행이 있는 경우
			response.sendRedirect("list.itwill");
		} else {//삭제된 행이 없는 경우 - 비정상적인 요청 
			response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		}
	}
}

 

 

'학원 > 복기' 카테고리의 다른 글

[JSP] 스크립트 요소(Script Element)  (0) 2023.06.20
[JSP] JSP란?  (0) 2023.06.20
[Servlet] Servelet과 JDBC 연동 (DAO 사용한 예제와 JNDI)  (0) 2023.06.19
[Servlet] 세션(Session)  (0) 2023.06.18
[Servlet] 쿠키(Cookie)  (0) 2023.06.18