JBuilder开发Spring实例

2016-02-19 19:28 13 1 收藏

今天图老师小编给大家展示的是JBuilder开发Spring实例,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】

  

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  
  1.        下载spring包,网址如下

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

  解压后的目录中包含了dist、lib等子目录

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  2.        在JBuilder2005中增加spring库,选择菜单Tools-Configure-Libraries,在弹出的对话框中点击New按钮,输入spring库的名称:spring,点击Add按钮,将dist目录中的所有jar文件增加到spring库中

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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 {

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      /** Logger for this class and subclasses */

      static Logger logger = Logger.getLogger(SpringappController.class);

  
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  jakarta-commons
   
  import org.apache.commons.logging.Log;

  import org.apache.commons.logging.LogFactory;

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  public class SpringappController implements Controller {

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      /** Logger for this class and subclasses */

      protected final Log logger = LogFactory.getLog(getClass());

  
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  4.        新建Web模块,选菜单File-New,给Web模块取名为springapp

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

  %@ page contentType="text/html; charset=Big5" %

  html

  headtitleExample :: Spring Application/title/head

  body

  h1Hello - Spring Application/h1

  pGreetings./p

  /body

  /html
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  6.        新建类文件SpringappController.Java如下:

  package spring;

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  import org.springframework.web.servlet.mvc.Controller;

  import org.springframework.web.servlet.ModelAndView;

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  import javax.servlet.ServletException;

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  import java.io.IOException;

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  //import org.apache.commons.logging.Log;

  //import org.apache.commons.logging.LogFactory;

  import org.apache.log4j.Level;

  import org.apache.log4j.Logger;

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  public class SpringappController implements Controller {

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      /** Logger for this class and subclasses */

  //    protected final Log logger = LogFactory.getLog(getClass());

      static Logger logger = Logger.getLogger(SpringappController.class);

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)

              throws ServletException, IOException {

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

          logger.info("SpringappController - returning hello view");

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

          return new ModelAndView("hello.jsp");

      }

  }

  
  
    

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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-namespringapp/servlet-name
      servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class
      load-on-startup1/load-on-startup
    /servlet
   
    servlet-mapping
      servlet-namespringapp/servlet-name
      url-pattern*.htm/url-pattern
    /servlet-mapping
   
    welcome-file-list
      welcome-file
        index.jsp
      /welcome-file
    /welcome-file-list
   
  /web-app
   
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  8.        在web-inf目录中新建springapp-servlet.xml文件如下

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  ?xml version="1.0" encoding="UTF-8"?

  !DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  !--

    - Application context definition for "springapp" DispatcherServlet.

    --

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  beans

      bean id="springappController" class="spring.SpringappController"/

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

      bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"

          property name="mappings"

              props

                  prop key="/hello.htm"springappController/prop

              /props

          /property

      /bean

  /beans
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  log4j.rootCategory=INFO, stdout, logfile

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

  
  
    

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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'

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

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

  
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  这说明你已成功建立了基本的spring应用。

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  13.    增加对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" %       
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  利用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"/
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  利用JSTL的c:out标记,把从Model提取的,传递给View的当前日期和时间作为输出。

  springapp/war/WEB-INF/jsp/hello.jsp
   
  %@ include file="/WEB-INF/jsp/include.jsp" %
   
  html
  headtitleHello :: Spring Application/title/head
  body
  h1Hello - Spring Application/h1
  pGreetings, it is now c:out value="${now}"/
  /p
  /body
  /html
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  在SpringappController.java中增加包含了当前日期和时间的string作为Model

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  在上面的例子中,Controller指定了View的完全路径,使得Controller和View之间存在不必要的依靠。为了移出这种依靠,我们可以用类ResourceBundleViewResolver 和 a SimpleUrlHandlerMapping在属性文件中定义这种依靠,对于简单的情形,我们也可以利用InternalResourceViewResolver设置前缀和后缀,下面就用第二种方法。修改文件springapp-servlet.xml包含ViewResolver设置,我们还选择使用JstlView,这使得我们可以结合使用JSTL和message resource bundles,因此可以支持国际化。

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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"valueorg.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  
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  现在,我们就可以移出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);
      }
  }
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  这样修改后的例子应该仍能运行。

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  17.    修改View以便显示商业数据,增加对message bundle的支持

  springapp/war/WEB-INF/jsp/hello.jsp
   
  %@ include file="/WEB-INF/jsp/include.jsp" %
   
  html
  headtitlefmt:message key="title"//title/head
  body
  h1fmt:message key="heading"//h1
  pfmt:message key="greeting"/ c:out value="${model.now}"/
  /p
  h3Products/h3
  c:forEach items="${model.products}" var="prod"
    c:out value="${prod.description}"/ i$c:out value="${prod.price}"//ibrbr
  
   /c:forEach
  /body
  /html
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  18.    增加一些测试数据

  我们现在还不打算增加代码,从数据库装载商业对象。我们只springapp-servlet.xml中增加bean和messageSource设置,提供一些测试数据和对messages resource bundle的支持。

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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"valueLamp/value/property
          property name="price"value5.75/value/property
      /bean
         
      bean id="product2" class="bus.Product"
          property name="description"valueTable/value/property
          property name="price"value75.25/value/property
      /bean
   
      bean id="product3" class="bus.Product"
          property name="description"valueChair/value/property
          property name="price"value22.79/value/property
      /bean
   
      bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
  
           property name="basename"valuemessages/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"valueorg.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       
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  19.    增加message bundle

  springapp/war/WEB-INF/classes/messages.properties
   
  title=SpringApp
  heading=Hello :: SpringApp
  greeting=Greetings, it is now
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  20.    浏览改进后的结果http://localhost:8080/springapp

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  实现数据库持久层

  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语句并执行

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  CREATE TABLE products (

            id INTEGER NOT NULL PRIMARY KEY,

            description varchar(255),

            price decimal(15,2)

          );

  CREATE INDEX products_description ON products(description);

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  这样就会在JBuilder_Home/bin目录下创建一个目录db,存放了数据库test的数据

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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"valuetrue/value/property
          property name="commandName"valuepriceIncrease/value/property
          property name="commandClass"valuebus.PriceIncrease/value/property
          property name="validator"ref bean="priceIncreaseValidator"//property
          property name="formView"valuepriceincrease/value/property
          property name="successView"valuehello.htm/value/property
          property name="productManager"
              ref bean="prodMan"/
          /property
      /bean
   
      bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
        property name="driverClassName"valueorg.hsqldb.jdbcDriver/value/property
  
         property name="url"
          valuejdbc:hsqldb:/home/trisberg/workspace/springapp/db/test/value
        /property
        property name="username"valuesa/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"valueLamp/value/property
          property name="price"value5.75/value/property
      /bean
         
      bean id="product2" class="bus.Product"
          property name="description"valueTable/value/property
          property name="price"value75.25/value/property
      /bean
   
      bean id="product3" class="bus.Product"
          property name="description"valueChair/value/property
          property name="price"value22.79/value/property
  
       /bean
  --
   
      bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"
          property name="basename"valuemessages/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"
             valueorg.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
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  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"valueLamp/value/property
          property name="price"value5.75/value/property
      /bean
         
  
       bean id="product2" class="bus.Product"
          property name="description"valueTable/value/property
          property name="price"value75.25/value/property
      /bean
   
      bean id="product3" class="bus.Product"
          property name="description"valueChair/value/property
          property name="price"value22.79/value/property
      /bean
   
  /beans       
   

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  


