-
[Servlet] 005. MVC 관련 실습(2)SsY/Class 2023. 6. 8. 14:00728x90
WebApp25
=================================================================================================== ○ MVC 관련 실습 2 - prj : WebApp25 - 물리적 파일 구성 ·MVCTest01.jsp → View 역할 (JSP 페이지) ·MVCTest01.java → Controller 역할 (서블릿 클래스) ·web.xml → URL 매핑 - 사용자 최초 요청 주소 http://localhost:8090/WebApp25/mvctest01 ===================================================================================================
WebApp24 와 WebApp25 는 같은 프로젝트 내에 만들어도 상관없으나, 헷갈릴 수 있기 때문에 별도로 구성해 둠
※ 구성하는 순서를 잘 생각해 둘 것
1. jsp 를 먼저 WebContent 에서 뷰페이지를 가시적으로 만들고
2. java 파일에서 해당 뷰를 컨트롤할 서블릿 관련 코드를 작성한다
3. web.xml 을 통해서 서블릿이 해당 페이지를 찾아갈 수 있도록 한다
4. jsp 파일을 WEB-INF 에 두고 서블릿이 찾아갈 수 있도록 주소를 재입력 한다
+ 이 과정에서 파일을 안에 넣은 순간 부터 주소 창에 일일이 입력해서 테스트 해야하기 때문에
번거로움을 피하고자 WebContent 에 마지막 주소와 동일한 이름으로 확장자 없이 빈 파일을 하나 생성해서
Control + F11 을 통해서 서버를 구동해볼 수 있도록 한다
5. jsp 의 뷰 페이지를 정적인 형태에서 동적인 형태로 구성한다.더보기프로젝트 시,,,
MVC 패턴으로 작업을 하면 백그라운드에서 작업을 하기 위한 뷰를 미리 구성할 수 있기 때문에
연쇄적으로 앞 사람이 일을 끝날 때 까지 기다렸다가 작업을 하는 것이 아닌 미리 작업이 가능하다!
- MVCTest01.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>MVCTest01.jsp</title> <link rel="stylesheet" type="text/css" href="<%=cp %>css/main.css"> </head> <body> <div> <h1>MVC 관련 실습 2</h1> <hr> </div> <div> <h2>1 부터 100 까지의 결과물을 가지고 클라이언트 만나기</h2> <h3>(컨트롤러로부터 수신한 결과)</h3> <!-- <ul> <li>1</li> <li>...</li> <li>100</li> </ul> --> <ul> <c:forEach var="i" items="${lists }"> <li>${i }</li> </c:forEach> </ul> </div> </body> </html>
- MVCTest01.java
/* ======================= MVCTest01.java ======================== */ package com.svt; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MVCTest01 extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 서블릿 관련 코딩 // 1 부터 100 까지의 수를 객체(컬렉션)에 저장하는 과정 List<String> lists = new ArrayList<String>(); for (int i=1; i<=100; i++) { lists.add(String.valueOf(i)); // 정수를 문자열 형태로 리스트에 추가 } request.setAttribute("lists", lists); RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/view/MVCTest01.jsp"); dispatcher.forward(request, response); } }
※ 이 경우에 모델이 수행하는 역할을 Servlet 에서 전부 하고 있는 구조가 된다
- 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>WebApp00</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> <!-- MVCTest01 --> <servlet> <servlet-name>MVCTest01</servlet-name> <servlet-class>com.svt.MVCTest01</servlet-class> </servlet> <servlet-mapping> <servlet-name>MVCTest01</servlet-name> <url-pattern>/mvctest01</url-pattern> </servlet-mapping> </web-app>
=================================================================================================== ○ MVC 관련 실습 3 - prj : WebApp25 - 물리적 파일 구성 ·MVCTest02.jsp → View 역할 (JSP 페이지) ·MVCTest02.java → Controller 역할 (서블릿 클래스) ·MVCTest02Model.java → Model역할 (일반 자바 클래스) ·web.xml → URL 매핑 - 사용자 최초 요청 주소 http://localhost:8090/WebApp25/mvctest02 ===================================================================================================
※ 구성하는 순서를 잘 생각해 둘 것
1. jsp 를 먼저 WebContent 에서 뷰페이지를 가시적으로 만들고
2. java 파일에서 해당 뷰를 컨트롤할 서블릿 관련 코드를 작성한다
3. Model 역할을 하는 java 파일 구성
4. web.xml 을 통해서 서블릿이 해당 페이지를 찾아갈 수 있도록 한다
5. jsp 파일을 WEB-INF 에 두고 서블릿이 찾아갈 수 있도록 주소를 재입력 한다
+ 이 과정에서 파일을 안에 넣은 순간 부터 주소 창에 일일이 입력해서 테스트 해야하기 때문에
번거로움을 피하고자 WebContent 에 마지막 주소와 동일한 이름으로 확장자 없이 빈 파일을 하나 생성해서
Control + F11 을 통해서 서버를 구동해볼 수 있도록 한다
6. jsp 의 뷰 페이지를 정적인 형태에서 동적인 형태로 구성한다.
※ request 의 경로를 잘 파악할 것더보기스프링 프레임워크에서 뷰 리저버 등장!
-> 서블릿의 비서같은 역할,,
-> 왜? 서블릿이 모든 뷰들의 특성을 다 기억하기가 힘들어서
-> 서블릿은 뷰 리저버만 기억하고 뷰리저버가 뷰의 특성을 기억하는 형태(Model -> 반환 자료형을 알려주는 느낌?)(제안을 하는 것)(서블릿 거부 가능)
==> 컨트롤러의 결합력은 약간 강해지게 되긴 함...
(이러면 모델하고 뷰하고의 결합력이 강해지는 것이기 때문에)
일반적으로는 모델과 뷰의 결합력이 낮은게 바람직함
즉, 모든 부품들을 분해해서 -> 모두 결합할 수 있게 하는 것이 바람직하나 -> 너무 부품이 많음
ex) 문도 다 분해해서 문 손잡이 경첩 문짝 분해해두고 사물함도 분해해서 사물함 경첩 사물함 손잡이 사물함 문짝
다 분해해 두면 ...? 상태됨 -> 즉, 사물함부품들을 결합해두고 문손잡이모듈 등으로 결합해두고 사용하는게 편함
MVCTest02Model.java 파일 참조
- MVCTest02.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>MVCTest02.jsp</title> <link rel="stylesheet" type="text/css" href="<%=cp %>css/main.css"> </head> <body> <div> <h1>MVC 관련 실습 3</h1> <hr> </div> <div> <h2>1 부터 100 까지의 결과물을 가지고 클라이언트 만나기</h2> <h3>(컨트롤러로부터 수신한 결과)</h3> <!-- <ul> <li>1</li> <li>...</li> <li>100</li> </ul> --> <ul> <c:forEach var="i" items="${lists }"> <li>${i }</li> </c:forEach> </ul> </div> </body> </html>
- MVCTest02.java
/* ======================= MVCTest02.java ======================== */ package com.svt; 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 com.test.MVCTest02Model; public class MVCTest02 extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 서블릿 관련 코딩 //-- MVCTest01 : 서블릿이 내용을 만들어서 전달하라고 하는 것 // 1 부터 100 까지의 수를 객체(컬렉션)에 저장하는 과정 /* List<String> lists = new ArrayList<String>(); for (int i=1; i<=100; i++) { lists.add(String.valueOf(i)); // 정수를 문자열 형태로 리스트에 추가 } request.setAttribute("lists", lists); RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/view/MVCTest01.jsp"); dispatcher.forward(request, response); */ // 모델 객체 생성 및 모델이 처리한 결과 수신 (+ View 정보 획득 )-> 서블릿은 전달만할 수 있게 구성 MVCTest02Model model = new MVCTest02Model(); String view = model.actionCount(request, response); //-- 최초에 받은 request 를 제공 //-- 마지막 경로를 서블릿이 결정할 때 // view += "추가경로"; //-- 방법1 // 추가적인 상황파악(추가 로직 수행) // view += "추가경로"; //-- 방법1(추가) //RequestDispatcher rd = request.getRequestDispatcher(view + "문자열 추가 가능"); //-- 방법2 RequestDispatcher rd = request.getRequestDispatcher(view); rd.forward(request, response); } }
- MVCTest02Model.java
/*================================= MVCTest02Model.java - Model 역할을 수행할 클래스 - 비즈니스 로직 처리 ================================= */ package com.test; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MVCTest02Model { public String actionCount(HttpServletRequest request, HttpServletResponse response) { String result = ""; // 1부터 100 까지의 수를 객체 (컬렉션)에 저장하는 업무처리 List<String> lists = new ArrayList<String>(); for (int i=0; i<=100; i++) { lists.add(String.valueOf(i)); } request.setAttribute("lists", lists); //-- 해당 request 는 처음에 받은 request result = "WEB-INF/view/MVCTest02.jsp"; //-- 현재는 정적으로 하나만 구성했지만 //-- 추후 폴더 경로까지만 알려주고 뒤의 파일은 servlet 에서 처리할 수 있도록 하는 방법도 가능하다는 것! //-- 컨트롤러에 반환한 문자열 return result; } }
- 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>WebApp00</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> <!-- <servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern></url-pattern> </servlet-mapping> --> <!-- MVCTest01 --> <servlet> <servlet-name>MVCTest01</servlet-name> <servlet-class>com.svt.MVCTest01</servlet-class> </servlet> <servlet-mapping> <servlet-name>MVCTest01</servlet-name> <url-pattern>/mvctest01</url-pattern> </servlet-mapping> <!-- MVCTest02 --> <servlet> <servlet-name>MVCTest02</servlet-name> <servlet-class>com.svt.MVCTest02</servlet-class> </servlet> <servlet-mapping> <servlet-name>MVCTest02</servlet-name> <url-pattern>/mvctest02</url-pattern> </servlet-mapping> </web-app>
=================================================================================================== ○ 폼(form)데이터 전송 및 수신 과정 비교 [A] - prj : WebApp26 - 물리적 파일 구성 ·HelloSend01.html ·HelloReceive01.jsp - 사용자 최초 요청 주소 http://localhost:8090/WebApp25/HelloSend01.html [B] - prj : WebApp27 - 물리적 파일 구성 ·HelloSend02.html ·HelloReceive02.java ·web.xml - 사용자 최초 요청 주소 http://localhost:8090/WebApp25/HelloSend02.html [C] - prj : WebApp28 - 물리적 파일 구성 ·HelloSend03.html ·HelloSend03Controller.java ·HelloReceive03Controller.java ·HelloReceive03Model.java ·HelloReceive03.jsp ·web.xml - 사용자 최초 요청 주소 http://localhost:8090/WebApp25/hello ===================================================================================================
[A]
WebApp26- HelloSend01.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HelloSend01.html</title> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> <div> <h1>최초 요청 페이지</h1> <h2>HelloSend01.html</h2> <hr /> </div> <div> <form action="HelloReceive01.jsp" method="post"> first Name <input type="text" name="firstName" /><br> Last Name <input type="text" name="lastName" /><br><br> <button type="submit">submit</button> </form> </div> </body> </html>
- HelloReceive01.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(); %> <% String firstName = request.getParameter("firstName"); String lastName = request.getParameter("lastName"); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HelloReceive01.jsp</title> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> <div> <h1>결과 수신 페이지</h1> <h2>(HelloReceive01.jsp)</h2> <hr /> </div> <div> <ul> <li><b>First Name : </b><%=firstName %></li> <li><b>Last Name : </b><%=lastName %></li> </ul> </div> </body> </html>
[B]
WebApp27- HelloSend02.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HelloSend02.html</title> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> <div> <h1>최초 요청 페이지</h1> <h2>HelloSend02.html</h2> <hr /> </div> <div> <!-- 서블릿 주소 요청 --> <form action="helloreceive02" method="post"> first Name <input type="text" name="firstName" /><br> Last Name <input type="text" name="lastName" /><br><br> <button type="submit">submit</button> </form> </div> </body> </html>
- 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>WebApp00</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> <!-- <servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-pattern></url-pattern> </servlet-mapping> --> <servlet> <servlet-name>HelloReceive02</servlet-name> <servlet-class>com.svt.HelloReceive02</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloReceive02</servlet-name> <url-pattern>/helloreceive02</url-pattern> </servlet-mapping> </web-app>
- HelloReceive02.java
/* ======================= helloreceive02.java ======================== */ package com.svt; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloReceive02 extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } protected void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 서블릿 관련 코딩 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); String title ="결과 수신 페이지"; String subTitle = "(HelloReceive02.java)"; String docType = "<!DOCTYPE html>"; out.print(docType+"\n" + "<html>\n" + "<head><title>"+ title +"</title></head>\n" + "<body>\n" + "<div><h1>" + title + "</h1>\n" + "<h2>" + subTitle + "</h2>\n" + "<hr></div>\n" + "<div>\n" + "<ul>\n" + "<li><b>First Name : </b>" + request.getParameter("firstName") + "</li>\n" + "<li><b>Last Name : </b>" + request.getParameter("lastName") + "</li>\n" + "</ul>\n" + "</div>\n" + "</body>\n" + "</html>"); } }
[C]
WebApp28
(스프링 프레임 워크의 경우 패키지 경로는 기본 3 Level 이 권장사항)com.test.~ (패키지 생성) - 논리적인 경로 - HelloSend03.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HelloSend03.html</title> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> <div> <h1>최초 요청 페이지</h1> <h2>(HelloSend03.html)</h2> <hr /> </div> <div> <!-- 서블릿 주소 요청 --> <form action="helloreceive03"> First Name <input type="text" name="firstName" /><br> Last Name <input type="text" name="lastName" /><br><br> <button type="submit">submit</button> </form> </div> </body> </html>
- HelloSend03Controller.java
- 처음의 HelloSend03.html 페이지를 WEB-INF 에 두고 외부에서 연결할 수 있도록 하는 작업을 수행하는 컨트롤러
/*============================== HelloSend03Controller.java ============================== */ package com.test.ctrl; 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; public class HelloSend03Controller extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { process(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { process(request, response); } protected void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 서블릿 관련 코딩 //-- View 를 만날 수 있게만 해주면 됨 // View 객체에 대한 연결 RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/view/HelloSend03.html"); dispatcher.forward(request, response); } }
- HelloReceive03Controller.java
- 폼에서 일어난 submit 액션을 모델을 활용해 얻어낸 정보를 최종 결과 페이지로 이어지게 전달하는 컨트롤러
/*========================================================= HelloReceive03Controller.java - 폼에서 submit 액션이 일어났을 때 만나게 되는 컨트롤러 ========================================================== */ package com.test.ctrl; 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 com.test.logic.HelloReceive03Model; public class HelloReceive03Controller extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { process(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { process(request, response); } protected void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 서블릿 관련 코딩 request.setCharacterEncoding("UTF-8"); // Model 객체 연결 → 업무로직 수행, view 정보 얻어내기 HelloReceive03Model model = new HelloReceive03Model(); String view = model.actionLogic(request, response); // View 객체 연결 RequestDispatcher dispatcher = request.getRequestDispatcher(view); dispatcher.forward(request, response); } }
- HelloReceive03Model.java
- 업무의 로직을 수행하는 모델
- 다만, 여기서 반환하는 String 을 컨트롤러(서블릿)에서는 참고할 뿐 꼭 똑같이 진행되어야 할 필요는 없음
/*============================ HelloReceive03Model.java ============================*/ package com.test.logic; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloReceive03Model { public String actionLogic(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { String result = ""; request.setCharacterEncoding("UTF-8"); //-- 일반클래스에서는 실제 인코딩 방식을 지정하는 것은, //-- 해당 방식을 지원하지 않는 상태일 수 있기 때문에 //-- UnsupportedEncodingException 예외가 발생한다. // 데이터 수신 String firstName = request.getParameter("firstName"); String lastName = request.getParameter("lastName"); // 필요한, 추가적인 업무처리 가능 firstName = "☆ " + firstName + " ☆"; lastName = "★ " + lastName + " ★"; // 데이터 전달 request.setAttribute("firstName", firstName); request.setAttribute("lastName", lastName); // 상황에 따른 뷰 선택(지정) 가능 result = "WEB-INF/view/HelloReceive03.jsp"; return result; } }
- HelloReceive03.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>HelloReceive03.jsp</title> <link rel="stylesheet" type="text/css" href="<%=cp %>css/main.css"> </head> <body> <div> <h1>결과 수신 페이지</h1> <h2>(HelloReceive03.jsp)</h2> <hr /> </div> <div> <ul> <li><b>First Name : </b>${firstName }</li> <li><b>Last Name : </b>${lastName }</li> </ul> </div> </body> </html>
- 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>WebApp00</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> <!-- SendController --> <servlet> <servlet-name>SendController</servlet-name> <servlet-class>com.test.ctrl.HelloSend03Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>SendController</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <!-- ReceiveController --> <servlet> <servlet-name>ReceiveController</servlet-name> <servlet-class>com.test.ctrl.HelloReceive03Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>ReceiveController</servlet-name> <url-pattern>/helloreceive03</url-pattern> </servlet-mapping> </web-app>
728x90'SsY > Class' 카테고리의 다른 글
[jQuery] 002. jQuery 관찰 실습(2) (0) 2023.06.13 [jQuery] 001. jQuery 의 개요 (0) 2023.06.12 [Servlet] 004. MVC 패턴 (Model2) 개요 (0) 2023.06.07 [Servlet] 003. DBCP(DataBase Connection Pool) 개념 및 관찰 (0) 2023.06.07 [Servlet] 002. EL과 JSTL 개념 & JSTL Core 구문 관찰 (1) 2023.06.07