2017년 1월 9일 월요일

[자바교육/스프링교육/스프링프레임워크/스프링부트학원추천_탑크리에듀]Hello Spring 확장하기2(비지니스로직,메시지리소스 번들, 빈 추가)!!

Hello Spring!! 확장II 
이번에는 이전의 예제 보다 더 변형을 시켜 보겠습니다… 

비즈니스 로직, 빈즈, 메시지 리소스 번들 등이 추가되었는데 큰 흐름을 이해한다는 관점에서 천천히 따라해 보시기 바랍니다. 이전 강좌 내용에 이어서 진행됩니다. 


1.        Conreoller에서 VIEW를 부를 때 뷰 이름에서 prefix and suffix를 제거하기 위해 다음과 같이 /WEB-INF/springapp-servlet.xml 파일을 수정 합니다. 즉 /jsp/hello.jsp 라고 부르는 것을 hello 만으로 부르겠다는 의미 입니다. 

[springapp-servlet.xml] 
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><!--  - Application context definition for "springapp" DispatcherServlet.  --> 
<beans>    
<bean id="springappController" class="SpringappController"/>    
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">        
        <property name="mappings">            
          <props>                
                <prop key="/hello.htm">springappController</prop>            
          </props>      
        </property>            
</bean> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
      <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property> 
      <property name="prefix"><value>/jsp/</value></property> 
      <property name="suffix"><value>.jsp</value></property> 
</bean> 

</beans> 



2.        이번엔 Controller 입니다. new ModelAndView 부분이 어떻게 변했는지 잘 보세요~~~ 

[SpringappController.java] 
import org.springframework.web.servlet.mvc.Controller; 
import org.springframework.web.servlet.ModelAndView; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 

public class SpringappController implements Controller {    
            
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)            
                    throws ServletException, IOException {        
                    String now = (new java.util.Date()).toString();  
                    
        //now 라는 이름으로 현재시간을 담고 있는 객체를 메모리에 저장 합니다. 
        //이것을 View 역할을 하는 JSP(hello.jsp)에서 사용 합니다. 
        //return new ModelAndView("/jsp/hello.jsp", "now", now);  이전 강좌에서는 이렇게… 했죠^^ 
        return new ModelAndView("hello", "now", now); 

    } 


3.        이번엔 간단한 비즈니스 로직을 추가해 볼까요… bus package에 만듭니다. 이 비즈니스 로직을 가지는 클래스는 서로 다른 Application Layer를 왔다 갔다 할 수 있으므로 Sericalizable을 구현했습니다. 

[Product.java] 
package bus; 
import java.io.Serializable; 

public class Product implements Serializable 
{    
        private String description;    
        private Double price; 
        
        public void setDescription(String s) {        
                description = s;    
        }    
        
        public String getDescription() {        
                return description;    
        }    
        
        public void setPrice(Double d) {        
                price = d;    
        }    
        
        public Double getPrice() {        
                return price;    
        } 


4.        위에서 만든 Product Class를 다루기 위한 ProductManager.java 파일을 만듭니다. Product list를 가지고 있는 자바 빈 입니다. bus package에 만드세요~ 

[ProductManager.java] 
package bus; 

import java.io.Serializable; 
import java.util.List; 

public class ProductManager implements Serializable { 
        private List products; 

        public void setProducts(List p) { 
                products = p; 
        } 

        public List getProducts() { 
                return products; 
        } 



5.        이번엔 ProductManager의 참조를 가지는 Controller를 바꾸어 보자구요,,, 그리고 뷰에 product 정보를 넘기기 위한 부분도 있으니 잘 보세요… getModelAndView 메소드는 date와 time 그리고 ProductManager의 참조를 리턴 합니다. 
(비즈니스 로직과 web 영역을 분리하기 위해 Controller를 web package를 새로 만들어 이동 시켰습니다.) 

[SpringappController.java] 
package web; 

import org.springframework.web.servlet.mvc.Controller; 
import org.springframework.web.servlet.ModelAndView; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.IOException; 
import java.util.Map; 
import java.util.HashMap; 

import bus.Product; 
import bus.ProductManager; 

public class SpringappController implements Controller { 

