Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-04-25(월) 061일차 [Java, HTML, JavaScript, JSP, Servlet] Servlet의 기초 사용법과 그 예제

옌炎 2022. 6. 14. 17:51
728x90

수업내용


1교시 (09:30-10:20)

  • 앞으로의 일정

    남은 3개월 강의 순서

    1. Servlet
    2. Ajax, JSON
    3. Spring, Mybatis
    jstl, el
    Spring WEB MVC + Mybatis Framework
    ----------------------------
    4. react (바벨, 컴포넌트), vue
    ===============================
    5. python
    6. Android
    7. BigData

    1/24 --> 4/25

    취업 관련 : 4번까지
     5번 어드밴티지 - 회사에서는 안드로이드, iOS 개발자 1~2명
  • popup_2.html

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<!-- 
		var win = window.open(url, name, specs, replace);
		win.close();
		
		1. win : 새로 만들어진 객체가 반환, 창 생성 실패하면 null 반환
		2. url : 새창에 보여질 주소, 비워두면 빈창(about:blank)이 보임
		3. name : 새로 열릴 창의 속성 또는 창의 이름 지정, 기본값은 _blank
				_blank   : 새창이 열림, 기본값
				_parent  : 부모 프레임이 열림
				_self 	 : 현재 페이지를 대체
				_top	 : 로드된 프레임셋을 대체
				name(임의의 이름) : 새창이 열리고 창의 이름을 지정
		4. specs : 창의 위치, 창의 크기, 스크롤 여부, 리사이즈 가능 등 속성 지정
		5. replace : true 현재 히스토리를 대체, false 히스토리에 새항목을 만듬
	 -->
	 <script src="http://code.jquery.com/jquery-latest.min.js"></script>
	 <script type="text/javascript">
	 
	 	$(document).ready(function(){
	 		
	 		var win = window.open(  "/KosMember/kos_script/popup_notice.jsp",
	 								"_blank",
	 								"left=100,top100,width=300,height=300",
	 								false);
	 		
	 		function popup_close(){
	 			alert("3초 후 팝업을 자동으로 닫기");
	 			alert("win >>> : " + win);
	 			
	 			if (win) {
	 				win.close();
	 			}
	 		}
	 		
	 		setTimeout(popup_close, 3000);
	 	});
	 </script>
</head>

<body>
	<h3>공지사항 팝업 부모창(윈도우)</h3>
	<hr>
</body>
</html>
  • popup_notice.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>공지사항</title>
</head>
<body>
	<h3>공지사항 팝업 자식창(윈도우)</h3>
	<hr>
</body>
</html>

