Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨

23.05.11 / MVC 패턴 - 회원가입 , 서블릿(Servlet) 본문

Back - end/JAVA

23.05.11 / MVC 패턴 - 회원가입 , 서블릿(Servlet)

낫쏘링 2023. 5. 11. 09:55
728x90

[1. 회원가입 화면 - forward]        

URI : /Min/m_insert_form.ksmart_m        View : m_insert_form.jsp

패키지명 : kr.or.ksmart.controller      클래스명 : MController      메서드 : void doGet / void doPost

패키지명 : kr.or.ksmart.forward       클래스명 : MActionForward 

Index.jsp

/WEB-INF/web.xml

 

[2. 회원가입 처리 - forward / redirect 둘 다 아님]        

URI : /Min/m_insert_pro.ksmart_m        View : m_pro.jsp

패키지명 : kr.or.ksmart.Inter      인터페이스 : MActionInterFace 

패키지명 : kr.or.ksmart.action      클래스명 : MInsertAction      상속 받은 인터페이스 : MActionInterFace

패키지명 : kr.or.ksmart.dto      클래스명 : Member

패키지명 : kr.or.ksmart.dao      클래스명 : Mdao

/META-INF/context.xml

 

[3. 회원가입 목록 - forward / redirect 둘 중 선택]        

URI : /Mlist/m_list.ksmart_m       View : m_list.jsp

패키지명 : kr.or.ksmart.action      클래스명 : MListAction      상속 받은 인터페이스 : MActionInterFace

 

[화원가입 화면]

1. index.jsp 생성 - 여기까지 생성 후 실행하면 404에러 발생 ( 경로 문제 )

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>

<%

response.sendRedirect(request.getContextPath()+"/Min/m_insert_form.ksmart_m");
//response.sendRedirect(request.getContextPath()+"/Min/m_insert_pro.ksmart_m");
//response.sendRedirect(request.getContextPath()+"/Mlist/m_list.ksmart_m");

%>

2. MController 클래스 Sevlet으로 생성

public class MController extends HttpServlet {
	private static final long serialVersionUID = 1L;       
   
    public MController() {
        super();        
    }
	//어딘가에 있을 호출부 : 객체참조변수명.doGet(request,response);
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-1 doGet Mcontroller.java");		
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-2 doPost Mcontroller.java");		
	}
}

부모 클래스 : HttpServlet

자식 클래스 : MController

메서드 : doGet / doPost

자바 자체에서 만들어놓은 Servlet이라는 클래스의 메서드를 MController 클래스에서 상속 받아 오버라이딩하는 것

[ HttpServletRequest ]
http프로토콜의 request정보를 서블릿에게 전달하기 위해 HttpServletRequest 객체 생성
헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메서드
바디의 스트림을 읽어 들이는 메서드

[ HttpServletResponse ]
WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있는 상태
해당 클라이언트에게 응답을 보내기 위해 HttpServleResponse 객체 생성
서블릿에게 전달하고 content type, 응답 코드, 응답 메시지 등을 전송

servlet 라이브러리의 위치

 

3. /WEB-INF/web.xml - 여기까지 생성 후 실행하면 뷰포트에는 아무것도 안 뜨지만 콘솔에 1-1 doGet Mcontroller.java 출력

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MController</display-name>
  <servlet>
    <servlet-name>MController</servlet-name>
    <servlet-class>
		kr.or.ksmart.controller.MController</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MController</servlet-name>
    <url-pattern>*.ksmart_m</url-pattern>
  </servlet-mapping>

 

4. MController 클래스에 doPro 메서드 선언

package kr.or.ksmart.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class MController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public MController() {
        super();
        
    }
    
    //doGet 또는 doPost 메서드 내부 처리과정에서 호출하면 실행되는 메서드를 선언한다.
	protected void doPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("2 doPro Mcontroller.java");
		System.out.println(request + "request doPro Mcontroller.java");
		System.out.println(response + "response doPro Mcontroller.java");
		
        //  /mysqlv8_MVC_MG_tomcat9_jstl/Min/m_insert_form.ksmart_m
		String RequestURI=request.getRequestURI();
        //  /mysqlv8_MVC_MG_tomcat9_jstl
		String contextPath=request.getContextPath();
        //  /Min/m_insert_form.ksmart_m
        //  substring의 뜻 - RequestURI에서 contextPath의 길이 다음부터 command에 담는다.
		String command=RequestURI.substring(contextPath.length());
		System.out.println(RequestURI + "<-- RequestURI MController.java");
		System.out.println(contextPath + "<-- contextPath MController.java");
		System.out.println(contextPath.length() + "<-- contextPath.length() MController.java");
		System.out.println(command + "<-- command MController.java");
		System.out.println("----------MController.java----------------");
		System.out.println();
		
	}
	
	//사용자가 Get방식을 사용하면 doGet 메서드를 호출하고 doGet 메서드 내에서 doPro 메서드를 호출한다.
	//어디선가 호출 : 객체참조변수명.doGet(request,response);
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-1 doGet Mcontroller.java");
		doPro(request,response);
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-2 doPost Mcontroller.java");
		request.setCharacterEncoding("euc-kr"); // post 방식 한글 처리
		doPro(request,response);
	}

}

인터페이스 : javax.servlet.http.HttpServletRequest

구현 클래스 : org.apache.catalina.connector 패키지내의 RequestFacade 클래스

구현 객체 : org.apache.catalina.connector.RequestFacade@79000909

 

