ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 006. Spring MVC 관찰(2)
    SsY/Class 2023. 7. 3. 12:21
    728x90
    mvc02
    ■■■ Spring MVC 프로젝트 실습02 ■■■
    ○ Perspective
       : JavaEE
    
    ○ 다이나믹 웹 프로젝트 생성
       : mvc02
       (STS - 스프링 / 스프링 레거시 / 스프링 부트 / 스프링 MVC ...)
    
    ○ 기본 환경 구성 및 라이브러리 설정 
       : mvc00 으로부터 src, WebContent 디렉터리 복사 & 붙여넣기
         (→ 우리가 임의로 만들어둔 샘플)
         
    ○ 실습 성격
       : 데이터 송수신 관련 실습(Spring MVC 버전)
    
    ○ 물리적 파일 구성
       - SendController.java      → 컨트롤러 객체
       - Send.jsp                 → 뷰 객체
       - ReceiveController.java   → 컨트롤러 객체
       - Receive.jsp              → 뷰 객체
       - dispatcher-servlet.xml   → 컨트롤러 객체 등록 / URL 매핑 주소 등록
       - web.xml                  → DispatcherServlet 객체 등록 / URL 매핑 주소 등록
                                     (Front Controller)
       - send.action              →  요청 및 실습 편의성을 위한 빈 파일
    
    ○ 사용자 최초 요청 주소 
    http://localhost:3306/mvc02/send.action → receive.action

    ※ 필터와 같은 추가 기능 구현에 대한 적용을 하기 전까지 당분간 그대로 사용하게 될 web.xml 코드

    • SendController.java
    /*=================================
       SendController.java
       - 사용자 정의 컨트롤러 클래스
    ================================= */
    package com.test.mvc;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    // ※ Spring MVC 『Controller』 인터페이스를 구현하는 방법을 통해
    //    사용자 정의 컨트롤러 클래스를 구성한다.
    
    public class SendController implements Controller
    {
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
    	{
    		// 액션 코드
    		ModelAndView mav = new ModelAndView();
    		
    		mav.setViewName("/WEB-INF/view/Send.jsp"); 
    		
    		return mav;
    	}
    	
    }

    • Send.jsp
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Send.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>Spring MVC 데이터 송수신 실습</h1>
    	<hr />
    </div>
    
    <div>
    	<!-- 모델 1방식 <form action="Receive.jsp" method="post"> -->
    	<!-- 모델 서블릿 <form action="receive" method="post"> -->
    	<form action="receive.action" method="post">
    		이름 <input type="text" name="userName"/>
    		<button type="submit">submit</button>
    	</form>
    </div>
    
    </body>
    </html>

    • ReceiveController.java
    /*=================================
       HelloController.java
       - 사용자 정의 컨트롤러 클래스
    ================================= */
    package com.test.mvc;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    // ※ Spring MVC 『Controller』 인터페이스를 구현하는 방법을 통해
    //    사용자 정의 컨트롤러 클래스를 구성한다.
    
    public class ReceiveController implements Controller
    {
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
    	{
    		// 액션 코드
    		ModelAndView mav = new ModelAndView();
    		
    		// 한글 깨짐 방지
    		request.setCharacterEncoding("UTF-8");
    		
    		String str = "안녕하세요. 제 이름은" + request.getParameter("userName") + "입니다.";
    		
    		mav.addObject("name", str);		
    		mav.setViewName("/WEB-INF/view/Receive.jsp");
    				
    		return mav;
    	}
    	
    }

    • Receive.jsp
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Receive.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    </head>
    <body>
    
    <div>
    	<h1>Spring MVC 데이터 송수신 실습</h1>
    	<hr />
    </div>
    
    <div>
    	${name}
    </div>
    
    </body>
    </html>

    • dispatcher-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    						http://www.springframework.org/schema/context
    						http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    	<context:component-scan base-package="org.springframework.samples.petclinic.web" />
    
    	<!-- ※ 사용자 정의 Controller 객체 등록 및 URL 매핑 주소 등록 -->
    	<!--    - 『name=""』 속성에 매핑 주소를 등록한다. -->
    	<!--       이 과정에서 Front Controller 가 갖고있는 확장자의 형태로 구성한다. -->
    	<!--    - 『class=""』 속성은 Controller 객체의 클래스 경로 및 이름을 등록한다. -->
    
    	<bean name="/send.action" class="com.test.mvc.SendController"></bean>
    	<bean name="/receive.action" class="com.test.mvc.ReceiveController"></bean>
    
    </beans>

    • 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>mvc01</display-name>
    	<welcome-file-list>
    		<welcome-file>index.html</welcome-file>
    		<welcome-file>index.htm</welcome-file>
    		<welcome-file>index.jsp</welcome-file>
    		<welcome-file>default.html</welcome-file>
    		<welcome-file>default.htm</welcome-file>
    		<welcome-file>default.jsp</welcome-file>
    	</welcome-file-list>
    	
    	<!-- ※ Spring MVC Framework 등록 -->
    	<!--    → Front Controller 등록 -->
    	<!--       → DispatcherServlet 등록 -->
    
    	<servlet>
    		<servlet-name>dispatcher</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>dispatcher</servlet-name>
    		<url-pattern>*.action</url-pattern>
    	</servlet-mapping>
    	
    	<!-- ※ 필터와 같은 추가 기능 구현에 대한 적용을 하기 전까지 -->
    	<!--    당분간 그대로 사용하게 될 코드 -->
    	
    </web-app>

    • send.action : 최초 요청 주소 빈 파일 

    mvc03
    • mvc03_scott.sql

    • MemberDTO.java
    /*===============================
       MemberDTO.java
       - 사용자 정의 자료형 클래스
    ================================ */
    
    package com.test.mvc;
    
    public class MemberDTO
    {
    	// 주요 속성 구성
    	private int mid;
    	private String name, telphone;
    	
    	// getter / setter 구성
    	public int getMid()
    	{
    		return mid;
    	}
    	public void setMid(int mid)
    	{
    		this.mid = mid;
    	}
    	public String getName()
    	{
    		return name;
    	}
    	public void setName(String name)
    	{
    		this.name = name;
    	}
    	public String getTelphone()
    	{
    		return telphone;
    	}
    	public void setTelphone(String telephone)
    	{
    		this.telphone = telphone;
    	}
    	
    }

    • IMemberDAO.java
    /*======================
       IMemberDAO.java
       - 인터페이스
    ====================== */
    package com.test.mvc;
    
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    public interface IMemberDAO
    {
    	// 회원 데이터 추가 메소드 선언
    	public int add(MemberDTO member) throws SQLException;
    	
    	// 전체 인원수 확인 메소드 선언
    	public int count() throws SQLException;
    	
    	// 회원 목록 확인 메소드 선언
    	public ArrayList<MemberDTO> list() throws SQLException;
    }

    • MemberDAO.java
    /*====================================================
       MemberDAO.java
       - DB 액션 처리 클래스
       - IMemberDAO 인터페이스 구현 클래스
       - Connection 객체에 대한 의존성 주입을 위한 준비
         → 인터페이스, setter
    ==================================================== */
    
    package com.test.mvc;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    import javax.sql.DataSource;
    
    public class MemberDAO implements IMemberDAO
    {
    	// ※ Connection 객체에 대한 의존성 주입을 위한 준비
    	//    --------------- DataSource 활용
    	
    	// ① 인터페이스 형태의 데이터타입을 취하는 속성 구성
    	private DataSource dataSource;
    	//-- 스프링에서 제공
    	
    	// ② setter 구성 
    	public void setDataSource(DataSource dataSource)
    	{
    		this.dataSource = dataSource;
    	}
    
    	// ※ IMemberDAO 인터페이스의 메소드 오버라이딩
    	
    	@Override
    	public int add(MemberDTO member) throws SQLException
    	{
    		int result = 0;
    		
    		Connection conn = dataSource.getConnection();
    		
    		String sql = "INSERT INTO TBL_MEMBERLIST(MID, NAME, TELPHONE)"
    				+ " VALUES(MEMBERLISTSEQ.NEXTVAL, ?, ?)";
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		
    		pstmt.setString(1, member.getName());
    		pstmt.setString(2, member.getTelphone());
    		
    		result = pstmt.executeUpdate();
    		
    		pstmt.close();
    		conn.close();
    		
    		return result;
    	}
    
    	@Override
    	public int count() throws SQLException
    	{
    		int result = 0;
    		
    		Connection conn = dataSource.getConnection();
    		
    		String sql = "SELECT COUNT(*) AS COUNT FROM TBL_MEMBERLIST";
    		
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		
    		ResultSet rs = pstmt.executeQuery();
    		if (rs.next())
    			result = rs.getInt("COUNT");
    		
    		rs.close();
    		pstmt.close();
    		conn.close();
    		
    		return result;
    	}
    
    	@Override
    	public ArrayList<MemberDTO> list() throws SQLException
    	{
    		ArrayList<MemberDTO> result = new ArrayList<MemberDTO>();
    		
    		Connection conn = dataSource.getConnection();
    		
    		String sql = "SELECT MID, NAME, TELPHONE FROM TBL_MEMBERLIST ORDER BY MID";
    		
    		PreparedStatement pstmt = conn.prepareStatement(sql);
    		
    		ResultSet rs = pstmt.executeQuery();
    		
    		while (rs.next())
    		{
    			MemberDTO member = new MemberDTO();
    			
    			member.setMid(rs.getInt("MID"));
    			member.setName(rs.getString("NAME"));
    			member.setTelphone(rs.getString("TELPHONE"));
    			
    			result.add(member);
    		}
    		
    		rs.close();
    		pstmt.close();
    		conn.close();
    		
    		return result;
    	}
    	
    }

    • MemberListController.java
    /*==============================================
       MemberListController.java
       - 사용자 정의 컨트롤러 클래스
       - 리스트 출력 액션
       - DAO 객체에 대한 의존성 주입을 위한 준비
         → 인터페이스 자료형 / setter 구성
    ================================================ */
    
    package com.test.mvc;
    
    import java.util.ArrayList;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    // ※ Spring MVC 『Controller』 인터페이스를 구현하는 방법을 통해
    //    사용자 정의 컨트롤러 클래스를 구성한다.
    
    public class MemberListController implements Controller
    {
    	// 인터페이스 자료형을 취하는 속성 구성
    	private IMemberDAO dao;
    	
    	// setter 구성
    	public void setDao(IMemberDAO dao)
    	{
    		this.dao = dao;
    	}
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
    	{
    		// 액션 코드
    		ModelAndView mav = new ModelAndView();
    		 
    		int count = 0;
    		ArrayList<MemberDTO> memberList = new ArrayList<MemberDTO>();
    		 
    		try
    		{
    			//-- 모델 계층을 만들어 처리하여도 되지만,
    			//-- 이를 위해서는 모델객체, 자료형 등 추가적으로 더 구성해야하기 때문에
    			//-- 간단하게 controller 에서 처리
    			count = dao.count();
    			memberList = dao.list();
    		} 
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		 
    		mav.setViewName("/WEB-INF/view/MemberList.jsp");
    		mav.addObject("count",count);
    		mav.addObject("memberList", memberList);
    		 
    		return mav;
    	}
    	
    }

    • MemberList.jsp
    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%
    	request.setCharacterEncoding("UTF-8");
    	String cp = request.getContextPath();
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>MemberList.jsp</title>
    <link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
    <style type="text/css">
    	*{line-height: 150%;}
    	#customers {border: 1px solid gray;}
    	#customers td
    	{
    		text-align: center;
    		border: 1px solid gray;	
    	}
    	#submitBtn
    	{
    		height: 150%;
    		width: 250px;
    		font-size: 18px;
    		font-weight: bold;
    		font-family: 맑은 고딕;
    		color: #343;
    	}
    	#err
    	{
    		color: red;
    		font-size: small;
    		display: none;
    	}
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
    <script type="text/javascript">
    	$(function()
    	{
    		$("#submitBtn").click(function()
    		{
    			// 확인
    			//alert("확인");
    			
    			// 두 항목이 묶여서 처리되고 있는 상황이기 때문에... 생략 가능
    			$("#err").css("display","none");
    			
    			if ($("#name").val()=="" || $("#telphone").val()=="")
    			{
    				$("#err").css("display","inline");
    				return;
    			}
    			
    			$("#memberForm").submit();
    		});
    	});
    </script>
    </head>
    <body>
    
    <div>
    	<h1>회원 관리</h1>
    	<hr />
    </div>
    
    <div>
    	<form action="memberinsert.action" method="post" id="memberForm">
    		이름 <input type="text" name="name" id="name" class="control" required="required" />
    		<br>
    		전화 <input type="text" name="telphone" id="telphone" class="control" required="required" />
    		<br>
    		<button type="button" id="submitBtn">회원 추가</button>
    		<span id="err">모든 항목을 입력해야 합니다.</span>
    	</form>
    	<br>
    	
    	<!-- <p>전체 인원 수 : 3 명</p> -->
    	<!-- EL 표현에 의한 인원 수 출력 부분 -->
    	<p>전체 인원 수 : ${count } 명</p>
    	
    	<table id="customers" style="width: 500px;">
    		<tr>
    			<th>번호</th><th>이름</th><th>전화번호</th>
    		</tr>
    		<!-- 
    		<tr>
    			<td>1</td>
    			<td>별희강</td>
    			<td>010-0000-0000</td>
    		</tr>
    		<tr>
    			<td>2</td>
    			<td>리서최</td>
    			<td>010-0111-0111</td>
    		</tr>
    		<tr>
    			<td>3</td>
    			<td>키민킴</td>
    			<td>010-0222-0222</td>
    		</tr>
    		-->
    		
    		<%-- EL, JSTL 표현에 의한 회원 명단 출력 부분 --%>
    		<c:forEach var="member" items="${memberList }">
    			<tr>
    				<%-- MemberDTO 객체의 getMid(), getName(), getTlephone() 메소드를 호출하는 구문 --%>
    				<td>${member.mid }</td>
    				<td>${member.name }</td>
    				<td>${member.telphone }</td>
    			</tr>
    		</c:forEach>
    	</table>
    	
    </div>
    
    </body>
    </html>

    • MemberInsertController.java
    /*=============================================
       MemberInsertController.java
       - 사용자 정의 컨트롤러 클래스
       - 회원 데이터 추가 액션 처리 클래스
       - DAO 객체에 대한 의존성 주입을 위한 준비
    ============================================= */
    
    package com.test.mvc;
    
    import java.util.ArrayList;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    // ※ 『implements Controller』 혹은 『extends AbstractController』
    //-- 서블릿에서 HttpServlet 을 상속받은 서블릿 객체 역할
    
    // ※ Spring MVC 『Controller』 인터페이스를 구현하는 방법을 통해
    //    사용자 정의 컨트롤러 클래스를 구성한다.
    
    public class MemberInsertController implements Controller
    {
    	// dao 관련 속성 구성 → 인터페이스 형태 (인터페이스 자료형을 취하는 속성 구성)
    	private IMemberDAO dao;
    	
    	// setter 구성
    	public void setDao(IMemberDAO dao)
    	{
    		this.dao = dao;
    	}
    	
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
    	{
    		// 액션 코드
    		ModelAndView mav = new ModelAndView();
    		
    		// 한글 깨짐 방지
    		request.setCharacterEncoding("UTF-8");
    		
    		// 이전 페이지로부터 넘어온 (폼)데이터 수신
    		String name = request.getParameter("name");
    		String tel = request.getParameter("telphone");
    				
    		int count = 0;
    		ArrayList<MemberDTO> memberList = new ArrayList<MemberDTO>();
    		
    		try
    		{
    			// add() 메소드에 넘겨줄 형태로 DTO 구성
    			MemberDTO member = new MemberDTO();
    			member.setName(name);
    			member.setTelphone(tel);
    
    			dao.add(member);
    			
    		}
    		catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    		
    		// 뷰 지정하기
    		//mav.setViewName("/WEB-INF/view/MemberList.jsp");
    		//-- 이렇게 하면 추가 후 list 를 불러올 수가 없음
    		
    		// ※ memberlist.action 을 다시 요청 할 수 있도록 안내
    		//    → sendRedirect() → memberlist.action 
    		
    		// check!
    		mav.setViewName("redirect:memberlist.action");
    		//mav.setViewName("memberlist.action");
    		//-- 동일한 구문이나 redirect: 접두어를 붙이는 이유는
    		//-- 추후 redirect: 로 처리한 구문들을 모아서 확인할 수 있는 방법이 있기 때문 
    		
    		return mav;
    	}
    	
    }

    • dispatcher-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    						http://www.springframework.org/schema/context
    						http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    	<context:component-scan base-package="org.springframework.samples.petclinic.web" />
    
    	<!-- ※ 사용자 정의 Controller 객체 등록 및 URL 매핑 주소 등록 -->
    	<!--    - 『name=""』 속성에 매핑 주소를 등록한다. -->
    	<!--       이 과정에서 Front Controller 가 갖고있는 확장자의 형태로 구성한다. -->
    	<!--    - 『class=""』 속성은 Controller 객체의 클래스 경로 및 이름을 등록한다. -->
    
    	<!-- DataSource → SimpleDriverDataSource 활용 (→직접 설계한 자원이 아님) -->
    	<!-- MemberDAO 에서 필요한 dataSource 를 건네주기 위한 준비 -->
    	<bean id="localDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
    		<!-- 여기서 구성하는 속성들은 DBConn 작성시 작성했던 것들! -->
    		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>		
    		<property name="url" value="jdbc:oracle:thin:@211.238.142.49:1521:xe"></property>		
    		<property name="username" value="scott"></property>		
    		<property name="password" value="tiger"></property>		
    	</bean>
    	
    	<!-- 즉, 아래 처럼 위와 다른 데이터 베이스에도 연동하기 위해서 활용하는 것 -->
    	<!-- 등록은 했으나 인스턴스 생성은 함 (localDataSource 만 사용하고 있기 때문에) -->
    	<bean id="remoteDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
    		<!-- 여기서 구성하는 속성들은 DBConn 작성시 작성했던 것들! -->
    		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>		
    		<property name="url" value="jdbc:oracle:thin:@211.238.142.50:1521:xe"></property>		
    		<property name="username" value="scott"></property>
    		<property name="password" value="tiger"></property>	
    	</bean>
    	
    	<!-- MemberDAO -->
    	<!-- 아래에서 필요한 DAO 속성을 넘겨주기 위한 것으로 name 속성이 아닌 id 속성으로 구성해야한다 -->
    	<bean id="memberDAO" class="com.test.mvc.MemberDAO">
    		<property name="dataSource">
    			<!-- 필요한 속성인 dataSource 넘겨주기 -->
    			<ref bean="localDataSource"/>
    		</property>
    	</bean>
    	
    	<!-- MemberListController -->
    	<bean name="/memberlist.action" class="com.test.mvc.MemberListController">
    		<property name="dao">
    			<!-- 필요한 속성인 MemberDAO 넘겨주기 -->
    			<ref bean="memberDAO"/>
    		</property>
    	</bean>
    	
    	<!-- MemberInsertController -->
    	<bean name="/memberinsert.action" class="com.test.mvc.MemberInsertController">
    		<property name="dao">
    			<ref bean="memberDAO"/>
    		</property>
    	</bean>
    	
    </beans>

    • 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>mvc01</display-name>
    	<welcome-file-list>
    		<welcome-file>index.html</welcome-file>
    		<welcome-file>index.htm</welcome-file>
    		<welcome-file>index.jsp</welcome-file>
    		<welcome-file>default.html</welcome-file>
    		<welcome-file>default.htm</welcome-file>
    		<welcome-file>default.jsp</welcome-file>
    	</welcome-file-list>
    	
    	<!-- ※ Spring MVC Framework 등록 -->
    	<!--    → Front Controller 등록 -->
    	<!--       → DispatcherServlet 등록 -->
    
    	<servlet>
    		<servlet-name>dispatcher</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    	</servlet>
    
    	<servlet-mapping>
    		<servlet-name>dispatcher</servlet-name>
    		<url-pattern>*.action</url-pattern>
    	</servlet-mapping>
    	
    	<!-- ※ 필터와 같은 추가 기능 구현에 대한 적용을 하기 전까지 -->
    	<!--    당분간 그대로 사용하게 될 코드 -->
    	
    </web-app>

    • memberlist.action
      - 최초 요청 페이지(빈 파일)
    728x90
Designed by planet-si