2교시 (10:30-11:20)

  • Servlet
    =========================================================
    서블릿 Servlet : Server + Applet
    =========================================================

    1. servlet-api.jar 라이브러리 jdk에 포팅하기
    ----------------------------------------------
    C:\Program Files\Apache Software Foundation\Tomcat 8.5\lib\servlet-api.jar
    C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\servlet-api.jar <-- 카피


    2. 서블릿 코드 서블릿 마법사로 생성하기
    ----------------------------------------------
    Java Resources - src - 우클릭 - New - 패키지 생성
    - 패키지 우클릭 - Servlet : Servlet 마법사 실행 - 

    Class name: HelloServlet - Next

    URL mappings - Edit.. 버튼 클릭 - 
    Pattern: /abc - OK 클릭 - Next -
    Domain은 대소문자를 구분하지 않지만 URL은 대소문자를 구분한다.

    Which method stubs would you like to create?
    불필요한 코드 삭제하고 - Finish

    Context - Deployment Descripter:KosMember - 
    Servlet Mappings
    /abc -> HelloServlet
    Servlets
    HelloServlet

    3. 서블릿 실행
    ----------------------------------------------
    서블릿은 WAS Server 영역에 있는 자바 클래스로 클라이언트에서
    직접 URL으로 요청할 수 없다.
    서블릿 파일이 있는 위치를 가상경로(URL) 매핑하여 요청해야 한다.
    WEB-INF 경로 하위는
    서버 영역으로 클라이언트에서 직접 요청할 수 없다.

    3.1 웹 서블릿 어노테이션 매핑 WebServlet Anotation Mapping
    javax.servlet.annotation.WebServlet

    helloServlet.html
    <form action="/Context/abc" method="GET"

    @WebServlet("/abc")
    public class HelloServlet extends HttpServlet {

    HelloServlet.java - HelloServlet.class

    서블릿 라이프 사이클
    =============================================
    init() - service - doGet() || doPOST() - destroy()

    servlet() 함수에서
    요청한 form tag의 메소드 속성의 값을 보고 매칭되는 함수를 호출한다.
    <form
    action=""
    method="GET"

    method="GET" -> doGet() 
    method="POST" -> doPost()
    를 호출한다.

    jsp 페이지는 디폴트가 GET 방식이다.
    =============================================


    3.2 서블릿 url 매칭 Servlet URL Mapping
    web.xml 서블릿 매핑 Servlet Mapping 수동 설정
    ----------------------------------------------
    WebContent - WEB-INF - web.xml

    <!-- Servlet Class 정의 -->
    <servlet>
    <display-name>HelloServlet</display-name>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
    </servlet>

    <!-- Servlet Mapping 설정 -->
    <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/abc.do</url-pattern>
    </servlet-mapping>


    helloServlet.html
    <form action="/Context/abc" method="GET"

    WEB-INF/web.xml
    <url-pattern>/abc.do</url-pattern>

    4. 서블릿 포워드 forward
    ---------------------------------------
    포워드 기능
    하나의 서블릿에서 다른 서블릿 또는 JSP와 연동하는 방법
    포워드 용도
    요청 request에 대한 추가 작업을 다른 서블릿, JSP에게 수행하게 하는 것
    포워드 방법
    dispatch 방법
    javax.Servlet.RequestDispatcher.forward()
    요청 request에 포함된 정보를 forward하는 서블릿, JSP와 같이 공유 함
    redirect 방법
    javax.servlet.Http.HttpServletRequest.sendRedirect()
    웹 브라우저에 재요청하는 방식

3교시 (11:30-12:20)

  • HelloKSY.java
package a.b.c.test.servlet;

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;

/**
 * Servlet implementation class HelloKSY
 */
@WebServlet("/ksy")
public class HelloKSY extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  • HelloKSY.java (수정)
package a.b.c.test.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;

/**
 * Servlet implementation class HelloKSY
 */
@WebServlet("/ksy")
public class HelloKSY extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse res) 
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		res.setCharacterEncoding("UTF-8");
		res.setContentType("text/html; charset=UTF-8");
		String name = "KSY";
		
		String mid = request.getParameter("mid");
		String mpw = request.getParameter("mpw");
		
		System.out.println("mid >>> : " + mid);
		System.out.println("mpw >>> : " + mpw);
		
		// 화면에 출력하시오
		PrintWriter out = res.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Servlet Class</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("Hello Servlet >>> : " + name + ": " + mid + " : " + mpw);
		out.println("</body>");
		out.println("</html>");
	}
}
  • formservlet.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<!-- jQuery CDN -->
	<script src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){
			
			$("#servletBtn").on("click", function(){
				alert("servletBtn >>> : ");
				
				// htttp://localhost:8088/KosMember/ksy
				$("#formServlet").attr({
					"action":"/KosMember/ksy",
					"method":"GET"
				}).submit();
			});
			
			// jsp_보내기 이벤트 처리 : /kos_jsp/helloServlet_jsp.jsp
			$("#jspBtn").on("click", function() {
				alert("jspBtn >>> : ");
				
				// http://localhost:8088/KosMember/kos_jsp/helloServlet_jsp.jsp
				$("$formServlet").attr({
					"action":"/KosMember/kos_jsp/helloServlet_jsp.jsp",
					"method":"GET"
				}).submit();
			});
			
			// locationServletBtn 이벤트 시 LocationServlet으로 보내기
			$("#locationServletBtn").on("click", function(){
				
				// httpL//localhost:8088/KosMember/location
				$("#formServlet").attr({
					"action":"/KosMember/location",
					"method":"GET"
				}).submit();
			});
		});
		
	</script>