인터페이스 : javax.servlet.http.HttpServletResponse

구현 클래스 : org.apache.catalina.connector 패키지내의 ResponseFacade 클래스

구현 객체 : org.apache.catalina.connector.ResponseFacade@80392cb

 

5. MActionForward 클래스 생성 ( 목적 : 포워드 / 리다이렉트 선택과 경로 셋팅)

package kr.or.ksmart.forward;

public class MActionForward {

	private boolean isRedirect=false;	//isRedirect가 false면 포워드,true면 리다이렉트
	private String path=null;
	
	public boolean isRedirect() {   // 값이 ture 또는 false 인 경우 generate 했을 때 get이 아니고 is가 붙음
		return isRedirect;
	}
	public void setRedirect(boolean isRedirect) {
		this.isRedirect = isRedirect;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	
    @Override
	public String toString() {  // 오른쪽 마우스 - source - generate toString
		return "MActionForward [isRedirect=" + isRedirect + ", path=" + path + "]";
	}
    // String 클래스에 선언된 toString 메서드를 오버라이딩한 것 - 
    // 원래 return super.toStirng(); 였던 것을 
    // return "MActionForward [isRedirect=" + isRedirect + ", path=" + path + "]"; 형태로 오버라이딩
    // String 클래스의 toString은 자신이 가진 값을 그대로 리턴
    // File 클래스의 toString은 자신이 가진 해당 경로값을 리턴
	
}

 

6. MController 클래스에 doPro 메서드에 경로셋팅 / 포워드, 리다이렉트 처리 구현

     ( URI : /Min/m_insert_form.ksmart_m 일 때 - MActionForward 클래스 객체참조변수와 주소)

    // 경로 셋팅		
    MActionForward forward = null;
    if(command.equals("/Min/m_insert_form.ksmart_m")) {
        System.out.println("3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
        forward = new MActionForward();
        forward.setPath("/minsert/m_insert_form.jsp");	//어떤 경로 셋팅?
        System.out.println(forward + "forward 3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
        //forward.setRedirect(false); 현재 기본 값 false인 상태 -> 포워드
        //경로는 셋팅된 상태 -> 하지만 포워드 경로에 해당 파일 없음 (404 에러 발생)
        //minsert 폴더와 m_insert_form.jsp 파일 아직 안만들었음.

        // 5번 MActionForward 클래스의 객체참조변수 forward에 주소 할당
        // System.out.println(forward); 하면
        // 5번 MActionForward 클래스에 재정의된 toString 메서드는 자동 호출 됨
        // MActionForward [isRedirect=false, path=/minsert/m_insert_form.jsp] 출력됨
    }

    // 포워드 or 리다이렉트 처리
    if(forward != null){
        if(forward.isRedirect()){
            response.sendRedirect(forward.getPath());
        }else{
            RequestDispatcher dispatcher=
                request.getRequestDispatcher(forward.getPath());
            System.out.println(forward.getPath() + "<--- forward.getPath()[jsp 이동경로]  MController.java");
            System.out.println();
            dispatcher.forward(request, response);
        }
    }

}
    
==========================================================================================

package kr.or.ksmart.controller;

import java.io.IOException;

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

import kr.or.ksmart.forward.MActionForward;


public class MController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public MController() {
        super();
        
    }
    
    //doGet 또는 doPost 메서드 내부 처리과정에서 호출하면 실행되는 메서드를 선언한다.
	protected void doPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("2 doPro Mcontroller.java");
		System.out.println(request + "request doPro Mcontroller.java");
		System.out.println(response + "response doPro Mcontroller.java");
		
	//  /mysqlv8_MVC_MG_tomcat9_jstl/Min/m_insert_form.ksmart_m
		String RequestURI=request.getRequestURI();
	//  /mysqlv8_MVC_MG_tomcat9_jstl
		String contextPath=request.getContextPath();
	//  /Min/m_insert_form.ksmart_m
		String command=RequestURI.substring(contextPath.length());
		System.out.println(RequestURI + "<-- RequestURI MController.java");
		System.out.println(contextPath + "<-- contextPath MController.java");
		System.out.println(contextPath.length() + "<-- contextPath.length() MController.java");
		System.out.println(command + "<-- command MController.java");
		System.out.println("----------MController.java----------------");
		System.out.println();
		
		// 경로 셋팅		
		MActionForward forward = null;
		if(command.equals("/Min/m_insert_form.ksmart_m")) {
			System.out.println("3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
			forward = new MActionForward();
			forward.setPath("/minsert/m_insert_form.jsp");	//어떤 경로 셋팅?
			System.out.println(forward + "forward 3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
			//forward.setRedirect(false); 현재 기본 값 false인 상태 -> 포워드
			//경로는 셋팅된 상태 -> 하지만 포워드 경로에 해당 파일 없음 (404 에러 발생)
			//minsert 폴더와 m_insert_form.jsp 파일 아직 안만들었음.
            
            // 5번 MActionForward 클래스의 객체참조변수 forward에 주소 할당
            // System.out.println(forward); 하면
            // 5번 MActionForward 클래스에 재정의된 toString 메서드는 자동 호출 됨
            // MActionForward [isRedirect=false, path=/minsert/m_insert_form.jsp] 출력됨
		}
		
		// 포워드 or 리다이렉트 처리
		if(forward != null){
			if(forward.isRedirect()){
				response.sendRedirect(forward.getPath());
			}else{
				RequestDispatcher dispatcher=
					request.getRequestDispatcher(forward.getPath());
				System.out.println(forward.getPath() + "<--- forward.getPath()[jsp 이동경로]  MController.java");
				System.out.println();
				dispatcher.forward(request, response);
			}
		}
		
	}
	
	//사용자가 Get방식을 사용하면 doGet 메서드를 호출하고 doGet 메서드 내에서 doPro 메서드를 호출한다.
	//어디선가 호출 : 객체참조변수명.doGet(request,response);
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-1 doGet Mcontroller.java");
		doPro(request,response);
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-2 doPost Mcontroller.java");
		request.setCharacterEncoding("euc-kr"); // post 방식 한글 처리
		doPro(request,response);
	}

}

 

7. minsert 폴더에 m_insert_form.jsp 파일 생성

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
/minsert/m_insert_form.jsp
<form action="<%= request.getContextPath() %>/Min/m_insert_pro.ksmart_m" method="post">
<table border="1">
<tr>
	<td>아이디</td>
	<td><input type="text" name="m_id" size="20"></td>
<tr>
<tr>
	<td>암호</td>
	<td><input type="text" name="m_pw" size="20"></td>
<tr>
<tr>
	<td>권한</td>
	<td><input type="text" name="m_level" size="20"></td>
<tr>
<tr>
	<td>이름</td>
	<td><input type="text" name="m_name" size="20"></td>
<tr>
<tr>
	<td>이메일</td>
	<td><input type="text" name="m_email" size="20"></td>
<tr>
<tr>
	<td colspan="4"><input type="submit" value="회원가입버튼"></td>
</tr>
</table>
</form>
</body>

 

8. 회원가입 화면 view에 출력 됨

 

[화원가입 처리]

9. MActionInterFace 인터페이스 생성해서 추상메서드 선언

package kr.or.ksmart.Inter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.or.ksmart.forward.MActionForward;

public interface MActionInterFace {
	//execute 추상 메서드 선언
	public MActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception;
}

 

10. MActionInterFace 인터페이스를 상속받을 MInsertAction 클래스 생성해서 execute 메서드 오버라이딩

package kr.or.ksmart.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.forward.MActionForward;

public class MInsertAction implements MActionInterFace {
	
