Spring/스프링 프레임워크

Spring Framework 스프링 MVC 기능 (2)

샤리미 2024. 4. 5. 01:50
728x90
반응형

21.3 MultiActionController 이용해 스프링 MVC 실습하기 

SimpleUrlController 를 이용해 요청을 처리하려면 각 요청명에 대해 다시 스프링의 Controller 인터페이스를 구현한 각각의 컨트롤러 클래스를 만들어야만 한다. 하지만 MultiActionController를 이용하면 여러 요청명에 대해 한 개의 컨트롤러에 구현된 각 메서드로 처리할 수 있어 편히하다. 이번에는 MultiActionController 를 이용해 스프링 MVC를 실습해 봅시다! 

 

실습에 사용되는 스프링 클래스들

클래스 설명
MultiActionController URL 요청명으로 바로 컨트롤러를 지정해서 사용할 수 있다. 
PropertiesMethodNameResolver URL 요청명으로 컨트롤러의 설정 파일에서 미리 설정된 메서드를 바로 호출해서 사용할 수 있다. 
InternalResourceViewResolver JSP 나 HTML 파일과 같이 웹 애플리케이션의 내부 자원을 이용해 뷰를 생성하는 기능을 제공한다. 기본적으로 사용하는 View 클래스이며 prefix 와 suffix 프로퍼티를 이용해 경로를 지정할 수 있다. 

 

 

또한 MultiActionController 를 이용한 실습에 필요한 파일들은 아래 표와 같다. 

파일 설명
web.xml 브라우저에서 *.do로 요청하면 스프링의 DispatcherServlet 클래스가 요청을 받을 수 있게 서블릿 매핑을 설정한다. 
action-servlet.xml 스프링에서 필요한 빈들을 설정한다. 
UserController.java 매핑된 요청에 대해 컨트롤러의 기능을 수행한다. 
loginForm.jsp 로그인창이다. 
result.jsp 로그인 결과를 보여주는 JSP 이다. 

 

그럼 브라우저의 요청명에 따라 실행되는 컨트롤러와 메서드를 각각 지정해서 사용해 보자..!!

 

1. com.spring.ex02 패키지를 만들고 UserController 클래스를 추가한다. 그리고 loginForm.jsp, result.jsp 등 필요한 파일을 준비한다. 

 

