SPRING

- url 을 바꾸지않고 jsp 경로 변경하기
  - springapp-servlet.xml 파일에 아래와같이 추가하면 jsp 가 불러질때(컨트롤러에서) 앞과 뒤에 자동으로 붙어서 넘어가게 설정할수 있다.

    <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>

  - 이와같이 설정하면 Controller 에서도 아래와같이 변경해 줘야한다.


package cranix.framework;
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 SpringappController implements Controller {
 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
  // TODO Auto-generated method stub
  String now = (new java.util.Date()).toString();
  return new ModelAndView("hello","now",now);
 }
}

 - 원래는 hello.jsp 였으나 앞과 뒤에 /jsp/ , .jsp 가 각각 붙기때문에 그냥 hello 만 써주어도 된다.

  --> 처음에는 beans 에 선언되어있는 빈 들이 독립적으로 쓰이는 것인줄 알았으나 해보니 서로의 기능이 병합되어서 프로그램에 반영되는것을 알았다. 일종의 플러그인 같은걸로 이해하면 되겠다.
 


- 간단한 모델 사용하기
  - 테스트를위해 아래 두 클래스를 만든다.
    - Product.java

package cranix.framework;
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;
 }
}

    - ProductManager.java

package cranix.framework;
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;
 }
}

  - 컨트롤러를 아래와같이 변경한다.


package cranix.framework;
import java.util.HashMap;
import java.util.Map;
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 SpringappController implements Controller {
 private ProductManager pm =null;
 
 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
  // TODO Auto-generated method stub
  String now = (new java.util.Date()).toString();
  Map myModel = new HashMap();
  myModel.put("now", now);
  myModel.put("products", getProductManager().getProducts());
 
  return new ModelAndView("hello","model",myModel);

 }
 
 public void setProductManager(ProductManager pm) {
  this.pm = pm;
 }
 public ProductManager getProductManager() {
  return this.pm;
 }
}

    --> ModelAndView 클래스의 이름이 왜 모델과 뷰 인지 이제야 이해가 간다.


  - springapp-servlet.xml 파일을 아래와같이 변경한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd ">
<!--  - Application context definition for "springapp" DispatcherServlet.  -->
<beans>
    <bean id="springappController" class="cranix.framework.SpringappController">
     <property name="productManager">
      <ref bean="prodMan"/>
     </property>
    </bean>
    <bean id="prodMan" class="cranix.framework.ProductManager">
     <property name="products">
      <list>
       <ref bean="product1"/>
       <ref bean="product2"/>
       <ref bean="product3"/>
      </list>
     </property>
    </bean>
    <bean id="product1" class="cranix.framework.Product">
     <property name="description"><value>Lamp</value></property>
     <property name="price"><value>12.34</value></property>
    </bean>
    <bean id="product2" class="cranix.framework.Product">
     <property name="description"><value>테스트</value></property>
     <property name="price"><value>22.12</value></property>
    </bean>
    <bean id="product3" class="cranix.framework.Product">
     <property name="description"><value>ABC</value></property>
     <property name="price"><value>234.22</value></property>
    </bean>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">           
             <props>               
              <prop key="/hello.sdo">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>

  - 설정파일에서 직접 파라메터를 셋팅하는 화면이다.
     클래스의 set 메소드들을 property 태그로 셋팅할수 있다.


 참조 : http://www.springframework.org/docs/MVC-step-by-step/Spring-MVC-step-by-step-Part-2.html



2007/02/28 10:57 2007/02/28 10:57
TAG

trackback url :: http://cranix.net/tt/trackback/92

댓글을 달아 주세요

  1. 미라 2007/04/13 18:09

    우와 이제 spring 공부하시는거에요??
    전 struts부터..^^

    • 크래닉스 2007/04/14 09:57

      스트러츠는 예전에 했었는데.

      요센 스프링이 땡기더라고~ㅋㅋ

write a comment