	@Override
	public MActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("4-1 execute MinsertAction.java");
		//execute 추상 메서드에서 어떤 처리를 해야 할까?
		//1단계 : 입력자료를 받아 콘솔창에 출력한다 - 필요함
		//2단계 : DTO 셋팅 - 필요함
		//3단계 : DAO 메서드 호출 후 리턴이 있으면 리턴 받는다. - 필요함
		//4단계 : request or session 영역에 셋팅 - 불 필요함
		//6단계 : MActionForward 객체 주소값 리턴 - 필요
		
		return null;
	}

}

 

11. MController 클래스에 doPro 메서드에 경로셋팅

     ( URI : /Min/m_insert_pro.ksmart_m 일 때 - MinsertAction 클래스 객체참조변수와 주소)

* 인터페이스 data type으로 선언된 action 객체참조변수에는 인터페이스 구현 객체의 주소 값을 할당
(인터페이스 MActionInterFace의 객체 참조변수 action 선언은 딱 하나만 하고, 주소 값 할당만 계속 재할당한다. - 다형성) 
else if(command.equals("/Min/m_insert_pro.ksmart_m")) {
			System.out.println("3-2 조건문 /Min/m_insert_pro.ksmart_m");
			action = new MInsertAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
        
==========================================================================================

package kr.or.ksmart.controller;

import java.io.IOException;

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

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.action.MInsertAction;
import kr.or.ksmart.action.MInsertProAction;
import kr.or.ksmart.forward.MActionForward;


public class MController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public MController() {
        super();
        
    }
    
    //doGet 또는 doPost 메서드 내부 처리과정에서 호출하면 실행되는 메서드를 선언한다.
	protected void doPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("2 doPro Mcontroller.java");
		System.out.println(request + "request doPro Mcontroller.java");
		System.out.println(response + "response doPro Mcontroller.java");
		
		//  /mysqlv8_MVC_MG_tomcat9_jstl/Min/m_insert_form.ksmart_m
		String RequestURI=request.getRequestURI();
        //  /mysqlv8_MVC_MG_tomcat9_jstl
		String contextPath=request.getContextPath();
        //  /Min/m_insert_form.ksmart_m
		String command=RequestURI.substring(contextPath.length());
		System.out.println(RequestURI + "<-- RequestURI MController.java");
		System.out.println(contextPath + "<-- contextPath MController.java");
		System.out.println(contextPath.length() + "<-- contextPath.length() MController.java");
		System.out.println(command + "<-- command MController.java");
		System.out.println("----------MController.java----------------");
		System.out.println();
		
		//경로 셋팅
		MActionForward forward = null;
		MActionInterFace action = null;
		if(command.equals("/Min/m_insert_form.ksmart_m")) {
			System.out.println("3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
			forward = new MActionForward();
			forward.setPath("/minsert/m_insert_form.jsp");	//어떤 경로 셋팅?
			System.out.println(forward + "forward 3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
		}else if(command.equals("/Min/m_insert_pro.ksmart_m")) {
			System.out.println("3-2 조건문 /Min/m_insert_pro.ksmart_m");
			action = new MInsertAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		
		//포워드 or 리다이렉트
		if(forward != null){
			if(forward.isRedirect()){
				response.sendRedirect(forward.getPath());
			}else{
				RequestDispatcher dispatcher=
					request.getRequestDispatcher(forward.getPath());
				System.out.println(forward.getPath() + "<--- forward.getPath()[jsp 이동경로]  MController.java");
				System.out.println();
				dispatcher.forward(request, response);
			}
		}
		
	}
	
	//사용자가 Get방식을 사용하면 doGet 메서드를 호출하고 doGet 메서드 내에서 doPro 메서드를 호출한다.
	//어디선가 호출 : 객체참조변수명.doGet(request,response);
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-1 doGet Mcontroller.java");
		doPro(request,response);
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-2 doPost Mcontroller.java");
		request.setCharacterEncoding("euc-kr"); // post 방식 한글 처리
		doPro(request,response);
	}

}

 

12. Member 클래스로 DTO 생성

package kr.or.ksmart.dto;

public class Member {
	private String m_id;
	private String m_pw;
	private String m_level;
	private String m_name;
	private String m_email;
	
	public String getM_id() {
		return m_id;
	}
	public void setM_id(String m_id) {
		this.m_id = m_id;
	}
	public String getM_pw() {
		return m_pw;
	}
	public void setM_pw(String m_pw) {
		this.m_pw = m_pw;
	}
	public String getM_level() {
		return m_level;
	}
	public void setM_level(String m_level) {
		this.m_level = m_level;
	}
	public String getM_name() {
		return m_name;
	}
	public void setM_name(String m_name) {
		this.m_name = m_name;
	}
	public String getM_email() {
		return m_email;
	}
	public void setM_email(String m_email) {
		this.m_email = m_email;
	}
	
	@Override
	public String toString() {
		return "Member [m_id=" + m_id + ", m_pw=" + m_pw + ", m_level=" + m_level + ", m_name=" + m_name + ", m_email="
				+ m_email + "]";
	}
	

}

 

13. MInsertAction 클래스 execute 메서드 오버라이딩 

       (사용자가 입력한 데이터 받기 / 받은 데이터 DTO에 셋팅하기 - 아직 데이터베이스 연결 전)

	    //1단계 : 입력자료를 받아 콘솔창에 출력한다 - 필요함
		String m_id = request.getParameter("m_id");
		String m_pw = request.getParameter("m_pw");
		String m_level = request.getParameter("m_level");
		String m_name = request.getParameter("m_name");
		String m_email = request.getParameter("m_email");
		
		System.out.println(m_id + "<- m_id execute MInsertProAction.java");
		System.out.println(m_pw + "<- m_pw execute MInsertProAction.java");
		System.out.println(m_level + "<- m_level execute MInsertProAction.java");
		System.out.println(m_name + "<- m_name execute MInsertProAction.java");
		System.out.println(m_email + "<- m_email execute MInsertProAction.java");
		
	    //2단계 : DTO 셋팅 - 필요함
		Member m = new Member();
		m.setM_id(m_id);
		m.setM_pw(m_pw);
		m.setM_level(m_level);
		m.setM_name(m_name);
		m.setM_email(m_email);
		System.out.println(m + "<- m execute MInsertProAction.java");
        
===============================================================================================

package kr.or.ksmart.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.dto.Member;
import kr.or.ksmart.forward.MActionForward;

public class MInsertAction implements MActionInterFace {
	
	@Override
	public MActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("4-1 execute MinsertAction.java");
		//execute 추상 메서드에서 어떤 처리를 해야 할까?
	    //1단계 : 입력자료를 받아 콘솔창에 출력한다 - 필요함
		String m_id = request.getParameter("m_id");
		String m_pw = request.getParameter("m_pw");
		String m_level = request.getParameter("m_level");
		String m_name = request.getParameter("m_name");
		String m_email = request.getParameter("m_email");
		
		System.out.println(m_id + "<- m_id execute MInsertProAction.java");
		System.out.println(m_pw + "<- m_pw execute MInsertProAction.java");
		System.out.println(m_level + "<- m_level execute MInsertProAction.java");
		System.out.println(m_name + "<- m_name execute MInsertProAction.java");
		System.out.println(m_email + "<- m_email execute MInsertProAction.java");
		
	    //2단계 : DTO 셋팅 - 필요함
		Member m = new Member();
		m.setM_id(m_id);
		m.setM_pw(m_pw);
		m.setM_level(m_level);
		m.setM_name(m_name);
		m.setM_email(m_email);
		System.out.println(m + "<- m execute MInsertProAction.java");
		
	    //3단계 : DAO 메서드 호출 후 리턴이 있으면 리턴 받는다. - 필요함
	    //4단계 : request or session 영역에 셋팅 - 불 필요함
	    //5단계 : MActionForward 객체에 포워드 또는 리다이렉트 설정 및 경로 셋팅 - 필요함
	    //6단계 : MActionForward 객체 주소값 리턴 - 필요
		
		return null;
	}

}

 