2. action-servlet.xml 을 다음과 같이 수정한다. 브라우저에서 /test/*.do로 호출하면 userUrlMapping 빈을 이용해 userController 빈을 호출한다. 

userController 빈의 methodNameResolver 프로퍼티에는 userMethodNameResolver가 주입되어 있으므로 /test/login.do 로 요청하면 userController 빈의 login 메서드를 호출한다.  또한 userMethodNameResolver는 스프링의 PropertiesMethodNameResolver클래스를 이용해 요청명에 대해 호출할 메서드를 바로 지정한다. 

 

코드 21-5 pro21/WebContent/WEB-INF/action-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- 
	<bean id="simpleUrlController" class="com.spring.ex01.SimpleUrlController"/>
	<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/test/index.do">simpleUrlController</prop>
			</props>
		</property>
	</bean>
 -->
 
 
 
 <!--컨트롤러에서 ModelAndView 인자로 뷰이름이 반환되면 InternalResourceViewResolver의 프로퍼티 prefix 속성에 지정된 /test 폴더에서 ModelAndView 
 인자로 넘어온 뷰이름에 해당되는 JSP 를 선택해 DispatcherServlet으로 보낸다. -->
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
 	<property name="prefix" value="/test/"/>
 	<property name="suffix" value=".jsp"/>
 </bean>
 
 <bean id="userUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 	<property name="mapping">
 		<props>
 			<prop key="/test/*.do">userController</prop><!--URL 요청명이/test/*.do로 시작되면 userController를 요청한다. -->
 		</props>
 	</property>
 </bean>
 
 <bean id="userController" class="com.spring.ex02.UserController">
 	<property name="methodNameResolver"><!--methodNameResover 프로퍼티에 userMethodNameResolver를 주입해서 지정한 
    요청명에 대해 직접 메서드를 호출하게 한다. -->
 		<ref local="userMethodNameResolver"/>
 	</property>
 </bean>
 
 <!--PropertiesMethodNameResolver를 이용해 /test/login.do로 요청하면 userController의 login메서드를 호출한다. -->
 <bean id="userMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
 	<property name="mappings">
 		<props>
 			<prop key="/test/login.do">login</prop>
 		</props>
 	</property>
 </bean>
</beans>

 

3. UserController 클래스를 다음과 같이 작성한다. UserController 클래스는 MultiActgionController 를 상속받음으로써 지정한 요청명에 대해 바로 메서드를 호출할 수 있으며 ModelAndView 객체에 JSP 에 전달할 값을 바인딩할 수 있다. ModelAndView 객체를 이용하면 더이상 request 객체에 바인딩 해서 포워딩할 필요가 없고, 문자열 이외의 다른 객체들도 ModelAndView 객체에 바인딩할 수 있다. 따라서 ModelAndView의 setViewName() 메소드를 이용해 JSP 이름을 설정한 후 반환한다. 

 

코드 21-6 pro21/src/com/spring/ex02/UserController.java

package com.spring.ex02;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class UserController extends MultiActionController{ // 설정파일의 userMethodNameResolver 프로퍼티를 사용하려면 반드시 MultiActionController를 상속받아야 한다. 
	public ModelAndView login(HttpServletRequest request, HttpServletResponse response)throws Exception {
		String userID = "";
		String passwd = "";
		ModelAndView mav = new ModelAndView();
		request.setCharacterEncoding("utf-8");
		userID = request.getParameter("userID");
		passwd = request.getParameter("passwd");
		
		//ModelAndView에 로그인 정보를 바인딩한다.
		mav.addObject("userID" , userID);
		mav.addObject("passwd" , passwd);
		// ModelAndView 객체에 포워딩할 JSP 이름을 설정한다. 
		mav.setViewName("result");
		return mav
	}
}

 

4. loginForm.jsp 를 다음과 같이 작성한다. 로그인창에서 ID와 비밀번호를 입력하고 로그인을 클릭하면 /test/login.do로 DispatcherServlet에 요청한다. 

 

코드 21-7 pro21/WebContent/test/loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />
<%
   request.setCharacterEncoding("UTF-8");
%>     
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
<title>로그인창</title>
</head>

<body>
<form name="frmLogin" method="post"  action="${contextPath}/test/login.do"> <!-- /test/login.do 로 DispatcherServlet에 요청한다.  -->
   <table border="1"  width="80%" align="center" >
      <tr align="center">
         <td>아이디</td>
         <td>비밀번호</td>
      </tr>
      <tr align="center">
         <td>
	    <input type="text" name="userID" value="" size="20">
	 </td>
         <td>
	    <input type="password" name="passwd" value="" size="20">
	 </td>
      </tr>
      <tr align="center">
         <td colspan="2">
            <input type="submit" value="로그인" > 
            <input type="reset"  value="다시입력" > 
         </td>
      </tr>
   </table>
</form>
</body>
</html>

 

NOTE_ DispatcherServlet 클래스는 ModelAndView 에 설정된 뷰이름("result")과 action-servlet.xml 의 InternalResourceViewResolver에 설정한 뷰이름을 조합하여 /test 폴더에서 뷰이름에 해당하는 JSP('result.jsp')를 찾아 브라우저로 전송한다. 

 

5. result.jsp 를 다음과 같이 작성한다. 로그인창에서 전송된 ID 와 비밀번호를 컨트롤러에서 바인딩해 넘긴후 결과창에서 출력한다. 

 

코드 21-8 pro21/WebContent/test/result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
   request.setCharacterEncoding("UTF-8");
%> 
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>결과창</title>
</head>
<body>
<table border="1" width="50%" align="center" >

   <tr align="center">
      <td>아이디</td>
      <td>비밀번호</td>
   </tr>
   <tr align="center">
   	<!-- 컨트롤러에서 바인딩해 넘어온 회원정보를 출력한다.  -->
      <td>${userID}</td>
      <td>${passwd}</td>
   </tr>
</table>
</body>
</html>

 

 

6. http://localhost:8090/pro21/test/loginForm.jsp로 요청한다. 로그인창에서 ID 와 비밀번호를 입력하고 로그인을 클릭하면 /test/login.do로 요청하여 결과를 출력한다. 

 

로그인 화면
로그인 결과 출력

 

 

21.4 MultiActionController 이용해 회원 정보 표시하기

 

이번에는 로그인창이 아닌, 회원 정보 입력창에서 회원 정보를 입력한 후 요청 시 전송된 회원 정보를 표시해 봅시다..!!

 

 

1. 회원 정보를 표시하기 위해 action-servlet.xml 을 다음과 같이 수정한다. 회원 정보 요청 URL 에 대해 처리할 메서드를 추가한 후 /test/memberInfo.do 로 요청하면 요청명과 같은 memberInfo() 메서드를 호출한다. 

 

코드 21-9 pro21/WebContent/WEB-INF/action-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- 
	<bean id="simpleUrlController" class="com.spring.ex01.SimpleUrlController"/>
	<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/test/index.do">simpleUrlController</prop>
			</props>
		</property>
	</bean>
 -->
 
 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
 	<property name="prefix" value="/test/"/>
 	<property name="suffix" value=".jsp"/>
 </bean>
 
 <bean id="userUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 	<property name="mappings">
 		<props>
 			<prop key="/test/*.do">userController</prop>
 		</props>
 	</property>
 </bean>
 
 <bean id="userController" class="com.spring.ex02.UserController">
 	<property name="methodNameResolver">
 		<ref local="userMethodNameResolver"/>
 	</property>
 </bean>
 
 <bean id="userMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
 	<property name="mappings">
 		<props>
 			<prop key="/test/login.do">login</prop>
 			<prop key="/test/memberInfo.do">memberInfo</prop><!--URL 요청명과 메서드 이름을 동일하게 하여 회원 정보를 요청한다. -->
 		</props>
 	</property>
 </bean>
</beans>

 

 

2. UserController 클래스를 다음과 같이 수정한다. 회원 가입창에서 전송된 회원 정보를 가져온 후 ModelAndView를 이용해 회원 정보를 바인딩하여 memberInfo.jsp 로 전달하는 memberInfo() 메소드를 추가한다. 

 

코드 21-10 pro21/src/com/spring/ex02/UserController.java

package com.spring.ex02;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class UserController extends MultiActionController{ // 설정파일의 userMethodNameResolver 프로퍼티를 사용하려면 반드시 MultiActionController를 상속받아야 한다. 
/*	public ModelAndView login(HttpServletRequest request, HttpServletResponse response)throws Exception {
		String userID = "";
		String passwd = "";
		ModelAndView mav = new ModelAndView();
		request.setCharacterEncoding("utf-8");
		userID = request.getParameter("userID");
		passwd = request.getParameter("passwd");
		
		//ModelAndView에 로그인 정보를 바인딩한다.
		mav.addObject("userID" , userID);
		mav.addObject("passwd" , passwd);
		// ModelAndView 객체에 포워딩할 JSP 이름을 설정한다. 
		mav.setViewName("result");
		return mav
	} */
	
	public ModelAndView memberInfo(HttpServletRequest request, HttpServletResponse response)throws Exception{
		request.setCharacterEncoding("utf-8");
		ModelAndView mav = new ModelAndView();
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String name = request.getParameter("name");
		String email = request.getParameter("email");
		
		//회원 가입창에서 전송된 회원 정보를 addObject() 메서드를 이용해 ModelAndView 객체에 바인딩한다. 
		mav.addObject("id",id);
		mav.addObject("pwd", pwd);
		mav.addObject("name" , name);
		mav.addObject("email" , email);
		
		//memberInfo.jsp 로 포워딩한다. 
		mav.setViewName("memberInfo");
		return mav;
	}
	
}

 

