Dev/Spring

Spring2.5 MVC - SimpleUrlHandlerMapping

창문닦이 2019. 4. 5. 18:00

 Command 클래스를 통해서 데이터를 넘기고 받는 예제

1. dto 생성 - ListCommand 클래스 :  스프링에서도 DTO를 부르는 이름이 있음 Command

2. view 생성 - write.jsp(데이터 입력 페이지), write_ok.jsp(데이터 출력 페이지)

3. 컨트롤러 생성 - ListFormController

1. Command클래스 생성(DTO에 해당. Model)

package com.test;

public class ListCommand {

public String userId;

private String userName;

 

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

}

2. view 생성 ① 입력 페이지 

<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<form action="<%=cp%>/test/write_ok.action" method="post">

아이디 : <input type="text" name="userId"/><br>

이름 : <input type="text" name="userName"/><br>

<input type="button" value="전송하기">

</form>

</body>

</html>

2. view 생성 ② 출력 페이지

<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

${message }

</body>

</html>

3. 컨트롤러 생성

package com.test;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.Controller;

public class ListFormContorller implements Controller{

@Override

public ModelAndView handleRequest(HttpServletRequest request,

HttpServletResponse response) throws Exception {

return new ModelAndView("test/write");

}

}

4. Dispatcher servlet.xml에 핸들러매핑 정보 등록 - SimpleUrlHandlerMapping

<!-- SimpleUrlHandlerMapping -->

<bean id="SimpleUrlMapping"

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="order" value="1"/>

<property name="alwaysUseFullPath" value="true"/>

<property name="mappings">

<props>

<prop key="/test/write.action">ListFormController</prop>

<prop key="/test/write_ok.action">ListController</prop>

</props>

</property>

</bean>

<bean name="ListFormController" class="com.test.ListFormController"/>

<bean name="ListController" class="com.test.ListController"/>

 

스프링은 Struts에 비해 Map에 해당되는 내용이 모두 디스패처서블릿에 들어감. 경량컨테이너라는 큰 장점.

① <property name="order" value="1"/>

스프링은 어노테이션을 일순위로 찾아감. 그런데 내가 정의한 핸들러내용을 1순위로 설정하고 싶으면 property로 order를 설정하면 된다. 스프링은 제일먼저 1순위로 설정된 내용을 읽고 설정된 내용에 해당된게 없으면 그 이후로 어노테이션을 찾아간다.

 

② <property name="alwaysUseFullPath" value="true"/>

http://localhost:8080/spring/board/list.action

여기에 value가 true라면 주소를 세분화 시킬수 있다. false가 오게되면 모든 액션명이 상이해야 오류가 나지않는다.

true : spring/board/list.action / false : spring/list.action

 

③ <property name="mappings">

주소에 따라 매핑되는 컨트롤러를 등록한다. 직접적으로 연결이 된다. 이 주소가 오면 어느 컨트롤러에 가라고 지정. 왔다갔다하는 개념이 아니라서 훨씬 단순하다.

 

 

5. 실행 페이지 ① 입력 페이지 

 5. 실행 페이지 ② 출력 페이지