14. META-INF 폴더에 context.xml 파일 생성 (JDBC 드라이버 로딩 / DB 연결 정보를 셋팅)

<Context>
	<Resource
		name="jdbc/MySQLDB"
		auth="Container"
		type="javax.sql.DataSource"
		username="dev47id"
		password="dev47pw"
		driverClassName="com.mysql.jdbc.Driver"
		factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
		url="jdbc:mysql://localhost:3306/dev47db"
		maxActive="500"
	/>
</Context>

 

15. Mdao 클래스 생성 (Constructios from superclass 체크해서 생성자 메서드 선언 추가)

package kr.or.ksmart.dao;

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

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import kr.or.ksmart.dto.Member;

public class Mdao {
	DataSource ds;
	Connection conn;
	PreparedStatement pstmt;
	ResultSet rs;
	List<Member> lm = null;
	Member m;
	
	public Mdao() {
		try{
			Context init = new InitialContext();
			System.out.println(init + "<-- init Mdao() ");
	  	    ds = (DataSource) init.lookup("java:comp/env/jdbc/MySQLDB");
	  	    System.out.println(ds + "<-- ds Mdao() ");
		}catch(Exception ex){
			System.out.println("DB 연결 실패 : " + ex);
			return;
		}
	}
}

 

15. MInsertAction 클래스 execute 메서드 오버라이딩  

       (DAO 메서드 호출 후 리턴 받기 - 데이터베이스 연결)

	    //3단계 : DAO 메서드 호출 후 리턴이 있으면 리턴 받는다. - 필요함
		Mdao mdao = new Mdao();
		mdao.mInsert(m);
        