3. 회원 가입창에서 회원 정보를 입력한 후 /test/memberInfo.do 로 요청하도록 action 속성을 설정한다. 

 

코드 21-11 pro21/WebContent/test/memberForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />
<%
   request.setCharacterEncoding("UTF-8");
%> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입창</title>
<style>
   .text_center{
     text-align:center;
   }
</style>
</head>
<body>
	<form method="post"   action="${contextPath}/test/memberInfo.do">
	<h1  class="text_center">회원 가입창</h1>
	<table  align="center">
	   <tr>
	      <td width="200"><p align="right">아이디</td>
	      <td width="400"><input type="text" name="id"></td>
	   </tr>
	   <tr>
	      <td width="200"><p align="right">비밀번호</td>
	      <td width="400"><input type="password" name="pwd"></td>
	    </tr>
	    <tr>
	       <td width="200"><p align="right">이름</td>
	       <td width="400"><p><input type="text" name="name"></td>
	    </tr>
	    <tr>
	       <td width="200"><p align="right">이메일</td>
	       <td width="400"><p><input type="text" name="email"></td>
	    </tr>
	    <tr>
	       <td width="200"><p>&nbsp;</p></td>
	       <td width="400"><input type="submit" value="가입하기"><input type="reset" value="다시입력"></td>
	    </tr>
	</table>
	</form>
