자 이제 드디어 .do 바꾸는것과 둥둥떠댕기는 bean객체에서 뭐좀 가져와보고, 프로퍼티 파일도 좀 건드려 봅시다. 또 경로 다쓰는것도 귀찮으니 고놈도 좀 바꾸고...
more.. less..
springTest/WEB-INF/springTest-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="springTestController" class="SpringTestController"/> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello.htm">springTestController</prop> <prop key="/hello.do">springTestController</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>/WEB-INF/jsp/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
</beans>
less.. 오렌지 색 보이시죠~ htm을 do로 바꾼부분입니다! ㅋㅋㅋ 이 이전에 web.xml에 보면
<servlet-mapping>
<servlet-name>springTest</servlet-name>
<url-pattern>*.htm</url-pattern>
<url-pattern>*.do</url-pattern> </servlet-mapping>
이부분이 있는데 오렌지 색 부분 추가 ㅋㅋ 이로서 .do진입 -_-;
위에 보면 갈색으로 bean 되어있는부분 보이시죠 이부분이 쓰잘데없는 경로를 짧게 줄여주는 부분입니다. 보면 /WEB-INF/jsp 하고 다음줄에 .jsp 라고 적혀있는걸 보니 대충 보이시죠?
한마디로 우린 경로를 다 안적고 이제부턴 걍 hello 이렇게만 적는다는겁니다. 어디서?
이담에서 -_-;
more.. less..
springTest/src/SpringTestController.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; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class SpringappController implements Controller { /** Logger for this class and subclasses */ protected final Log logger = LogFactory.getLog(getClass()); public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String now = (new java.util.Date()).toString(); logger.info("returning hello view with " + now); return new ModelAndView("hello", "now", now);
}
}
less.. 다른부분 하나도 안바뀌고 경로부분의 "hello"만 바뀌었죠? ㅎㅎ 이제부턴 다 적지말고 요놈만 적으면 댑니다 ㅎ
벌써 .do와 자질구레한 경로 다적는부분을 다했네요 이제 객체 가져와 쓰는법에 대해 이야기 해보죠
그러기 위해선 객체를 만들어야 할터
more.. less..
springTest/src/bus/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; } }
less..
more.. less..
springTest/src/bus/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; } }
less.. 암것도 없는 걍 객체 입니다. get과 set메소드만 가지고 있습니다.(이클립스에서 패키지 만드시면 알아서 폴더 만들어 줍니다~)
자 그럼 계속해서 컨트롤러 부분
more.. less..
springapp/src/web/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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import bus.Product;
import bus.ProductManager;
public class SpringappController implements Controller {
/** Logger for this class and subclasses */
protected final Log logger = LogFactory.getLog(getClass());
private ProductManager prodMan;
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String now = (new java.util.Date()).toString();
logger.info("returning hello view with " + 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;
}
}
less.. 갈색부분이 추가할 부분입니다. 대충 보니 get , set, Map형 myModel 에 put하고 있죠
저부분이 시간인 now와 우리가 가져다쓸 bean입니다.
이제 view부분인 jsp부분
more.. less..
springTest/WEB-INF/jsp/hello.jsp
<%@ include file="/WEB-INF/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>
less.. 뭐가 또 자질구레한게 많이 늘었죠? ㅎ fmt:message부분은 메시지번들 부분입니다. 프로퍼티에서 값을 가져오는거죠... key부분이 title뭐이런 항목을 찾아 그값을 가져오는것입니다.
<c:forEach 부분은 for문입니다.
변수 prod 가 model.products 값을 본다(?) 뭐 대충 조건문입니다.;
왜 for(int i=0;i >10;i++) 이렇게 하잖아요 i >10 같은 뭐 그런? 비유가 이상한가?; 뭐 어쨌든 그런부분이고...
안에 있는
<c:out value="${prod.description}"/> <i>$<c:out value="${prod.price} 이넘들은
위의 변수 prod에 description을 찾아오란 말이죠 -_-; 위의 Porduct.java에 보면 더블형으로 선언되어있고 get / set하는 부분이 있습니다.
아직 이해하기 힘드시죠? 히밤 왜 import나 bean 선언도 안하고 사용을 하는지 -_-;
안해도 댑니다; xml에 보면 다 선언되어있고 빈이 둥둥~ 떠댕긴다고 생각하면 대요 ㅋ
view 부분은 선언없이 떠댕기는 빈을 사용만하면 됩니다.(맞나?)
제 짧은 지식으론 이렇게 밖에 이해가 안되는군요;;
하여튼 어려운말로 spring이 직접 bean의 라이프 사이클을 관리한다니...
지가 알아서 해주겠죠모..;
이제 xml부분을 좀 건드려야겠죠? 어디 선언되어있는지 봅시다.
more.. less..
springTest/WEB-INF/springTest-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="springTestController" class="web.SpringTestController">
<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">springTestController</prop> <prop key="/hello.do">springTestController</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>/WEB-INF/jsp/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
</beans>
less.. 우와.. 많기도 하네요; 차근차근 짚어봅시다...;
<bean id="springTestController" class="web.SpringTestController" > <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> 다 마찬가지 입니다. id는 이름, class는 실제 class, name은 항목, value는 값
킁;; 대충 이해하세요..
마지막에 메시지소스 라는 이름가진 빈이 있죠... 이넘이 프로퍼티 파일을 정해주는 넘입니다. messages.properties 파일을 보죠 이 파일에 다넣을순 없으니 나중에
resource.messages 라고 해주시고 messages파일을 resource폴더에 넣으시면 거기있는 messages로 시작하는 모든놈을 다 읽습니다.
messages_ko , messages, messages_jp 뭐 이런식으로 댄놈들요
한마디로 없으면 단놈을 찾는단 소리.... 나중에 다국어 지원에도 나올 예정이죠....
아까 hello만 쓰면 된다는 부분이있었죠?
<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>/WEB-INF/jsp/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
바로 요놈때문에 그럴수있는겁니다~ ㅋ
흠 그럼 계속해서...
more.. less..
springTest/WEB-INF/classes/messages.properties
title=SpringApp heading=Hello :: SpringApp greeting=Greetings, it is now
less.. 이넘을 경로에 만들어 주시면 됩니다. 더 해보고싶으신 분들은 아까 위에 제가 말한것 처럼 수정해보세요 그리고 view부분에 <fmt: 부분으로 더 넣어보시면 됩니다.
만약에 ?? 뭐 이런식으로 나오면 찾지 못하는 거니 경로나 파일명 똑같이 해주셔야 합니다.
요놈이 나오면성공~
아까 깜박하고 대충 넘어가서 글을 안적었네요 forEach 부분 기억하시죠? products 부분 출력하는거요 암것도 없는데 걍 출력하잖아요~
그부분이 xml의 빈에 선언이 되어있습니다. value에 보면 저 값들이 다 들어있어요
항목도 다 구분되어있구요 ㅎ
화면 나오면성공! 아님 삽질 ㄱㄱ~
담편은 공부해서 -_-; 지금부터 공부.... ㅜ.ㅜ
댓글