==========================================================================================

package kr.or.ksmart.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.dao.Mdao;
import kr.or.ksmart.dto.Member;
import kr.or.ksmart.forward.MActionForward;

public class MInsertAction implements MActionInterFace {
	
	@Override
	public MActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("4-1 execute MinsertAction.java");
		//execute 추상 메서드에서 어떤 처리를 해야 할까?
	    //1단계 : 입력자료를 받아 콘솔창에 출력한다 - 필요함
		
		String m_id = request.getParameter("m_id");
		String m_pw = request.getParameter("m_pw");
		String m_level = request.getParameter("m_level");
		String m_name = request.getParameter("m_name");
		String m_email = request.getParameter("m_email");
		
		System.out.println(m_id + "<- m_id execute MInsertProAction.java");
		System.out.println(m_pw + "<- m_pw execute MInsertProAction.java");
		System.out.println(m_level + "<- m_level execute MInsertProAction.java");
		System.out.println(m_name + "<- m_name execute MInsertProAction.java");
		System.out.println(m_email + "<- m_email execute MInsertProAction.java");
		
	    //2단계 : DTO 셋팅 - 필요함
		Member m = new Member();
		m.setM_id(m_id);
		m.setM_pw(m_pw);
		m.setM_level(m_level);
		m.setM_name(m_name);
		m.setM_email(m_email);
		System.out.println(m + "<- m execute MInsertProAction.java");
		
	    //3단계 : DAO 메서드 호출 후 리턴이 있으면 리턴 받는다. - 필요함
		Mdao mdao = new Mdao();
		mdao.mInsert(m);
	    //4단계 : request or session 영역에 셋팅 - 불 필요함
	    //5단계 : MActionForward 객체에 포워드 또는 리다이렉트 설정 및 경로 셋팅 - 필요함
	    //6단계 : MActionForward 객체 주소값 리턴 - 필요
		
		return null;
	}

}

 

16. Mdao 클래스  mInsert 메서드 선언 (입력 처리 메서드)

public void mInsert(Member m) throws ClassNotFoundException, SQLException {
		System.out.println("5-1 mInsert Mdao.java");
		conn=ds.getConnection();
		System.out.println(conn + "<- conn mInsert Mdao.java");
		pstmt = conn.prepareStatement(
				"INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");
		System.out.println(pstmt + "<-- pstmt 1");
		System.out.println(m + "<-- m");
		pstmt.setString(1, m.getM_id());
		pstmt.setString(2, m.getM_pw());
		pstmt.setString(3, m.getM_level());
		pstmt.setString(4, m.getM_name());
		pstmt.setString(5, m.getM_email());
		System.out.println(pstmt + "<-- pstmt 2");
		int result = pstmt.executeUpdate();
		System.out.println(result + "<-- result");
		pstmt.close();
		conn.close();
	}
    
==========================================================================================

package kr.or.ksmart.dao;

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

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import kr.or.ksmart.dto.Member;

public class Mdao {
	DataSource ds;
	Connection conn;
	PreparedStatement pstmt;
	ResultSet rs;
	List<Member> lm = null;
	Member m;
	
	public Mdao() {
		try{
			Context init = new InitialContext();
			System.out.println(init + "<-- init Mdao() ");
	  	    ds = (DataSource) init.lookup("java:comp/env/jdbc/MySQLDB");
	  	    System.out.println(ds + "<-- ds Mdao() ");
		}catch(Exception ex){
			System.out.println("DB 연결 실패 : " + ex);
			return;
		}
	}
	
	public void mInsert(Member m) throws ClassNotFoundException, SQLException {
		System.out.println("5-1 mInsert Mdao.java");
		conn=ds.getConnection();
		System.out.println(conn + "<- conn mInsert Mdao.java");
		pstmt = conn.prepareStatement(
				"INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");
		System.out.println(pstmt + "<-- pstmt 1");
		System.out.println(m + "<-- m");
		pstmt.setString(1, m.getM_id());
		pstmt.setString(2, m.getM_pw());
		pstmt.setString(3, m.getM_level());
		pstmt.setString(4, m.getM_name());
		pstmt.setString(5, m.getM_email());
		System.out.println(pstmt + "<-- pstmt 2");
		int result = pstmt.executeUpdate();
		System.out.println(result + "<-- result");
		pstmt.close();
		conn.close();
	}
	
	
}

 

[화원가입 목록]