</body>

 

4. memberInfo.jsp 를 다음과 같이 작성한다. UserController 의 memberInfo() 메서드에서 바인딩해 전달된 회원정보를 출력한다. 

 

코드 21-12 pro21/WebContent/test/memberInfo.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
<table border="1" align="center" width="100%" >
   <tr align=center   bgcolor="lightgreen">
      <td ><b>아이디</b></td>
      <td><b>비밀번호</b></td>
      <td><b>이름</b></td>
      <td><b>이메일</b></td>
   </tr>
   <tr align="center">
      <td>${id}</td>
      <td>${pwd}</td>
      <td>${name}</td>
      <td>${email}</td>
    </tr>
</table>
</body>
</html>

 

5. http://localhost:8090/pro21/test/memberForm.jsp 로 요청하여 새 회원 정보를 입력하고 [가입하기]를 클릭하면 /test/memberInfro.do 로 요청한 후 전송된 회원정보를 출력한다. 

 

아래는 앞서 MultiActionController를 이용한 실습 예제들의 요청명과 수행하는 메서드 이름의 관계를 나타낸것이다. MultiActionController와 PropertiesMethodNameResolver를 이용하면 요청명과 같은 이름으로 메서드를 설정할 수 있어 코드 가독성이 좋다. 

 

MultiActionController 와 PropertiesMethodNameResolver를 이용한 메서드 이름 설정 방법

요청명 호출 메서드 이름
/test/login.do login()
/test/memberInfo.do memberInfo()

 

21.5 요청명과 동일한 JSP 표시하기

앞서 우리는 실습 예제를 통해 요청명과 동일한 이름의 메서드를 호출했다. 이번에는 요청명과 동일한 JSP 를 출력해 봅시다..!!

 

1. 21.3 절에서 사용했던 UserController 클래스를 다음과 같이 수정한다. URL 요청명에서 .do를 제외한 요청명을 가져오는 메서드인 getViewName()을 추가한 후 request 객체를 getViewName() 인자로 전달하여 URL 요청명에서 .do를 제외한 뷰이름을 가져온다. (/test/login.do 인 경우 login을 가져온다.) 그리고 setViewName() 이용해 뷰이름으로 설정하면 /test.login.do 로 요청 시 폴더 이름을 포함한 JSP 이름은 /test/login.jsp 가 된다. (단, login.jsp는 새로 만들어야 한다. )

 

코드 21-13 pro21/src/com/spring/ex01/UserController.java

