* 본예제는 실무스트링2.5(삼양미디어)의 예제를 기초로 만들었습니다.
1. 필요한 라이브러리들(jar)
물론, 이 전에 Java와 서버(저같은 경우 톰캣) jar가 잡혀 있어야 합니다.
(모르시는 분들은 검색추천 ㅡ_ㅡ;; 그래도 모르겠다는 분들은 뎃글 주시면 상세하게 설명해서 다시 올리겠습니다.)
Spring.jar
commons-logging.jar
commons-dbcp-1.2.2.jar
commons-pool-1.3.jar
ibatis-2.3.4.726.jar |
2. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<filter><!-- 한글설정을 위한 부분 -->
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>EUC-KR</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<context-param><!-- log4j를 사용하려면 이런식으로.. -->
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/properties/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
</web-app> |
3. dispatcher-servlet.xml (서블릿설정)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- HandlerMapping -->
<bean id="handlerMapping1"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
<property name="order" value="2" />
<property name="alwaysUseFullPath" value="true" />
</bean>
<!-- Controller -->
<bean id="indexController" name="/index.html" class="controller.IndexController">
<property name="shopService" ref="shopService"/>
</bean>
<!-- Data Source -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close"
p:driverClassName="com.mysql.jdbc.Driver"
p:url="jdbc:mysql://localhost/spring?useUnicode=true&characterEncoding=utf-8"
p:username="root" p:password="1234" />
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="/WEB-INF/sqlMapConfig.xml" />
</bean>
<!-- shop -->
<bean id="shopService" class="logic.ShopImpl">
<property name="itemCatalog" ref="itemCatalog"/>
</bean>
<!-- itemCatalog -->
<bean id="itemCatalog" class="logic.ItemCatalogImpl">
<property name="itemDao" ref="itemDao"/>
</bean>
<!-- itemDao -->
<bean id="itemDao" class="dao.ItemDaoImpl" autowire="byName">
<property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
</beans> |
4. sqlMapConfig.xml
- namespace로 구문을 호출해 사용하기 위해서는 sqlMap 에 namespace 를 사용하겠다는 속성을 아래와 같이 정의해 주어야 합니다.
<?xml version="1.0" encoding="euc-kr"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings enhancementEnabled="true" useStatementNamespaces="true" />
<sqlMap resource="dao/item.xml" />
</sqlMapConfig> |
5. 모델객체 정의
- src/logic/item.java
- DB에서 가져올 데이터 속성들을 저장하게될 모델 객체.
package logic;
public class Item {
private Integer itemId;
private String itemName;
private Integer price;
private String description;
private String pictureUrl;
public Integer getItemId() {
return itemId;
}
public void setItemId(Integer itemId) {
this.itemId = itemId;
}
public String getItemName() {
return itemName;
//return UiUtils.toUnicode(itemName);
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public String getDescription() {
return description;
// return UiUtils.toUnicode(description);
}
public void setDescription(String description) {
this.description = description;
}
public String getPictureUrl() {
return pictureUrl;
}
public void setPictureUrl(String pictureUrl) {
this.pictureUrl = pictureUrl;
}
} |
6. src/dao/item.xml
- 각각 같은 색으로 표시한것은 서로 매핑이 이루어져야 하는 부분이므로, 일치해야합니다.
- property 속성들은 위의 5번에서 작성한 item클래스의 속성들값과 일치해야합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Item">
<typeAlias alias="Item" type="logic.Item" />
<resultMap id="itemList" class="Item">
<result property="itemId" column="itemid"/>
<result property="itemName" column="itemname"/>
<result property="price" column="price"/>
<result property="description" column="description"/>
<result property="pictureUrl" column="pictureurl"/>
</resultMap>
<select id="getItemList" resultMap="itemList">
SELECT itemid, itemname, price, description, pictureurl FROM item
</select>
</sqlMap> |
7. src/dao/itemDao.java
package dao;
import java.util.List;
import org.springframework.dao.DataAccessException;
import logic.Item;
public interface ItemDao {
List<Item> getTeamList() throws DataAccessException;
}
|
8. 데이터 쿼리해서 가져오기.
- src/dao/itemDaoImpl.java
- 쿼리결과 데이터는 리스트 형식으로 item객체에 주르륵~ 해서 담아옵니다.
package dao;
import java.util.List;
import logic.Item;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
public class ItemDaoImpl extends SqlMapClientDaoSupport implements ItemDao {
@SuppressWarnings("unchecked")
@Override
public List<Item> getTeamList() {
// TODO Auto-generated method stub
List<Item> itemList = getSqlMapClientTemplate().queryForList("Item.getItemList");
return itemList;
}
}
|
9. Controller
- src/controller/IndexController.java
- 아래와같이
itemList에 List형태로 받아와 뷰로 전달합니다.
package controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import logic.Item;
import logic.Shop;
public class IndexController implements Controller{
private Log log = LogFactory.getLog( IndexController.class.getSimpleName() );
private Shop shopService;
public void setShopService(Shop shopService) {
this.shopService = shopService;
}
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception{
List<Item> itemList = this.shopService.getItemList();
ModelAndView mav = new ModelAndView();
mav.setViewName("/WEB-INF/jsp/index.jsp");
mav.addObject(itemList);
log.info( "==== 데이타를 뷰로 전달완료===" );
return mav;
}
}
|
10. view작성
- /WEB_INF/jsp/index.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page session="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="java.util.*" %>
<html>
<head>
<title>상품 리스트 화면</title>
<link rel="stylesheet" type="text/css" href="../css/shopping-1.css">
</head>
<body>
<div align="center" class="body">
<h2>상품 리스트 화면</h2>
<table border="1" >
<tr class="header">
<th align="center" width="100">상품 ID</th>
<th align="center" width="320">상품 명</th>
<th align="center" width="100">가격</th>
</tr>
<c:forEach var="item" items="${itemList}">
<tr class="record">
<td align="center">
<c:out value="${item.itemId}" />
</td>
<td align="left">
<c:out value="${item.itemName}" />
</td>
<td align="right">
<c:out value="${item.price}" />원
</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
|
* 결과
=>
http://localhost:8080/shop/index.html