        private ProductManager prodMan; 

        public ModelAndView handleRequest(HttpServletRequest request, 
                        HttpServletResponse response) throws ServletException, IOException { 
                String now = (new java.util.Date()).toString(); 

                //now 라는 이름으로 현재시간을 담고 있는 객체를 메모리에 저장 합니다. 
                //이것을 View 역할을 하는 JSP(hello.jsp)에서 사용 합니다. 
                //return new ModelAndView("/jsp/hello.jsp", "now", now); 
                Map myModel = new HashMap(); 
                myModel.put("now", now); 
                myModel.put("products", getProductManager().getProducts()); 

                return new ModelAndView("hello", "model", myModel); 
        } 

        public void setProductManager(ProductManager pm) { 
                prodMan = pm; 
        } 

        public ProductManager getProductManager() { 
                return prodMan; 
        } 





6.        이번엔 VIEW 역할을 하는 JSP를 수정해 볼까요… 비즈니스 데이터와 메시지 번들 처리를 위한 부분이 추가 되는데 JSTL의 <c:forEach> 태그를 이용하여 product 정보를 Display 하며 title과 인사말을 JSTL의 <fmt:message> 태그를 이용하여 Display 했습니다. 

[hello.jsp] 
<%@ include file="/jsp/include.jsp"%> 
<html> 
<head> 
<title><fmt:message key="title" /></title> 
</head> 
<body> 
<h1><fmt:message key="heading" /></h1> 
<p><fmt:message key="greeting" /> <c:out value="${model.now}" /></p> 
<h3>Products</h3> 
<c:forEach items="${model.products}" var="prod"> 
        <c:out value="${prod.description}" /> 
        <i>$<c:out value="${prod.price}" /></i> 
        <br> 
        <br> 
</c:forEach> 
</body> 
</html> 


7.        /WEB-INF/springapp-servlet.xml 파일을 수정 합니다. 빈과 메시지 리소스 번들을 사용하기 위한 부분이 추가 되었습니다. 

[springapp-servlet.xml] 
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><!--  - Application context definition for "springapp" DispatcherServlet.  --><beans>    <bean id="springappController" class="web.SpringappController"> 
        <property name="productManager"> 
            <ref bean="prodMan"/> 
        </property> 
    </bean> 

    <bean id="prodMan" class="bus.ProductManager"> 
        <property name="products"> 
            <list> 
                <ref bean="product1"/> 
                <ref bean="product2"/> 
                <ref bean="product3"/> 
            </list> 
        </property> 
    </bean> 

    <bean id="product1" class="bus.Product"> 
        <property name="description"><value>Lamp</value></property> 
        <property name="price"><value>5.75</value></property> 
    </bean> 
        
    <bean id="product2" class="bus.Product"> 
        <property name="description"><value>Table</value></property> 
        <property name="price"><value>75.25</value></property> 
    </bean> 

    <bean id="product3" class="bus.Product"> 
        <property name="description"><value>Chair</value></property> 
        <property name="price"><value>22.79</value></property> 
    </bean> 

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
        <property name="basename"><value>messages</value></property> 
    </bean> 

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
        <property name="mappings"> 
            <props> 
                <prop key="/hello.htm">springappController</prop> 
            </props> 
        </property> 
    </bean> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
        <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property> 
        <property name="prefix"><value>/jsp/</value></property> 
        <property name="suffix"><value>.jsp</value></property> 
    </bean> 
</beans>        

8. 이번에는 메시지 처리를 위한 WEB-INF/classes/messages.properties 
파일을 작성 합니다. 

[messages.properties ] 
title=Spring Application 
heading=Hello  Spring Application 
greeting=Hello~ OracleJava 

8.        결과 확인 
http://localhost:8080/springapp/hello.htm 

댓글 없음:

댓글 쓰기