17. MInsertAction 클래스 execute 메서드 오버라이딩  (경로 셋팅 및 리턴값 수정)

	    //5단계 : MActionForward 객체에 포워드 또는 리다이렉트 설정 및 경로 셋팅 - 필요함
		MActionForward mf = new MActionForward();
		mf.setRedirect(true);
		mf.setPath(request.getContextPath()+"/Mlist/m_list.ksmart_m");
		//6단계 : MActionForward 객체 주소값 리턴 - 필요
		
		return mf;
        
==========================================================================================

package kr.or.ksmart.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.dao.Mdao;
import kr.or.ksmart.dto.Member;
import kr.or.ksmart.forward.MActionForward;

public class MInsertAction implements MActionInterFace {
	
	@Override
	public MActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("4-1 execute MinsertAction.java");
		//execute 추상 메서드에서 어떤 처리를 해야 할까?
	    //1단계 : 입력자료를 받아 콘솔창에 출력한다 - 필요함
		
		String m_id = request.getParameter("m_id");
		String m_pw = request.getParameter("m_pw");
		String m_level = request.getParameter("m_level");
		String m_name = request.getParameter("m_name");
		String m_email = request.getParameter("m_email");
		
		System.out.println(m_id + "<- m_id execute MInsertProAction.java");
		System.out.println(m_pw + "<- m_pw execute MInsertProAction.java");
		System.out.println(m_level + "<- m_level execute MInsertProAction.java");
		System.out.println(m_name + "<- m_name execute MInsertProAction.java");
		System.out.println(m_email + "<- m_email execute MInsertProAction.java");
		
	    //2단계 : DTO 셋팅 - 필요함
		Member m = new Member();
		m.setM_id(m_id);
		m.setM_pw(m_pw);
		m.setM_level(m_level);
		m.setM_name(m_name);
		m.setM_email(m_email);
		System.out.println(m + "<- m execute MInsertProAction.java");
		
	    //3단계 : DAO 메서드 호출 후 리턴이 있으면 리턴 받는다. - 필요함
		Mdao mdao = new Mdao();
		mdao.mInsert(m);
	    //4단계 : request or session 영역에 셋팅 - 불 필요함
	    //5단계 : MActionForward 객체에 포워드 또는 리다이렉트 설정 및 경로 셋팅 - 필요함
		MActionForward mf = new MActionForward();
		mf.setRedirect(true);
		mf.setPath(request.getContextPath()+"/Mlist/m_list.ksmart_m");
		//6단계 : MActionForward 객체 주소값 리턴 - 필요
		
		return mf;
	}

}

 

18. MController 클래스 doPro 메서드 추가

		}else if(command.equals("/Mlist/m_list.ksmart_m")) {
			System.out.println("3-3 조건문 /Mlist/m_list.ksmart_m");
		}
        
=========================================================================================

package kr.or.ksmart.controller;

import java.io.IOException;

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

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.action.MInsertAction;
import kr.or.ksmart.forward.MActionForward;


public class MController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public MController() {
        super();
        
    }
    
    //doGet 또는 doPost 메서드 내부 처리과정에서 호출하면 실행되는 메서드를 선언한다.
	protected void doPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("2 doPro Mcontroller.java");
		System.out.println(request + "request doPro Mcontroller.java");
		System.out.println(response + "response doPro Mcontroller.java");
		
		//  /mysqlv8_MVC_MG_tomcat9_jstl/Min/m_insert_form.ksmart_m
		String RequestURI=request.getRequestURI();
        //  /mysqlv8_MVC_MG_tomcat9_jstl
		String contextPath=request.getContextPath();
        //  /Min/m_insert_form.ksmart_m
		String command=RequestURI.substring(contextPath.length());
		System.out.println(RequestURI + "<-- RequestURI MController.java");
		System.out.println(contextPath + "<-- contextPath MController.java");
		System.out.println(contextPath.length() + "<-- contextPath.length() MController.java");
		System.out.println(command + "<-- command MController.java");
		System.out.println("----------MController.java----------------");
		System.out.println();
		
		MActionForward forward = null;
		MActionInterFace action = null;
		if(command.equals("/Min/m_insert_form.ksmart_m")) {
			System.out.println("3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
			forward = new MActionForward();
			forward.setPath("/minsert/m_insert_form.jsp");	//어떤 경로 셋팅?
			System.out.println(forward + "forward 3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
			//forward.setRedirect(false); 현재 기본 값 false인 상태 -> 포워드
			//경로는 셋팅된 상태 -> 하지만 포워드 경로에 해당 파일 없음 (404 에러 발생)
			//minsert 폴더와 m_insert_form.jsp 파일 아직 안만들었음.
		}else if(command.equals("/Min/m_insert_pro.ksmart_m")) {
			System.out.println("3-2 조건문 /Min/m_insert_pro.ksmart_m");
			action = new MInsertAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else if(command.equals("/Mlist/m_list.ksmart_m")) {
			System.out.println("3-3 조건문 /Mlist/m_list.ksmart_m");
		}
		
		
		//포워드 or 리다이렉트
		if(forward != null){
			if(forward.isRedirect()){
				response.sendRedirect(forward.getPath());
			}else{
				RequestDispatcher dispatcher=
					request.getRequestDispatcher(forward.getPath());
				System.out.println(forward.getPath() + "<--- forward.getPath()[jsp 이동경로]  MController.java");
				System.out.println();
				dispatcher.forward(request, response);
			}
		}
		
	}
	
	//사용자가 Get방식을 사용하면 doGet 메서드를 호출하고 doGet 메서드 내에서 doPro 메서드를 호출한다.
	//어디선가 호출 : 객체참조변수명.doGet(request,response);
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-1 doGet Mcontroller.java");
		doPro(request,response);
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-2 doPost Mcontroller.java");
		request.setCharacterEncoding("euc-kr"); //post방식 한글 처리
		doPro(request,response);
	}

}

 

