狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

運用JBuilder 2005 開發Spring

運用JBuilder 2005 開發Spring

更新時間:2020-02-14 文章作者:未知 信息來源:網絡 閱讀次數:

1. 下載spring包,網址如下:

  http://www.springframework.org/download.html

  解壓后的目錄中包含了dist、lib等子目錄

  2. 在JBuilder2005中增加spring庫,選擇菜單Tools-Configure-Libraries,在彈出的對話框中點擊New按鈕,輸入spring庫的名稱:spring,點擊Add按鈕,將dist目錄中的所有jar文件增加到spring庫中

  3. 新建工程文件,選菜單File-New Project,給工程文件取名為myProject

  設置工程文件的屬性,選菜單Project-Project Properties,選擇Tomcat作為服務器,將spring庫加入Path/Required Libraries。因為例子中用到了log4j,將包含了log4j的庫加入Path/Required Libraries,注意到lib目錄下有兩個子目錄log4j和jakarta-commons,它們的用法是不同的,如下面的代碼片斷所示:

  log4j

  import org.apache.log4j.Level;
  import org.apache.log4j.Logger;

  public class SpringappController implements Controller {
  /** Logger for this class and subclasses */

  static Logger logger = Logger.getLogger(SpringappController.class);
  jakarta-commons
  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());

  4. 新建Web模塊,選菜單File-New,給Web模塊取名為springapp

  5. 新建hello.jsp文件如下:

  <%@ page contentType="text/html; charset=Big5" %>
  <html>
  <head><title>Example :: Spring Application</title></head>
  <body>
  <h1>Hello - Spring Application</h1>
  <p>Greetings.</p>
  </body>
  </html>

  6. 新建類文件SpringappController.java如下:

  package spring;

  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;

  import org.apache.log4j.Level;
  import org.apache.log4j.Logger;

  public class SpringappController implements Controller {
  /** Logger for this class and subclasses */
  // protected final Log logger = LogFactory.getLog(getClass());

  static Logger logger = Logger.getLogger(SpringappController.class);
  public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
  logger.info("SpringappController - returning hello view");
  return new ModelAndView("hello.jsp");
  }
  }

  7. 修改web.xml文件

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>

  <web-app>

  <servlet>
  <servlet-name>springapp</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
  <servlet-name>springapp</servlet-name>
  <url-pattern>*.htm</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
  <welcome-file>
   index.jsp
  </welcome-file>
  </welcome-file-list>

  </web-app>

  8. 在web-inf目錄中新建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="spring.SpringappController"/>
  <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
  <props>
   <prop key="/hello.htm">springappController</prop>
  </props>
  </property>
  </bean>

  </beans>

  9. 在web-inf目錄中新建log4j.properties文件如下:

  log4j.rootCategory=INFO, stdout, logfile

  log4j.appender.stdout=org.apache.log4j.ConsoleAppender

  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

  log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n

  log4j.appender.logfile=org.apache.log4j.RollingFileAppender

  log4j.appender.logfile.File=springapp.log

  log4j.appender.logfile.MaxFileSize=512KB

  # Keep three backup files

  log4j.appender.logfile.MaxBackupIndex=3

  log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

  #Pattern to output : date priority [category] - <message>line_separator

  log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n

   10. 設置web模塊springapp的屬性Content,加入文件log4j.properties,因為classes目錄是自動產生的,這一步是為了把文件log4j.properties加到classes目錄。

  11. 設置Run Configuration,選菜單Run-Configurations,新建一個Run Configuration,Type選Server,Launch URI設置為:/springapp/hello.htm,給它取名為hello

  12. 運行,你會在messages窗口中看到如下信息:

  資訊: Server startup in 9253 ms

  2004-11-05 15:05:00,585 INFO [spring.SpringappController] - <SpringappController - returning hello view>

  2004/11/5 下午 03:05:00 org.springframework.web.servlet.view.AbstractCachingViewResolver resolveViewName

  資訊: Cached view 'hello.jsp'

  在myProject/Tomcat/springapp.log文件中增加了一行如下所示:

  2004-11-05 15:11:32,348 INFO [spring.SpringappController] - <SpringappController - returning hello view>

  這說明你已成功建立了基本的spring應用。

  jstl的支持,設置工程文件的屬性,選菜單Project-Project Properties,將jstl庫加入Path/Required Libraries。

  14. 改進前面的例子,改進的文件如下:

  增加“header”文件include.jsp,這是一些jsp文件的公用部分,這樣可以使得開發和維護更容易。所有jsp文件放在web-inf/jsp目錄下,為的是只有Controller可以訪問View。

  springapp/war/WEB-INF/jsp/include.jsp


  <%@ page session="false"%>

  <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
  <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>


  利用JSTL,<c:redirect>將頁面重定向到Controller,這樣就建立了index.jsp和應用架構的聯系。

  springapp/war/index.jsp


  <%@ include file="/WEB-INF/jsp/include.jsp" %>

  <%-- Redirected because we can't set the welcome page to a virtual URL. --%>
  <c:redirect url="/hello.htm"/>


  利用JSTL的<c:out>標記,把從Model提取的,傳遞給View的當前日期和時間作為輸出。

  springapp/war/WEB-INF/jsp/hello.jsp


  <%@ include file="/WEB-INF/jsp/include.jsp" %>

  <html>
  <head><title>Hello :: Spring Application</title></head>
  <body>
  <h1>Hello - Spring Application</h1>
  <p>Greetings, it is now <c:out value="${now}"/>
  </p>
  </body>
  </html>


  在SpringappController.java中增加包含了當前日期和時間的string作為Model

  springapp/src/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;

  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("WEB-INF/jsp/hello.jsp", "now", now);
  }
  }


  15. 瀏覽改進后的結果http://localhost:8080/springapp,首先訪問index.jsp,然后重定向到hello.htm,接著把控制交給Controller,Controller把日期和時間傳送給View。

  只能在瀏覽器這樣測試。在JBuilder2005中設置Run Configuration不能訪問http://localhost:8080/springapp,但可以訪問http://localhost:8080/springapp/index.jsp

  在上面的例子中,Controller指定了View的完全路徑,使得Controller和View之間存在不必要的依賴。為了移出這種依賴,我們可以用類ResourceBundleViewResolver 和 a SimpleUrlHandlerMapping在屬性文件中定義這種依賴,對于簡單的情形,我們也可以利用InternalResourceViewResolver設置前綴和后綴,下面就用第二種方法。修改文件springapp-servlet.xml包含ViewResolver設置,我們還選擇使用JstlView,這使得我們可以結合使用JSTL和message resource bundles,因此可以支持國際化。

  springapp/war/WEB-INF/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>/WEB-INF/jsp/</value></property>
  <property name="suffix"><value>.jsp</value></property>
  </bean>
  </beans>


  現在,我們就可以移出Controller中View名稱的前綴和后綴了。


  springapp/src/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;

  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);
  }
  }


  這樣修改后的例子應該仍能運行。
   16. 增加商業邏輯類

  為了分開Web邏輯和商業邏輯,我們建立兩個不同的包,web和bus

  springapp/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;
  }

  }

  springapp/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;
  }

  }

  修改SpringappController.java

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

  17. 修改View以便顯示商業數據,增加對message bundle的支持

  springapp/war/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>

  18. 增加一些測試數據

  我們現在還不打算增加代碼,從數據庫裝載商業對象。我們只springapp-servlet.xml中增加bean和messageSource設置,提供一些測試數據和對messages resource bundle的支持。

  springapp/war/WEB-INF/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>/WEB-INF/jsp/</value></property>
  <property name="suffix"><value>.jsp</value></property>
  </bean>
  </beans>

   19. 增加message bundle

  springapp/war/WEB-INF/classes/messages.properties

  title=SpringApp
  heading=Hello :: SpringApp
  greeting=Greetings, it is now

  20. 瀏覽改進后的結果http://localhost:8080/springapp

  實現數據庫持久層

  21. 設置HSQL數據庫,在JBuilder2005中增加HSQL庫,選擇菜單Tools-Configure-Libraries,在彈出的對話框中點擊New按鈕,輸入HSQL庫的名稱:HSQL,點擊Add按鈕,將lib/hsqldb目錄下的文件hsqldb.jar增加到HSQL庫中。

  選擇菜單Enterprise-Enterprise Setup,在彈出的對話框中選擇Database Drivers,按Add按鈕增加HSQL庫。

  選擇菜單Tools-Database Pilot,然后選擇菜單Files-New輸入Driver:org.hsqldb.jdbcDriver,URL:jdbc:hsqldb:db/test, 雙擊hsqldb:db/test,輸入UserName:sa,不必輸入Passsword。輸入如下的SQL語句并執行

  CREATE TABLE products (

  id INTEGER NOT NULL PRIMARY KEY,

  description varchar(255),

  price decimal(15,2)

  );

  CREATE INDEX products_description ON products(description);

  INSERT INTO products (id, description, price) values(1, 'Lamp', 5.78);

  INSERT INTO products (id, description, price) values(2, 'Table', 75.29);

  INSERT INTO products (id, description, price) values(3, 'Chair', 22.81);

  這樣就會在JBuilder_Home/bin目錄下創建一個目錄db,存放了數據庫test的數據

  22. 創建JDBC DAO (Data Access Object)實現

  springapp/src/db/ProductManagerDao.java

  package db;

  import bus.Product;
  import java.util.List;

  public interface ProductManagerDao {

  public List getProductList();

  public void increasePrice(Product prod, int pct);

  }

  springapp/src/db/ProductManagerDaoJdbc.java

  package db;

  import bus.Product;
  import java.util.List;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.sql.Types;
  import javax.sql.DataSource;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.springframework.jdbc.object.MappingSqlQuery;
  import org.springframework.jdbc.object.SqlUpdate;
  import org.springframework.jdbc.core.SqlParameter;

  public class ProductManagerDaoJdbc implements ProductManagerDao {

  /** Logger for this class and subclasses */
  protected final Log logger = LogFactory.getLog(getClass());

  private DataSource ds;

  public List getProductList() {
  logger.info("Getting products!");
  ProductQuery pq = new ProductQuery(ds);
  return pq.execute();
  }

  public void increasePrice(Product prod, int pct) {
  logger.info("Increasing price by " + pct + "%");
  SqlUpdate su = new SqlUpdate(ds, "update products set price = price * (100 + ?) / 100 where id = ?");
  su.declareParameter(new SqlParameter("increase", Types.INTEGER));
  su.declareParameter(new SqlParameter("ID", Types.INTEGER));
  su.compile();
  Object[] oa = new Object[2];
  oa[0] = new Integer(pct);
  oa[1] = new Integer(prod.getId());
  int count = su.update(oa);
  logger.info("Rows affected: " + count);
  }

  public void setDataSource(DataSource ds) {
  this.ds = ds;
  }

  class ProductQuery extends MappingSqlQuery {
  ProductQuery(DataSource ds) {
   super(ds, "SELECT id, description, price from products");
   compile();
  }

  protected Object mapRow(ResultSet rs, int rowNum) throws SQLException {
   Product prod = new Product();
   prod.setId(rs.getInt("id"));
   prod.setDescription(rs.getString("description"));
   prod.setPrice(new Double(rs.getDouble("price")));
   return prod;
  }
  }
  }

  springapp/src/bus/Product.java

  package bus;

  import java.io.Serializable;

  public class Product implements Serializable {

  private int id;
  private String description;
  private Double price;

  public void setId(int i) {
  id = i;
  }

  public int getId() {
  return id;
  }

  public void setDescription(String s) {
  description = s;
  }

  public String getDescription() {
  return description;
  }

  public void setPrice(Double d) {
  price = d;
  }

  public Double getPrice() {
  return price;
  }

  }

  springapp/src/test/TestProductManagerDaoJdbc.java

  package tests;

  import java.util.List;
  import java.util.ArrayList;
  import junit.framework.TestCase;
  import org.springframework.jdbc.datasource.DriverManagerDataSource;
  import db.ProductManagerDaoJdbc;
  import bus.Product;

  public class TestProductManagerDaoJdbc extends TestCase {

  private ProductManagerDaoJdbc pmdao;

  public void setUp() {
  pmdao = new ProductManagerDaoJdbc();
  DriverManagerDataSource ds = new DriverManagerDataSource();
  ds.setDriverClassName("org.hsqldb.jdbcDriver");
  ds.setUrl("jdbc:hsqldb:db/test");
  ds.setUsername("sa");
  ds.setPassword("");
  pmdao.setDataSource(ds);
  }

  public void testGetProductList() {
  List l = pmdao.getProductList();
  Product p1 = (Product) l.get(0);
  assertEquals("Lamp", p1.getDescription());
  Product p2 = (Product) l.get(1);
  assertEquals("Table", p2.getDescription());
  }

  public void testIncreasePrice() {
  List l1 = pmdao.getProductList();
  Product p1 = (Product) l1.get(0);
  assertEquals(new Double("5.78"), p1.getPrice());
  pmdao.increasePrice(p1, 10);
  List l2 = pmdao.getProductList();
  Product p2 = (Product) l2.get(0);
  assertEquals(new Double("6.36"), p2.getPrice());
  }

  }

  23. 修改Web應用使其使用數據庫持久層

  springapp/src/bus/ProductManager.java

  package bus;

  import java.io.Serializable;
  import java.util.ListIterator;
  import java.util.List;
  import db.ProductManagerDao;

  public class ProductManager implements Serializable {

  private ProductManagerDao pmd;
  private List products;

  public void setProductManagerDao(ProductManagerDao pmd) {
  this.pmd = pmd;
  }

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

  public List getProducts() {
  products = pmd.getProductList();
  return products;
  }

  public void increasePrice(int pct) {
  ListIterator li = products.listIterator();
  while (li.hasNext()) {
  Product p = (Product) li.next();
  /*
  double newPrice = p.getPrice().doubleValue() * (100 + pct)/100;
  p.setPrice(new Double(newPrice));
  */
  pmd.increasePrice(p, pct);
  }

  }

  }


  springapp/war/WEB-INF/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>

  <!-- Controller for the initial "Hello" page -->
  <bean id="springappController" class="web.SpringappController">
  <property name="productManager">
  <ref bean="prodMan"/>
  </property>
  </bean>

  <!-- Validator and Form Controller for the "Price Increase" page -->
  <bean id="priceIncreaseValidator" class="bus.PriceIncreaseValidator"/>
  <bean id="priceIncreaseForm" class="web.PriceIncreaseFormController">
  <property name="sessionForm"><value>true</value></property>
  <property name="commandName"><value>priceIncrease</value></property>
  <property name="commandClass"><value>bus.PriceIncrease</value></property>
  <property name="validator"><ref bean="priceIncreaseValidator"/></property>
  <property name="formView"><value>priceincrease</value></property>
  <property name="successView"><value>hello.htm</value></property>
  <property name="productManager">
  <ref bean="prodMan"/>
  </property>
  </bean>

  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName"><value>org.hsqldb.jdbcDriver</value></property>
  <property name="url">
  <value>jdbc:hsqldb:/home/trisberg/workspace/springapp/db/test</value>
  </property>
  <property name="username"><value>sa</value></property>
  <property name="password"><value></value></property>
  </bean>

  <bean id="prodManDao" class="db.ProductManagerDaoJdbc">
  <property name="dataSource">
  <ref bean="dataSource"/>
  </property>
  </bean>

  <bean id="prodMan" class="bus.ProductManager">
  <property name="productManagerDao">
  <ref bean="prodManDao"/>
  </property>
  <!--
  <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>
  <prop key="/priceincrease.htm">priceIncreaseForm</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>

  springapp/src/tests/MockProductManagerDaoImpl.java

  package tests;

  import bus.Product;
  import java.util.List;
  import db.ProductManagerDao;
  import bus.Product;

  public class MockProductManagerDaoImpl implements ProductManagerDao {

  private List products;

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

  public List getProductList() {
  return products;
  }

  public void increasePrice(Product prod, int pct) {
  double newPrice = prod.getPrice().doubleValue() * (100 + pct)/100;
  prod.setPrice(new Double(newPrice));
  }

  }

  springapp/src/tests/WEB-INF/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="prodManDao" class="tests.MockProductManagerDaoImpl">
  <property name="products">
  <list>
  <ref bean="product1"/>
  <ref bean="product2"/>
  <ref bean="product3"/>
  </list>
  </property>
  </bean>

  <bean id="prodMan" class="bus.ProductManager">
  <property name="productManagerDao">
  <ref bean="prodManDao"/>
  </property>
  <!--
  <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>

  </beans>

  springapp/src/tests/TestProductManager .java

  package tests;

  import java.util.List;
  import java.util.ArrayList;
  import junit.framework.TestCase;
  import db.ProductManagerDao;
  import bus.ProductManager;
  import bus.Product;

  public class TestProductManager extends TestCase {

  private ProductManager pm;

  public void setUp() {
  pm = new ProductManager();
  Product p = new Product();
  p.setDescription("Chair");
  p.setPrice(new Double("20.50"));
  ArrayList al = new ArrayList();
  al.add(p);
  p = new Product();
  p.setDescription("Table");
  p.setPrice(new Double("150.10"));
  al.add(p);
  /*
  pm.setProducts(al);
  */
  MockProductManagerDaoImpl pmdao = new MockProductManagerDaoImpl();
  pmdao.setProducts(al);
  pm.setProductManagerDao(pmdao);
  pm.getProducts();
  }

  public void testGetProducs() {
  List l = pm.getProducts();
  Product p1 = (Product) l.get(0);
  assertEquals("Chair", p1.getDescription());
  Product p2 = (Product) l.get(1);
  assertEquals("Table", p2.getDescription());
  }

  public void testIncreasePrice() {
  pm.increasePrice(10);
  List l = pm.getProducts();
  Product p = (Product) l.get(0);
  assertEquals(new Double("22.55"), p.getPrice());
  p = (Product) l.get(1);
  assertEquals(new Double("165.11"), p.getPrice());
  }

  }

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
在线观看成人免费视频| 亚洲天堂成人网| 欧美精品乱码久久久久久按摩 | 在线综合视频播放| 精品视频免费看| 欧美亚洲图片小说| 欧美日韩一区二区三区视频 | 亚洲欧美视频在线观看视频| 国产精品久久久久影视| 亚洲国产精品精华液2区45| 国产喷白浆一区二区三区| 久久麻豆一区二区| 国产精品三级av| 日韩理论片中文av| 亚洲va天堂va国产va久| 日韩成人一区二区| 激情成人综合网| 国产91精品久久久久久久网曝门| 从欧美一区二区三区| 97精品久久久午夜一区二区三区| 91在线播放网址| 在线观看的日韩av| 翔田千里一区二区| 欧美日韩激情在线| 亚洲精品一区二区三区四区高清| 久久免费国产精品| 亚洲精品国产无套在线观| 五月综合激情网| 国产伦精品一区二区三区免费| 成人久久18免费网站麻豆| 欧美日韩免费高清| 在线亚洲激情| 欧美年轻男男videosbes| 精品国产乱码久久久久久久久 | 欧美v日韩v国产v| 中文字幕一区二区视频| 日韩在线一二三区| 国产成人午夜99999| 黑人中文字幕一区二区三区 | 天堂午夜影视日韩欧美一区二区| 久久99精品久久久久| 成人一区二区三区| 韩国av一区| 亚洲精品免费视频| 石原莉奈在线亚洲三区| 懂色av一区二区夜夜嗨| 亚洲午夜在线| 欧美日韩亚洲综合在线| 国产精品久久久久久久第一福利| 日韩av一区二区三区| 93久久精品日日躁夜夜躁欧美| 亚洲一区二区伦理| 精品国产精品一区二区夜夜嗨| 一区二区三区免费在线观看| 国产综合色在线| 99视频日韩| 精品久久人人做人人爰| 日韩电影在线免费观看| 欧美 日韩 国产 一区| 在线观看欧美精品| 中文字幕中文字幕一区| 国产福利精品一区| 亚洲一卡久久| 国产日韩欧美亚洲| 国产自产2019最新不卡| 一区二区免费在线视频| 久久久久久久久蜜桃| 蓝色福利精品导航| 国产精品永久入口久久久| 久久久综合视频| 精品影院一区二区久久久| 国产欧美日韩综合一区在线观看 | 国产69精品一区二区亚洲孕妇| 午夜一区二区三视频在线观看| 久久―日本道色综合久久| 久久97超碰色| 日韩欧美一区在线| 日本在线播放一区二区三区| 亚洲手机视频| 国产网红主播福利一区二区| 国产九色精品成人porny| 久久久噜噜噜久久狠狠50岁| 亚洲日本va午夜在线影院| 福利一区福利二区| 欧美精品tushy高清| 日本在线不卡视频一二三区| 国产精品色网| 亚洲色图制服诱惑| 国产一区二区中文| 久久久九九九九| 成人成人成人在线视频| 欧美一区二区在线免费播放| 日韩国产欧美视频| 久久久久久久欧美精品| 亚洲一区二区三区三| 亚洲国产精品综合| 自拍偷拍亚洲欧美日韩| 好看的亚洲午夜视频在线| 中文字幕高清一区| 国产精品豆花视频| 国产精品第一页第二页第三页| 91农村精品一区二区在线| 久久婷婷一区二区三区| 成人av第一页| 久久久久亚洲综合| 欧美一区国产一区| 国产精品久久久久三级| 欧美色123| 亚洲丝袜另类动漫二区| 伊人蜜桃色噜噜激情综合| 亚洲青青青在线视频| 一区二区三区|亚洲午夜| 夜夜嗨av一区二区三区中文字幕| 日韩视频在线观看国产| 亚洲成在人线免费| 色婷婷国产精品| 精品亚洲免费视频| 精品少妇一区二区三区在线播放| jlzzjlzz欧美大全| 国产精品美女久久福利网站| 亚洲日本视频| 丝袜亚洲另类欧美综合| 欧美日韩国产高清一区二区 | 黄色国产精品| 亚洲第一综合色| 欧美日韩一级大片网址| 成人精品免费视频| 中文乱码免费一区二区| 国产欧美精品久久| 久久精品国产色蜜蜜麻豆| 欧美成人女星排行榜| 欧美精品播放| 婷婷丁香激情综合| 欧美一区二区免费视频| 欧美午夜欧美| 日本不卡在线视频| 精品国精品国产| 亚洲日本视频| 国产一区二区在线视频| 日本一区二区三区视频视频| 鲁大师影院一区二区三区| 激情六月婷婷久久| 国产精品国产三级国产aⅴ中文 | 欧美日本一区二区三区| 91视频精品在这里| 亚洲va韩国va欧美va精品| 日韩片之四级片| 在线综合视频| 成人午夜视频在线| 洋洋av久久久久久久一区| 制服丝袜亚洲网站| 99国产一区| 国产69精品一区二区亚洲孕妇| 亚洲免费视频成人| 91精品国产色综合久久| 99视频在线精品国自产拍免费观看| 久久99精品久久久久婷婷| 中文av一区二区| 欧美日韩成人高清| 亚洲精品欧洲| 不卡的av网站| 免费观看久久久4p| 国产精品青草综合久久久久99| 色老汉av一区二区三区| 国产精品chinese| 久久99精品国产91久久来源| 国产黄色精品视频| 亚洲人成亚洲人成在线观看图片| 7777精品伊人久久久大香线蕉最新版 | 日韩专区中文字幕一区二区| 欧美激情在线观看视频免费| 欧美日本一区二区三区| 国产精品手机视频| 欧美日韩一区二区视频在线| 国产精品一区三区| 首页综合国产亚洲丝袜| 国产精品日日摸夜夜摸av| 91精品国产一区二区人妖| 久久精品一区二区国产| 亚洲小说欧美另类社区| 99久久精品国产观看| 国产一区欧美二区| 日本少妇一区二区| 亚洲一区二区在线观看视频| 亚洲国产成人一区二区三区| 日韩精品一区二区三区中文不卡| 一本一道波多野结衣一区二区| 亚洲国产专区校园欧美| 欧美一区二区三区在线播放| 成人免费精品视频| 国产精品白丝av| 韩国视频一区二区| 免费一级欧美片在线观看| 亚洲一区精品在线| 亚洲欧美日韩在线| 亚洲色图欧美激情| 成人欧美一区二区三区1314| 欧美高清在线视频| 中文久久乱码一区二区| 国产精品久久久久永久免费观看|