package com.spring.ex02;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class UserController extends MultiActionController{ // 설정파일의 userMethodNameResolver 프로퍼티를 사용하려면 반드시 MultiActionController를 상속받아야 한다. 

	public ModelAndView login(HttpServletRequest request, HttpServletResponse response)throws Exception {
		String userID = "";
		String passwd = "";
		String viewName = getViewName(request);//getViewName() 메서드를 호출해 요청명에서 확장명 .do를 제외한 뷰이름을 가져온다. 
		ModelAndView mav = new ModelAndView();
		request.setCharacterEncoding("utf-8");
		
		userID = request.getParameter("userID");
		passwd = request.getParameter("passwd");
		mav.addObject("userID" , userID);
		mav.addObject("passwd" , passwd);
		//mav.serViewName("result");
		mav.setViewName(viewName);//뷰이름을 지정한다. 
		System.out.println("ViewName:" +viewName);
		return mav;
	}
	//request 객체에서 URL 요청명을 가져와 .do를 제외한 요청명을 구한다. 
	private String getViewName(HttpServletRequest request) throws Exception{
		String contextPath = request.getContextPath();
		String uri = (String)request.getAttribute("javax.servlet.include.request_uri");
		if(uri == null || uri.trim().equals("")) {
			uri = request.getRequestURI();
		}
		
		int begin = 0;
		if(!((contextPath == null) ||("".equals(contextPath)))) {
			begin = contextPath.length();
		}
		
		int end;
		if(uri.indexOf(";")!=-1) {
			end = uri.indexOf(";");
		}else if(uri.indexOf("?")!=-1) {
			end = uri.indexOf("?");
		}else {
			end = uri.length();
		}
		
		String fileName = uri.substring(begin,end);
		if(fileName.indexOf(".")!=-1) {
			fileName = fileName.substring(0, fileName.lastIndexOf("."));
		}
		if(fileName.lastIndexOf("/")!=-1) {
			fileName = fileName.substring(fileName.lastIndexOf("/"),fileName.length());
		}
		
		return fileName;
	}
	/*	public ModelAndView login(HttpServletRequest request, HttpServletResponse response)throws Exception {
		String userID = "";
		String passwd = "";
		ModelAndView mav = new ModelAndView();
		request.setCharacterEncoding("utf-8");
		userID = request.getParameter("userID");
		passwd = request.getParameter("passwd");
		
		//ModelAndView에 로그인 정보를 바인딩한다.
		mav.addObject("userID" , userID);
		mav.addObject("passwd" , passwd);
		// ModelAndView 객체에 포워딩할 JSP 이름을 설정한다. 
		mav.setViewName("result");
		return mav
	} */
	
	
	/*public ModelAndView memberInfo(HttpServletRequest request, HttpServletResponse response)throws Exception{
		request.setCharacterEncoding("utf-8");
		ModelAndView mav = new ModelAndView();
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String name = request.getParameter("name");
		String email = request.getParameter("email");
		
		//회원 가입창에서 전송된 회원 정보를 addObject() 메서드를 이용해 ModelAndView 객체에 바인딩한다. 
		mav.addObject("id",id);
		mav.addObject("pwd", pwd);
		mav.addObject("name" , name);
		mav.addObject("email" , email);
		
		//memberInfo.jsp 로 포워딩한다. 
		mav.setViewName("memberInfo");
		return mav;
	} */
	
}

 

2. http://localhost:8090/pro21/test/loginForm.jsp 로 요청한 후 아이디와 비밀번호를 입력하고 [로그인]을 클릭한다. 그러면 /test/login.do로 요청하므로 lofin.jsp 에 결과를 출력한다. 

 

 

 

login.jsp 따로 추가 해야지 결과창이 뜬다. 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
   request.setCharacterEncoding("UTF-8");
%> 
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>결과창</title>
</head>
<body>
<table border="1" width="50%" align="center" >

   <tr align="center">
      <td>아이디</td>
      <td>비밀번호</td>
   </tr>
   <tr align="center">
      <td>${userID}</td>
      <td>${passwd}</td>
   </tr>
</table>
</body>
</html>

 

이번 실습에서는 보여줄 뷰이름을 개발자가 일일이 직접 코딩하지 않고 URL 요청명에서 뷰이름을 가져와 일정하게 연동시켰다. 실제 프로그래밍에서도 URL 요청명을 컨트롤러에서 호출되는 메서드 이름 그리고 보여주는 JSP 페이지 이름과 일치하도록 구현함으로써 가독성을 높일 수 있다. 또한 이렇게 하면 유지관리도 편하다. 

 

마지막으로 우리는 회원 가입창을 요청하고 브라우저 주소창에서 직접 memberForm.jsp로 입력했다. 이역시 요청명에서 뷰이름을 가져와서 보여줄 수 있다. 즉 ,/memberForm.do로 요청하면 컨트롤러에서 memberForm() 메서드를 호출해 부여주고, 회원 정보를 입력한 후 등록을 요청하면 회원 정보를 보여줄수 있다. 

728x90
반응형