</head>

<body>
	<form name="formServlet" id="formServlet">
		아이디 : <input type="text" class="mid" name="mid" id="mid" /> <br>
		패스워드 : <input type="text" class="mpw" name="mpw" id="mpw" /> <br>
		<input type="button" id="servletBtn" value="servlet_보내기" />
		<input type="button" id="jspBtn" value="jsp_보내기"/>
		<input type="button" id="locationServletBtn" value="location_보내기"/>
	</form>
</body>
</html>

servlet보내기 버튼 클릭시

 

4교시 (12:30-13:20)

  • LocationServlet.java
package a.b.c.test.servlet;

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

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LocationServlet
 */
@WebServlet("/location")
public class LocationServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		String mid = request.getParameter("mid");
		String mpw = request.getParameter("mpw");
		
		System.out.println("mid >>> : " + mid);
		System.out.println("mpw >>> : " + mpw);
		ArrayList<String> aList = new ArrayList<String>();
		aList.add(mid);
		aList.add(mpw);
		
		// 1. /kos_jsp/formServlet.html
		// 2. a.b.c.test.servlet.LocationServlet.java
		// 3. /kos_jsp/location_jsp.jsp
		request.setAttribute("aList", aList);
		// http://localhost:8088/KosMember/kos_servlet/location_jsp.jsp
		RequestDispatcher rd = request.getRequestDispatcher("/kos_servlet/location_jsp.jsp");
		rd.forward(request, response);
	}
}
  • location_jsp.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>

<body>
	<hr>location_jsp.jsp
	<hr>
	<%
		Object obj = request.getAttribute("aList");
		if (obj == null) return;
		
		ArrayList<String> aList = (ArrayList<String>)obj;
		System.out.println(aList);
		String mid = aList.get(0);
		String mpw = aList.get(1);
		String s = "";
		
		for (int i=0; i < aList.size(); i++) {
			System.out.println("aList.get(" + i + ") >>> : " + aList.get(i));
			s += aList.get(i) + ",";
		}
		pageContext.setAttribute("mid", mid);
		pageContext.setAttribute("mpw", mpw);
		pageContext.setAttribute("s", s);
	%>
	&lt;%= mid %&gt; --> <%= mid %><br>
	&lt;%= mpw &&gt; --> <%= mpw %><br>
	&lt;%= s &&gt; --> <%= s %><br>
	\${mid } --> ${mid }<br>
	\${mpw } --> ${mpw }<br>
	\${s } --> ${s }<br>
	\${aList.get(0) } --> ${aList.get(0) }<br>
	\${aList.get(1) } --> ${aList.get(1) }<br>
</body>
</html>

location_보내기 버튼 클릭 시


5교시 (14:30-15:20)

  • web.xml ← 예전에서는 서블릿을 웹 서블릿 어노테이션을 사용할 때 xml 파일에서 읽어왔음
    • C:\00.KOSMO108\30.Web\eclipse_web_1_work\KosMember\WebContent\WEB-INF\web.xml
<?xml version="1.0" encoding="UTF-8"?>

<web-app 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
			xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
			xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
								http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
			id="WebApp_ID" version="3.1">
	
	<display-name>KosMember</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
	
	<servlet>
		<servlet-name>Web_xmlServlet</servlet-name>
		<servlet-class>a.b.c.test.servlet.Web_xmlServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>Web_xmlServlet</servlet-name>
		<url-pattern>*.ksy</url-pattern>
	</servlet-mapping>
	
	<!-- log4j setting -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/classes/log4j.xml</param-value>
	</context-param> 
</web-app>

6교시 (15:30-16:20)

  • @WebServlet 어노테이션(annotation)
    • JDK 1.5(5.0)부터 시작한 자바로 만든 기술이다.
    • 콘트롤러로 사용
    • 어노테이션이 없어도 web.xml에서 지정할 수 있음