19. MActionInterFace 인터페이스를 상속받을 MListAction 클래스 생성

20. MController 클래스 doPro 메서드 추가

else if(command.equals("/Mlist/m_list.ksmart_m")) {
			System.out.println("3-3 조건문 /Mlist/m_list.ksmart_m");
			action = new MListAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

============================================================================================

package kr.or.ksmart.controller;

import java.io.IOException;

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

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.action.MInsertAction;
import kr.or.ksmart.action.MListAction;
import kr.or.ksmart.forward.MActionForward;


public class MController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
    public MController() {
        super();
        
    }
    
    //doGet 또는 doPost 메서드 내부 처리과정에서 호출하면 실행되는 메서드를 선언한다.
	protected void doPro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("2 doPro Mcontroller.java");
		System.out.println(request + "request doPro Mcontroller.java");
		System.out.println(response + "response doPro Mcontroller.java");
		
		//  /mysqlv8_MVC_MG_tomcat9_jstl/Min/m_insert_form.ksmart_m
		String RequestURI=request.getRequestURI();
        //  /mysqlv8_MVC_MG_tomcat9_jstl
		String contextPath=request.getContextPath();
        //  /Min/m_insert_form.ksmart_m
		String command=RequestURI.substring(contextPath.length());
		System.out.println(RequestURI + "<-- RequestURI MController.java");
		System.out.println(contextPath + "<-- contextPath MController.java");
		System.out.println(contextPath.length() + "<-- contextPath.length() MController.java");
		System.out.println(command + "<-- command MController.java");
		System.out.println("----------MController.java----------------");
		System.out.println();
		
		MActionForward forward = null;
		MActionInterFace action = null;
		if(command.equals("/Min/m_insert_form.ksmart_m")) {
			System.out.println("3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
			forward = new MActionForward();
			forward.setPath("/minsert/m_insert_form.jsp");	//어떤 경로 셋팅?
			System.out.println(forward + "forward 3-1 /Min/m_insert_form.ksmart_m 조건문 실행");
			//forward.setRedirect(false); 현재 기본 값 false인 상태 -> 포워드
			//경로는 셋팅된 상태 -> 하지만 포워드 경로에 해당 파일 없음 (404 에러 발생)
			//minsert 폴더와 m_insert_form.jsp 파일 아직 안만들었음.
		}else if(command.equals("/Min/m_insert_pro.ksmart_m")) {
			System.out.println("3-2 조건문 /Min/m_insert_pro.ksmart_m");
			action = new MInsertAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else if(command.equals("/Mlist/m_list.ksmart_m")) {
			System.out.println("3-3 조건문 /Mlist/m_list.ksmart_m");
			action = new MListAction();
			try {
				forward = action.execute(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		
		//포워드 or 리다이렉트
		if(forward != null){
			if(forward.isRedirect()){
				response.sendRedirect(forward.getPath());
			}else{
				RequestDispatcher dispatcher=
					request.getRequestDispatcher(forward.getPath());
				System.out.println(forward.getPath() + "<--- forward.getPath()[jsp 이동경로]  MController.java");
				System.out.println();
				dispatcher.forward(request, response);
			}
		}
		
	}
	
	//사용자가 Get방식을 사용하면 doGet 메서드를 호출하고 doGet 메서드 내에서 doPro 메서드를 호출한다.
	//어디선가 호출 : 객체참조변수명.doGet(request,response);
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-1 doGet Mcontroller.java");
		doPro(request,response);
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("1-2 doPost Mcontroller.java");
		request.setCharacterEncoding("euc-kr"); //post방식 한글 처리
		doPro(request,response);
	}

}

 

20. Mdao 클래스  mAllSelect 메서드 선언 (전체 회원 조회 메서드)

	//2 전체 회원 조회 메서드 선언
	public List<Member> mAllSelect() throws ClassNotFoundException, SQLException{
		System.out.println("5-2 mAllSelect Mdao.java");
		conn=ds.getConnection();
		System.out.println(conn + "<- conn mAllSelect Mdao.java");
		pstmt = conn.prepareStatement("select * from tb_member");
		System.out.println(pstmt + "<-- pstmt");
		rs = pstmt.executeQuery();
		lm = new ArrayList<Member>();
		while(rs.next()){
			//System.out.println("while문 실행");
			m = new Member();
			m.setM_id(rs.getString("m_id"));
			m.setM_pw(rs.getString("m_pw"));
			m.setM_level(rs.getString("m_level"));
			m.setM_name(rs.getString("m_name"));
			m.setM_email(rs.getString("m_email"));
			lm.add(m);
			System.out.println(lm + "<- lm mAllSelect Mdao.java");
		}
		pstmt.close();
		rs.close();
		conn.close();
		return lm;
	}
    
======================================================================================

package kr.or.ksmart.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 javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import kr.or.ksmart.dto.Member;

public class Mdao {
	DataSource ds;
	Connection conn;
	PreparedStatement pstmt;
	ResultSet rs;
	List<Member> lm = null;
	Member m;
	
	public Mdao() {
		try{
			Context init = new InitialContext();
			System.out.println(init + "<-- init Mdao() ");
	  	    ds = (DataSource) init.lookup("java:comp/env/jdbc/MySQLDB");
	  	    System.out.println(ds + "<-- ds Mdao() ");
		}catch(Exception ex){
			System.out.println("DB 연결 실패 : " + ex);
			return;
		}
	}
	//2 전체 회원 조회 메서드 선언
	public List<Member> mAllSelect() throws ClassNotFoundException, SQLException{
		System.out.println("5-2 mAllSelect Mdao.java");
		conn=ds.getConnection();
		System.out.println(conn + "<- conn mAllSelect Mdao.java");
		pstmt = conn.prepareStatement("select * from tb_member");
		System.out.println(pstmt + "<-- pstmt");
		rs = pstmt.executeQuery();
		lm = new ArrayList<Member>();
		while(rs.next()){
			//System.out.println("while문 실행");
			m = new Member();
			m.setM_id(rs.getString("m_id"));
			m.setM_pw(rs.getString("m_pw"));
			m.setM_level(rs.getString("m_level"));
			m.setM_name(rs.getString("m_name"));
			m.setM_email(rs.getString("m_email"));
			lm.add(m);
			System.out.println(lm + "<- lm mAllSelect Mdao.java");
		}
		pstmt.close();
		rs.close();
		conn.close();
		return lm;
	}
	
	//1 입력처리 메서드 선언
	public void mInsert(Member m) throws ClassNotFoundException, SQLException {
		System.out.println("5-1 mInsert Mdao.java");
		conn=ds.getConnection();
		System.out.println(conn + "<- conn mInsert Mdao.java");
		pstmt = conn.prepareStatement(
				"INSERT INTO tb_member VALUES (?, ?, ?, ?, ?)");
		System.out.println(pstmt + "<-- pstmt 1");
		System.out.println(m + "<-- m");
		pstmt.setString(1, m.getM_id());
		pstmt.setString(2, m.getM_pw());
		pstmt.setString(3, m.getM_level());
		pstmt.setString(4, m.getM_name());
		pstmt.setString(5, m.getM_email());
		System.out.println(pstmt + "<-- pstmt 2");
		int result = pstmt.executeUpdate();
		System.out.println(result + "<-- result");
		pstmt.close();
		conn.close();
	}
	
	
}

 

21. MListAction 클래스 execute메서드 오버라이딩 - 여기까지하면 404에로 (경로 아직 없어서 -mlist/m_list.jsp)

package kr.or.ksmart.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.or.ksmart.Inter.MActionInterFace;
import kr.or.ksmart.dao.Mdao;
import kr.or.ksmart.dto.Member;
import kr.or.ksmart.forward.MActionForward;

public class MListAction implements MActionInterFace {

	@Override
	public MActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("4-2 execute MListProAction.java");
		//1단계 : 입력자료를 받아 콘솔창에 출력한다 - 불필요함
		//2단계 : DTO 셋팅 - 불 필요함
		
		//3단계 : DAO 메서드 호출 후 리턴이 있으면 리턴 받는다. - 필요함		
		//mAllSelect 메서드 호출 후 리턴받아 리턴 값을 콘솔창에 출력 하세요
		Mdao mdao = new Mdao();
		List<Member> lm = mdao.mAllSelect();
		System.out.println(lm + "<- lm execute MListProAction.java");
		
		//4단계 : request or session 영역에 셋팅 - 필요함
		request.setAttribute("lm", lm);
        
		//5단계 : MActionForward 객체에 포워드 또는 리다이렉트 설정 및 경로 셋팅 - 필요함
		MActionForward mf = new MActionForward();
		mf.setRedirect(false);
		mf.setPath("/mlist/m_list.jsp");
        
		//6단계 : MActionForward 객체 주소값 리턴 - 필요함
        
		return mf;
	}

}

 

22. mlist/m_list.jsp 생성

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<!--jstl을 사용하려면 필요함-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
포워드 경로 /mlist/m_list.jsp 	<br><br>
<a href="${pageContext.request.contextPath}/Min/m_insert_form.ksmart_m">회원가입</a><br><br>
회원 리스트 						<br>
<table width="100%" border="1">
<tr>
	<td>아이디</td><td>비번</td><td>권한</td><td>이름</td><td>이메일</td><td>수정</td><td>삭제</td>
</tr>
<!-- <c:forEach></c:forEach> :  List, 배열 요소를 순서대로 반복해서 처리할 수 있는 jstl 태그 -->
<c:forEach items="${lm}" var="lm" varStatus="status">
	<tr>
		<td>${lm.m_id}</td>
		<td>${lm.m_pw}</td>
		<td>${lm.m_level}</td>
		<td>${lm.m_name}</td>
		<td>${lm.m_email}</td>
		<td>
<a href="<%= request.getContextPath() %>/Mup/m_update_form.ksmart_m?send_id=${lm.m_id}">수정버튼</a>
							<!-- 수정버튼 클릭시 경로 확장자 ksmart_m으로 변경 후 작업 시작 -->			
		</td>
		<td>
<a href="<%= request.getContextPath() %>/Mdel/m_delete_pro.ksmart_m?send_id=${lm.m_id}">삭제버튼</a>
							<!-- 삭제버튼 클릭시 경로 확장자 ksmart_m으로 변경 후 작업 시작 -->			
		</td>	
	</tr>
</c:forEach>
</table>
</body>
</html>
728x90