来源:http://www.tulaoshi.com/n/20160219/1621081.html

延伸阅读
Web应用服务器会产生各种事件,如Web容器启动事件、session过期事件、请求到达事件等等。我们已经在《JBuilder 2005实战jsp开发》中阐述了这些事件的接口,事件处理方法使程序对Web应用服务器的控制能力大为提高。 !-- frame contents -- !-- /frame contents -- 在这一节里,我们监听Web容器启动关闭的事件,在事件发生时记录We...
多数IT 组织都必须解决三个主要问题:1.帮助组织减少成本 2.增加并且保持客户 3.加快业务效率。完成这些问题一般都需要实现对多个业务系统的数据和业务逻辑的无缝访问,也就是说,要实施系统集成工程,以便联结业务流程、实现数据的访问与共享。 JpetStore 4.0是ibatis的最新示例程序,基于Struts MVC框架(注:非传统Struts开发模式...
引言 在J2EE的整个发展历程中,现在正是一个非常时刻。从很多方面来说,J2EE都是一个伟大的成功:它成功地在从前没有标准的地方建立了标准;大大提升了企业级软件的开放程度,并且得到了整个行业和开发者的广泛认可。然而,J2EE在一些方面已经开始捉襟见肘。J2EE应用开发的成本通常很高。J2EE应用项目至少和从前的非J2EE项目一...
www.dukeJava.com 网络娇娃工作站 JBuilder 软件的目标定位是代码开发人员而不是高级设计人员,所以JBuilder中包含了大量的向导程序和其他针对中间层的快速开发工具。JBuilder性能稳定、使用方便,非凡适用于创建Java 组件。此外该软件还提供了很多jsp功能。 JBuilder本身通过内置的Java和Swing(Java的GUI...
个人考勤软件开发实例 作者:YangLanGuang 下载本文源代码 这个程序是一个个人考勤软件,它从系统时钟获取时间信息,只要上下班时按时在当日考勤栏内点击相应的栏目标题即可逐日记录下个人每天的工作时间,按月统计汇总,按年形成文件.可以随意查看过去的记录,也可把记录按月打印出来.在年汇总栏内...

经验教程

171

收藏

22
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部