7교시 (16:30-17:20)

  • Web_xmlServlet.java
package a.b.c.test.servlet;

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

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Web_xmlServlet
 */
// @WebServlet("/aa")
public class Web_xmlServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		// forward : webxmlJsp.jsp : mid, mpw 화면에 출력하기
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		String mid = request.getParameter("mid");
		String mpw = request.getParameter("mpw");
		
		System.out.println("mid >>> : " + mid);
		System.out.println("mpw >>> : " + mpw);
		ArrayList<String> aList = new ArrayList<String>();
		aList.add(mid);
		aList.add(mpw);
		
		// 1. /kos_jsp/webxmlServlet.html
		// 2. a.b.c.test.servlet.Web_xmlServlet.java
		// 3. /kos_hsp/webxmlJsp.jsp
		request.setAttribute("aList", aList);
		// http://localhost:8088/KosMember/kost_servlet/webxmlJsp.jsp
		RequestDispatcher rd = request.getRequestDispatcher("/kos_servlet/webxmlJsp.jsp");
		rd.forward(request, response);
	}
}
  • webxmlJsp.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
	
<body>
	<h3>webxmlJsp.jsp</h3>
	<hr>
	<%
		Object obj = request.getAttribute("aList");
		if (obj == null) return;
		
		ArrayList<String> aList = (ArrayList<String>)obj;
		System.out.println(aList);
		String mid = aList.get(0);
		String mpw = aList.get(1);
		String s = "";
		
		for (int i=0; i < aList.size(); i++) {
			System.out.println("aList.get(" + i + ") >>> : " + aList.get(i));
			s += aList.get(i) + ",";
		}
		pageContext.setAttribute("mid", mid);
		pageContext.setAttribute("mpw", mpw);
		pageContext.setAttribute("s", s);
	%>
	&lt;%= mid %&gt; --> <%= mid %><br>
	&lt;%= mpw %&gt; --> <%= mpw %><br>
	&lt;%= s %&gt; --> <%= s %><br>
	\${ mid } --> ${ mid }<br>
	\${ mpw } --> ${ mpw }<br>
	\${ s } --> ${ s }<br>
	\${ aList.get(0) } --> ${ aList.get(0) }<br>
	\${ aList.get(1) } --> ${ aList.get(1) }<br>
</body>
</html>
  • webxmlServlet.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<!--  jQuery CDN -->
	<script src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){
			
			$("#webxmlBtn").on("click", function(){
				alert("webxmlBtn >>> : ");
				
				// http://localhost:8088/KosMember/ksy
				$("#formServlet").attr({
					"action":"/KosMember/aaa.ksy",
					"method":"GET"
				}).submit();
			});
		});
	</script>
</head>

<body>
	<form name="formServlet" id="formServlet">
		아이디 : <input type="text" class="mid" name="mid" id="mid"/><br>
		비밀번호 : <input type="text" class="mpw" name="mpw" id="mpw"/><br>
		<input type="button" id="webxmlBtn" value="webxml_보내기"/>
	</form>
</body>
</html>

  • 게시판 만들기 : Model 2 + Web MVC 패턴

    모델 2 : jsp + Servlet

    Model : java
    View : jsp
    Controller : Servlet

    요구사항 : 일반 게시판 만들어 주세요
    회원제 게시판  : 회원 아이디 O
    일반 게시판  : 회원 아이디 X


    글번호  B0000 : B 접두어 + XXXX 숫자 4개
    글제목 길이 100
    글 쓴 사람  길이 50
    글 쓸 때 사용한 패스워드 길이 300 8자리 이상 : 단방향 암호화
    글 내용 길이 2000자

    삭제여부 삭제여부 : Y : N
    등록일 YYYY-MM-DD
    수정일 YYYY-MM-DD

    1. 데이터베이스 설계

    데이터베이스, JDBC 드라이버
    Oracle 11g 2 Release
    jdbc 드라이버 : ojdbc6.jar

    데이터 소스
    // DataSource 정보 : 데이터베이스 연결 정보
    드라이버 : oracle.jdbc:thin:@localhost:1521:orclKSY00
    사용자 계정 : scott
    사용자 계정 패스워드 : tiget

    오라클 SID : Service name 확인하기
    -----------------------------------
    DB_UNIQUE_NAME 이름 사용하기

    콘솔에서
    sqlplus / as sysdba 또는 sqlplus "/as sysdba"

    SQL > SELECT NAME, DB_UNIQUE_NAME FROM V$DATABASE;

    NAME               DB_UNIQUE_NAME
    ------------------ ------------------------------------------------------------
    ORCLKSY0           orclKSY00

    SQL > SELECT INSTANCE FROM V$THREAD;

    INSTANCE
    --------------------------------------------------------------------------------
    orclksy00

    테이블 이름 : MVVC_BOARD
    컬럼

    BNUM VARCHAR2(20)
    BSUBJECT VARCHAR2(100)
    BWRITER VARCHAR2(30)
    BPW VARCHAR2(300)
    BMEMO VARCHAR2(2000)
    DELETEYN VARCHAR2(1)
    INSERTDATE DATE
    UPDATEDATE DATE

    CREATE TABLE MVC_BOARD(
     BNUM VARCHAR2(20) PRIMARY KEY
    ,BSUBJECT VARCHAR2(100) NOT NULL
    ,BWRITER VARCHAR2(30)
    ,BPW VARCHAR2(300)
    ,BMEMO VARCHAR2(2000)
    ,DELETEYN VARCHAR2(1) NOT NULL
    ,INSERTDATE DATE
    ,UPDATEDATE DATE
    );

    인덱스 확인

    채번 확인


    2. 클래스 설계
    Context : kosServlet
    package : a.b.c.com.kosmo.board

    사용할 라이브러리 포팅하기
    -----------------------------------
    Context/WebContent/WEB-INF/lib/
    디비 연결하는 jdbc 드라이버
    로그 찍기
    ....

8교시 (17:30-18:30)

  • 게시판 만들기 : Model 2 + Web MVC 패턴 (계속)

    공통 클래스
    ----------------------------
    a.b.c.com.common


    Controller
    ----------------------------
    a.b.c.com.kosmo.board.controller
    BoardController

    Service
    ----------------------------
    a.b.c.com.kosmo.board.service
    BoardService
    public ArrayList<BoardVO> boardSelectAll();
    public ArrayList<BoardVO> boardSelect(BoardVO bvo);
    public boolean boardInsert(BoardVO bvo);
    public boolean boardUpdate(BoardVO bvo);
    public boolean boardDelete(BoardVO bvo);
    BoardServiceImpl

    DAO
    ----------------------------
    a.b.c.com.kosmo.board.dao
    BoardDAO
    public ArrayList<BoardVO> boardSelectAll();
    public ArrayList<BoardVO> boardSelect(BoardVO bvo);
    public boolean boardInsert(BoardVO bvo);
    public boolean boardUpdate(BoardVO bvo);
    public boolean boardDelete(BoardVO bvo);
    BoardDAOImpl

    SQL
    ----------------------------
    a.b.c.com.kosmo.board.sql
    BoardSqlMap
    public static String getBoardSelectAll(){ return null;}
    public static String getBoardSelect(){ return null;}
    public static String getBoardInsert(){ return null;}
    public static String getBoardUpdate(){ return null;}
    public static String getBoardDelete(){ return null;}

    VO
    ----------------------------
    a.b.c.com.kosmo.board.vo
    BoardVO
    private String bnum;
    private String bsubject;
    private String bwriter;
    private String bpw;
    private String bmemo;
    private String deleteyn;
    private String insertdate;
    private String updatedate;


    view : jsp
    ----------------------------
    /kosServlet/WebContent/kosmo/board
    board.html
    boardSelectAll.jsp
    boardSelect.jsp
    boardInsert.jsp
    boardUpdate.jsp
    boardDelete.jsp

Notes


728x90