Compass技术文档

目录

一、原理描述:...

二、术语解释:...

三、下载地址:...

四、使用流程:  …………………………………………………………………………………….

五、基于SSHcompass的实例: …………………………………………………………………

 


 

一、原理描述:

       Compass是一流的开放源码JAVA搜索引擎框架,对于你的应用修饰,搜索引擎语义更具有能力。依靠顶级的Lucene搜索引擎,Compass 结合了,像 Hibernate Spring的流行的框架,为你的应用提供了从数据模型和数据源同步改变的搜索力.并且添加了2方面的特征,事物管理和快速更新优化.
    Compass
的目标是:把java应用简单集成到搜索引擎中.编码更少,查找数据更便捷 .

二、术语解释:

名称

描述

Lucene

  Apache Lucene是一个基于Java全文搜索引擎,利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高了,Lucene提供一组解读,过滤,分析文件,编排和使用索引的提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用都是可以随时应自己需要自订其功能。开发者可以把Lucene看成一个支持全文索引的数据库系统的.

Compass

我对Compass的定义是面向域模型的搜索框架, 面向域模型意味着必须支持对对象的搜索,对持久化对象的搜索,和对XML文档对象的搜索,同时还必须支持事务的处理,包括对创建,更新,保存,删除进行事务级别的处理. 所以, Compass是基于Lucene, 高于Lucene. 有个形象的比喻. Compass对于Lucene就像Hibernate对于JDBC,太有才了!Compass的开发路数完全参照Hibernate.

OSEM

对象搜索引擎影射(Object Search Engine Mapping),通过xml配置文件,提供了POJO's (Plain Old Java Objects)到搜索引擎.

三、下载地址:

软件名称

下载地址

软件描述

Compass框架、jar

http://www.compassframework.org/

基于Java的搜索引擎

四、使用流程:

网络机器人程序

www文档

 

网络机器人程序

 

建立索引

从数据库中搜索信息

Tomcat服务器

JSP

索引数据库

浏览器

浏览器

五、基于SSHcompass的实例:

      step1
ssh2的基础上开发  加入jar包(compass-2.1.2.jar compass-index-patch.jar
lucene-analyzers-2.4.0.jar lucene-core-2.4.0.jar lucene-highlighter-2.4.0.jar  paoding-analysis.jar

step2
先来看下实体bean的编写

Java代码

  1. package com.v512.example.model;   
  2. import org.compass.annotations.*;   
  3. /**  
  4.  * Product entity.  
  5.  *   
  6.  * @author MyEclipse Persistence Tools  
  7.  */  
  8. @Searchable  
  9. public class Product implements java.io.Serializable {   
  10.   
  11.     // Fields   
  12.   
  13.     @SearchableId  
  14.     private String id;   
  15.     @SearchableProperty(name="name",index=Index.ANALYZED,store=Store.YES)   
  16.     private String name;   
  17.     @SearchableProperty(name="price",index=Index.NOT_ANALYZED,store=Store.YES)   
  18.     private Double price;   
  19.     @SearchableProperty(name="brand",index=Index.ANALYZED,store=Store.YES)   
  20.     private String brand;   
  21.     @SearchableProperty(name="description",index=Index.ANALYZED,store=Store.YES)   
  22.     private String description;   
  23.   
  24.     // Constructors   
  25.   
  26.     /** default constructor */  
  27.     public Product() {   
  28.     }   
  29.   
  30.     /** full constructor */  
  31.     public Product(String name, Double price, String brand, String description) {   
  32.         this.name = name;   
  33.         this.price = price;   
  34.         this.brand = brand;   
  35.         this.description = description;   
  36.     }   
  37.   
  38.     // Property accessors   
  39.   
  40.     public String getId() {   
  41.         return this.id;   
  42.     }   
  43.   
  44.     public void setId(String id) {   
  45.         this.id = id;   
  46.     }   
  47.   
  48.     public String getName() {   
  49.         return this.name;   
  50.     }   
  51.   
  52.     public void setName(String name) {   
  53.         this.name = name;   
  54.     }   
  55.   
  56.     public Double getPrice() {   
  57.         return this.price;   
  58.     }   
  59.   
  60.     public void setPrice(Double price) {   
  61.         this.price = price;   
  62.     }   
  63.   
  64.     public String getBrand() {   
  65.         return this.brand;   
  66.     }   
  67.   
  68.     public void setBrand(String brand) {   
  69.         this.brand = brand;   
  70.     }   
  71.   
  72.     public String getDescription() {   
  73.         return this.description;   
  74.     }   
  75.   
  76.     public void setDescription(String description) {   
  77.         this.description = description;   
  78.     }   
  79.   
  80. }  

package com.v512.example.model;

import org.compass.annotations.*;

/**

 * Product entity.

 *

 * @author MyEclipse Persistence Tools

 */

@Searchable

public class Product implements java.io.Serializable {

 

  // Fields

 

  @SearchableId

  private String id;

  @SearchableProperty(name="name",index=Index.ANALYZED,store=Store.YES)

  private String name;

  @SearchableProperty(name="price",index=Index.NOT_ANALYZED,store=Store.YES)

  private Double price;

  @SearchableProperty(name="brand",index=Index.ANALYZED,store=Store.YES)

  private String brand;

  @SearchableProperty(name="description",index=Index.ANALYZED,store=Store.YES)

  private String description;

 

  // Constructors

 

  /** default constructor */

  public Product() {

  }

 

  /** full constructor */

  public Product(String name, Double price, String brand, String description) {

   this.name = name;

   this.price = price;

   this.brand = brand;

   this.description = description;

  }

 

  // Property accessors

 

  public String getId() {

   return this.id;

  }

 

  public void setId(String id) {

   this.id = id;

  }

 

  public String getName() {

   return this.name;

  }

 

  public void setName(String name) {

   this.name = name;

  }

 

  public Double getPrice() {

   return this.price;

  }

 

  public void setPrice(Double price) {

   this.price = price;

  }

 

  public String getBrand() {

   return this.brand;

  }

 

  public void setBrand(String brand) {

   this.brand = brand;

  }

 

  public String getDescription() {

   return this.description;

  }

 

  public void setDescription(String description) {

   this.description = description;

  }

 

}



step3
属性文件Product.hbm.xml

Java代码

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
  4. <!--    
  5.     Mapping file autogenerated by MyEclipse Persistence Tools   
  6. -->   
  7. <hibernate-mapping>   
  8.     <class name="com.v512.example.model.Product" table="PRODUCT" >   
  9.         <id name="id" type="java.lang.String">   
  10.             <column name="ID" length="40" />   
  11.             <generator class="uuid.hex" />   
  12.         </id>   
  13.         <property name="name" type="java.lang.String">   
  14.             <column name="NAME" length="80" />   
  15.         </property>   
  16.         <property name="price" type="java.lang.Double">   
  17.             <column name="PRICE" precision="6" />   
  18.         </property>   
  19.         <property name="brand" type="java.lang.String">   
  20.             <column name="BRAND" length="40" />   
  21.         </property>   
  22.         <property name="description" type="java.lang.String">   
  23.             <column name="DESCRIPTION" length="2000" />   
  24.         </property>   
  25.     </class>   
  26. </hibernate-mapping>  

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!--

    Mapping file autogenerated by MyEclipse Persistence Tools

-->

<hibernate-mapping>

    <class name="com.v512.example.model.Product" table="PRODUCT" >

        <id name="id" type="java.lang.String">

            <column name="ID" length="40" />

            <generator class="uuid.hex" />

        </id>

        <property name="name" type="java.lang.String">

            <column name="NAME" length="80" />

        </property>

        <property name="price" type="java.lang.Double">

            <column name="PRICE" precision="6" />

        </property>

        <property name="brand" type="java.lang.String">

            <column name="BRAND" length="40" />

        </property>

        <property name="description" type="java.lang.String">

            <column name="DESCRIPTION" length="2000" />

        </property>

    </class>

</hibernate-mapping>



要使用Compass必须加入一个applicationContext-compass.xml文件,文件名可以自行定义这个就不用说了 废话

step4applicationContext-compass.xml

Java代码

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"  
  6.     default-lazy-init="true">   
  7.   
  8.     <!-- 配置compass的注解功能 -->   
  9.     <bean id="annotationConfiguration"  
  10.         class="org.compass.annotations.config.CompassAnnotationsConfiguration">   
  11.     </bean>   
  12.   
  13.   
  14.     <bean id="compass" class="org.compass.spring.LocalCompassBean">   
  15.         <!-- 配置需要索引的实体映射文件的路径 -->   
  16.         <property name="resourceDirectoryLocations">   
  17.             <list>   
  18.                 <value>classpath:com/v512/example/model</value>   
  19.             </list>   
  20.         </property>   
  21.          <!-- 设置存放索引的路径 -->   
  22.         <property name="connection">   
  23.             <value>/lucene/indexes</value>   
  24.         </property>   
  25.            
  26.        <!--配置要搜索的类,作用:会根据以下的类建立索引  -->   
  27.         <property name="classMappings">   
  28.             <list>   
  29.                 <value>com.v512.example.model.Product</value>   
  30.             </list>   
  31.         </property>   
  32.         <property name="compassConfiguration"  
  33.             ref="annotationConfiguration" />   
  34.   
  35.         <!--compass的一些属性设置  -->   
  36.         <property name="compassSettings">   
  37.             <props>   
  38.                 <prop key="compass.transaction.factory">   
  39.                     org.compass.spring.transaction.SpringSyncTransactionFactory   
  40.                 </prop>   
  41.                   <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop>   
  42.             </props>   
  43.         </property>   
  44.         <!--compass的事务管理器  -->   
  45.         <property name="transactionManager" ref="transactionManager" />   
  46.     </bean>   
  47.   
  48.   
  49.     <bean id="hibernateGpsDevice"  
  50.         class="org.compass.gps.device.hibernate.HibernateGpsDevice">   
  51.         <property name="name">   
  52.             <value>hibernateDevice</value>   
  53.         </property>   
  54.         <property name="sessionFactory" ref="sessionFactory" />   
  55.         <property name="mirrorDataChanges">   
  56.             <value>true</value>   
  57.         </property>   
  58.     </bean>   
  59.     <!-- 同步更新索引 -->   
  60.     <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"  
  61.         init-method="start" destroy-method="stop">   
  62.         <property name="compass" ref="compass" />   
  63.         <property name="gpsDevices">   
  64.             <list>   
  65.                 <bean   
  66.                     class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">   
  67.                     <property name="gpsDevice" ref="hibernateGpsDevice" />   
  68.                 </bean>   
  69.             </list>   
  70.         </property>   
  71.     </bean>   
  72.   
  73.   
  74.     <bean id="compassTemplate"  
  75.         class="org.compass.core.CompassTemplate">   
  76.         <property name="compass" ref="compass" />   
  77.     </bean>   
  78.   
  79.     <!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->   
  80.     <bean id="compassIndexBuilder"  
  81.         class="com.v512.example.service.impl.CompassIndexBuilder"  
  82.         lazy-init="false">   
  83.         <property name="compassGps" ref="compassGps" />   
  84.         <property name="buildIndex" value="true" />   
  85.         <property name="lazyTime" value="10" />   
  86.     </bean>   
  87.   
  88.   
  89.   
  90. </beans>  

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

 

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation=" http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"

  default-lazy-init="true">

 

    <!-- 配置compass的注解功能 -->

  <bean id="annotationConfiguration"

   class="org.compass.annotations.config.CompassAnnotationsConfiguration">

  </bean>

 

 

  <bean id="compass" class="org.compass.spring.LocalCompassBean">

      <!-- 配置需要索引的实体映射文件的路径 -->

   <property name="resourceDirectoryLocations">

     <list>

      <value>classpath:com/v512/example/model</value>

     </list>

   </property>

    <!-- 设置存放索引的路径 -->

   <property name="connection">

     <value>/lucene/indexes</value>

   </property>

  

       <!--配置要搜索的类,作用:会根据以下的类建立索引  -->

   <property name="classMappings">

     <list>

      <value>com.v512.example.model.Product</value>

     </list>

   </property>

   <property name="compassConfiguration"

     ref="annotationConfiguration" />

 

        <!--compass的一些属性设置  -->

   <property name="compassSettings">

     <props>

      <prop key="compass.transaction.factory">

        org.compass.spring.transaction.SpringSyncTransactionFactory

      </prop>

        <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer </prop>

     </props>

   </property>

        <!--compass的事务管理器  -->

   <property name="transactionManager" ref="transactionManager" />

  </bean>

 

 

  <bean id="hibernateGpsDevice"

   class="org.compass.gps.device.hibernate.HibernateGpsDevice">

   <property name="name">

     <value>hibernateDevice</value>

   </property>

   <property name="sessionFactory" ref="sessionFactory" />

   <property name="mirrorDataChanges">

     <value>true</value>

   </property>

  </bean>

  <!-- 同步更新索引 -->

  <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps"

   init-method="start" destroy-method="stop">

   <property name="compass" ref="compass" />

   <property name="gpsDevices">

     <list>

      <bean

        class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">

        <property name="gpsDevice" ref="hibernateGpsDevice" />

      </bean>

     </list>

   </property>

  </bean>

 

 

  <bean id="compassTemplate"

   class="org.compass.core.CompassTemplate">

   <property name="compass" ref="compass" />

  </bean>

 

  <!-- 定时重建索引(利用quartz)或随Spring ApplicationContext启动而重建索引 -->

  <bean id="compassIndexBuilder"

   class="com.v512.example.service.impl.CompassIndexBuilder"

   lazy-init="false">

   <property name="compassGps" ref="compassGps" />

   <property name="buildIndex" value="true" />

   <property name="lazyTime" value="10" />

  </bean>

 

 

 

</beans>



中间都有注解  就不多解释了

下面来编写daodao的实现以及severce

step5

Java代码

  1. package com.v512.example.dao;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.v512.example.model.Product;   
  6.   
  7. public interface ProductDao {   
  8.     public void create(Product p);   
  9.     public Product getProduct(String id);   
  10.     public List getProducts();   
  11.     public void update(Product product);   
  12.     public void remove(String id);   
  13.   
  14. }  

package com.v512.example.dao;

 

import java.util.List;

 

import com.v512.example.model.Product;

 

public interface ProductDao {

  public void create(Product p);

  public Product getProduct(String id);

  public List getProducts();

  public void update(Product product);

  public void remove(String id);

 

}

 

Java代码

  1. package com.v512.example.dao.hibernate;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.v512.example.dao.ProductDao;   
  6. import com.v512.example.model.Product;   
  7. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  8. public class ProductDaoHibernate extends HibernateDaoSupport implements ProductDao {   
  9.   
  10.     public void create(Product p) {   
  11.         getHibernateTemplate().save(p);   
  12.   
  13.     }   
  14.   
  15.     public Product getProduct(String id) {   
  16.         return (Product)getHibernateTemplate().get(Product.class, id);   
  17.     }   
  18.   
  19.     public List getProducts() {   
  20.             return getHibernateTemplate().find("from Product order by id desc");   
  21.     }   
  22.   
  23.     public void remove(String id) {   
  24.     getHibernateTemplate().delete(getProduct(id));   
  25.   
  26.     }   
  27.   
  28.     public void update(Product product) {   
  29.         getHibernateTemplate().saveOrUpdate(product);   
  30.   
  31.     }   
  32.   
  33. }  

package com.v512.example.dao.hibernate;

 

import java.util.List;

 

import com.v512.example.dao.ProductDao;

import com.v512.example.model.Product;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class ProductDaoHibernate extends HibernateDaoSupport implements ProductDao {

 

  public void create(Product p) {

   getHibernateTemplate().save(p);

 

  }

 

  public Product getProduct(String id) {

   return (Product)getHibernateTemplate().get(Product.class, id);

  }

 

  public List getProducts() {

     return getHibernateTemplate().find("from Product order by id desc");

  }

 

  public void remove(String id) {

  getHibernateTemplate().delete(getProduct(id));

 

  }

 

  public void update(Product product) {

   getHibernateTemplate().saveOrUpdate(product);

 

  }

 

}

 



servece

Java代码

  1. package com.v512.example.service;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.v512.example.model.Product;   
  6.   
  7. public interface ProductManager {   
  8.     public void insertProduct(Product p);   
  9.     public Product findProdcut(String id);   
  10.     public List searchProducts(String queryString);   
  11.   
  12.        
  13. }  

package com.v512.example.service;

 

import java.util.List;

 

import com.v512.example.model.Product;

 

public interface ProductManager {

  public void insertProduct(Product p);

  public Product findProdcut(String id);

  public List searchProducts(String queryString);

 

 

}




servece
的实现

Java代码

  1. package com.v512.example.service.impl;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.List;   
  5.   
  6. import org.compass.core.CompassHits;   
  7. import org.compass.core.CompassSession;   
  8. import org.compass.core.CompassTemplate;   
  9. import org.compass.core.CompassTransaction;   
  10.   
  11. import com.v512.example.dao.ProductDao;   
  12. import com.v512.example.model.Product;   
  13. import com.v512.example.service.ProductManager;   
  14. import org.compass.core.Compass;   
  15. public class ProductManagerImpl implements ProductManager {   
  16.     private ProductDao productDao;   
  17.     private CompassTemplate compassTemplate;   
  18.   
  19.        
  20.        
  21.        
  22.     public void setCompassTemplate(CompassTemplate compassTemplate){   
  23.         this.compassTemplate=compassTemplate;   
  24.     }   
  25.        
  26.     public void setProductDao(ProductDao productDao){   
  27.         this.productDao=productDao;   
  28.     }   
  29.   
  30.     public Product findProdcut(String id) {   
  31.         return productDao.getProduct(id);          
  32.     }   
  33.   
  34.     public void insertProduct(Product p) {   
  35.     productDao.create(p);   
  36.     }   
  37.   
  38.     public List searchProducts(String queryString) {   
  39.         Compass compass = compassTemplate.getCompass();   
  40.         CompassSession session=compass.openSession();   
  41.         List list = new ArrayList();   
  42.         //这里不需要开启事务了,因为在调用这个方法之前就已经开启了事务   
  43.         CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();   
  44.         System.out.println("queryString:"+queryString);   
  45.         System.out.println("hits:"+hits.getLength());   
  46.         for(int i=0;i<hits.length();i++){   
  47.             Product hit=(Product)hits.data(i);   
  48.             list.add(hit);   
  49.         }   
  50.            
  51.         return list;   
  52.     }   
  53.   
  54.   
  55.   
  56.     public CompassTemplate getCompassTemplate() {   
  57.         return compassTemplate;   
  58.     }   
  59.   
  60. }  

package com.v512.example.service.impl;

 

import java.util.ArrayList;

import java.util.List;

 

import org.compass.core.CompassHits;

import org.compass.core.CompassSession;

import org.compass.core.CompassTemplate;

import org.compass.core.CompassTransaction;

 

import com.v512.example.dao.ProductDao;

import com.v512.example.model.Product;

import com.v512.example.service.ProductManager;

import org.compass.core.Compass;

public class ProductManagerImpl implements ProductManager {

  private ProductDao productDao;

  private CompassTemplate compassTemplate;

 

 

 

 

  public void setCompassTemplate(CompassTemplate compassTemplate){

   this.compassTemplate=compassTemplate;

  }

 

  public void setProductDao(ProductDao productDao){

   this.productDao=productDao;

  }

 

  public Product findProdcut(String id) {

   return productDao.getProduct(id);  

  }

 

  public void insertProduct(Product p) {

  productDao.create(p);

  }

 

  public List searchProducts(String queryString) {

   Compass compass = compassTemplate.getCompass();

   CompassSession session=compass.openSession();

   List list = new ArrayList();

   //这里不需要开启事务了,因为在调用这个方法之前就已经开启了事务

   CompassHits hits= session.queryBuilder().queryString("name:"+queryString).toQuery().hits();

   System.out.println("queryString:"+queryString);

   System.out.println("hits:"+hits.getLength());

   for(int i=0;i<hits.length();i++){

     Product hit=(Product)hits.data(i);

     list.add(hit);

   }

  

   return list;

  }

 

 

 

  public CompassTemplate getCompassTemplate() {

   return compassTemplate;

  }

 

}



所有的都做完了
现在编写jsp页面

step6
insertProduct.jsp

Java代码

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>   
  3. <%@ taglib prefix="s" uri="/struts-tags"%>   
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  5. <html>   
  6. <head>   
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
  8. <link href="style/oa.css" rel="stylesheet" type="text/css">   
  9.   
  10. <title>添加信息</title>   
  11. </head>   
  12. <body>   
  13. <center>   
  14.     <s:form action="insert.action" theme="simple">   
  15.        
  16. <TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:300px;">   
  17.     <TBODY>   
  18.         <TR>   
  19.     <td align="center" class="tdEditTitle">添加商品名称</TD>   
  20.         </TR>   
  21.         <TR>   
  22.             <td>     
  23.   
  24.   
  25. <table class="tableEdit" style="width:300px;" cellspacing="0" border="0" cellpadding="0">   
  26.     <tr>     
  27.     <td class="tdEditLabel" >商品名称</td>                 
  28.         <td class="tdEditContent"><s:textfield name="product.name" label="名称" /></td>   
  29.     </tr>   
  30.        
  31.     <tr>     
  32.     <td class="tdEditLabel" >商品品牌</td>                 
  33.         <td class="tdEditContent"><s:textfield name="product.brand" label="品牌" /></td>   
  34.     </tr>   
  35.        
  36.     <tr>     
  37.     <td class="tdEditLabel" >商品价格</td>                 
  38.         <td class="tdEditContent"><s:textfield name="product.price" label="价格" /></td>   
  39.     </tr>   
  40.        
  41.     <tr>   
  42.                 <td class="tdEditLabel" >商品描述</td>     
  43.         <td class="tdEditContent"><s:textarea name="product.description" label="描述" />   
  44.         </td>   
  45.     </tr>   
  46.     <tr>   
  47.         <td>&nbsp;   
  48.         </td>   
  49.         <td><s:submit/>   
  50.         <br></td>   
  51.     </tr>   
  52. </table>   
  53.             </td>   
  54.         </TR>   
  55.     </TBODY>   
  56. </TABLE>   
  57. </s:form>   
  58. </center>   
  59. </body>   
  60. </html>  

<%@ page language="java" contentType="text/html; charset=UTF-8"

  pageEncoding="UTF-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link href="style/oa.css" rel="stylesheet" type="text/css">

 

<title>添加信息</title>

</head>

<body>

<center>

  <s:form action="insert.action" theme="simple">

 

<TABLE class="tableEdit" border="0" cellspacing="1" cellpadding="0" style="width:300px;">

  <TBODY>

   <TR>

  <td align="center" class="tdEditTitle">添加商品名称</TD>

   </TR>

   <TR>

     <td> 

 

 

<table class="tableEdit" style="width:300px;" cellspacing="0" border="0" cellpadding="0">

  <tr> 

  <td class="tdEditLabel" >商品名称</td>     

   <td class="tdEditContent"><s:textfield name="product.name" label="名称" /></td>

  </tr>

 

  <tr> 

  <td class="tdEditLabel" >商品品牌</td>     

   <td class="tdEditContent"><s:textfield name="product.brand" label="品牌" /></td>

  </tr>

 

  <tr> 

  <td class="tdEditLabel" >商品价格</td>     

   <td class="tdEditContent"><s:textfield name="product.price" label="价格" /></td>

  </tr>

 

  <tr>

      <td class="tdEditLabel" >商品描述</td> 

   <td class="tdEditContent"><s:textarea name="product.description" label="描述" />

   </td>

  </tr>

  <tr>

   <td>&nbsp;

   </td>

   <td><s:submit/>

   <br></td>

  </tr>

</table>

     </td>

   </TR>

  </TBODY>

</TABLE>

</s:form>

</center>

</body>

</html>


step7

编写action

Java代码

  1. package com.v512.example.action;   
  2.   
  3. import java.util.List;   
  4.   
  5. import com.opensymphony.xwork2.ActionSupport;   
  6. import com.v512.example.model.Product;   
  7. import com.v512.example.service.ProductManager;   
  8. import org.apache.struts2.ServletActionContext;   
  9.   
  10. public class ProductAction extends ActionSupport {   
  11.        
  12.     private static final long serialVersionUID = 3795048906805728732L;   
  13.     private ProductManager productManager;   
  14.     private Product product;   
  15.     private String queryString;   
  16.        
  17.     public void setQueryString(String queryString){   
  18.         this.queryString=queryString;   
  19.     }   
  20.        
  21.     public Product getProduct() {   
  22.         return product;   
  23.     }   
  24.   
  25.     public void setProduct(Product product) {   
  26.         this.product = product;   
  27.     }   
  28.   
  29.     public void setProductManager(ProductManager productManager){   
  30.         this.productManager=productManager;   
  31.     }   
  32.        
  33.     public String insert(){   
  34.         productManager.insertProduct(product);   
  35.         return SUCCESS;   
  36.     }   
  37.     public String search(){   
  38.         List results=productManager.searchProducts(queryString);   
  39.         System.out.println(results.size());   
  40.         ServletActionContext.getRequest().setAttribute("searchresults", results);   
  41.         return SUCCESS;   
  42.     }   
  43.        
  44.        
  45. }  

package com.v512.example.action;

 

import java.util.List;

 

import com.opensymphony.xwork2.ActionSupport;

import com.v512.example.model.Product;

import com.v512.example.service.ProductManager;

import org.apache.struts2.ServletActionContext;

 

public class ProductAction extends ActionSupport {

 

  private static final long serialVersionUID = 3795048906805728732L;

  private ProductManager productManager;

  private Product product;

  private String queryString;

 

  public void setQueryString(String queryString){

   this.queryString=queryString;

  }

 

  public Product getProduct() {

   return product;

  }

 

  public void setProduct(Product product) {

   this.product = product;

  }

 

  public void setProductManager(ProductManager productManager){

   this.productManager=productManager;

  }

 

  public String insert(){

   productManager.insertProduct(product);

   return SUCCESS;

  }

  public String search(){

   List results=productManager.searchProducts(queryString);

   System.out.println(results.size());

   ServletActionContext.getRequest().setAttribute("searchresults", results);

   return SUCCESS;

  }

 

 

}



step8
关于Struts2的配置文件如下

Java代码

  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <!DOCTYPE struts PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">   
  5.   
  6. <struts>   
  7.     <constant name="struts.objectFactory" value="spring" />   
  8.        
  9.     <include file="struts-default.xml"/>   
  10.          
  11.     <package name="product" extends="struts-default"  
  12.         namespace="/product">   
  13.            
  14.         <!-- 配置Struts2Actionclass值要与applicationContext*.xml中的id的值一致。 -->   
  15.         <action name="insert"  
  16.             class="productBean" method="insert">   
  17.             <result >insertOk.jsp</result>   
  18.         </action>        
  19.         <action name="search"  
  20.             class="productBean" method="search">   
  21.             <result >searchResults.jsp</result>   
  22.         </action>   
  23.            
  24.      </package>   
  25.        
  26. </struts>  

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

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

 

<struts>

  <constant name="struts.objectFactory" value="spring" />

 

  <include file="struts-default.xml"/>

     

    <package name="product" extends="struts-default"

   namespace="/product">

  

   <!-- 配置Struts2Actionclass值要与applicationContext*.xml中的id的值一致。 -->

   <action name="insert"

     class="productBean" method="insert">

     <result >insertOk.jsp</result>

   </action>  

   <action name="search"

     class="productBean" method="search">

     <result >searchResults.jsp</result>

   </action>

  

     </package>

 

</struts>

 



如果插入成功就跳转到insertOkjsp

Java代码

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>   
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  4. <html>   
  5. <head>   
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
  7. <title>Insert title here</title>   
  8. </head>   
  9. <body>   
  10. 添加商品成功!   
  11.   
  12. </body>   
  13. </html>  

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

添加商品成功!

 

</body>

</html>



step9
到此所有准备工作都做完了
下面来看下 spring的配置文件applicationContext.xml web.xml
web.xml

Java代码

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <web-app version="2.5"    
  3.     xmlns="http://java.sun.com/xml/ns/javaee"    
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">   
  7.        
  8.     <!--定义Spring的配置的位置,可以定义多个配置文件,可以使用通配符。  -->   
  9.     <context-param>   
  10.         <param-name>contextConfigLocation</param-name>   
  11.         <param-value>/WEB-INF/applicationContext*.xml</param-value>   
  12.     </context-param>   
  13.     <!--设置一起动当前的Web应用,就加载Spring,让Spring管理Bean-->   
  14.     <listener>   
  15.         <listener-class>   
  16.             org.springframework.web.context.ContextLoaderListener   
  17.         </listener-class>   
  18.     </listener>   
  19.         <!--解决Hibernate延迟加载出现的问题,需要放到struts2过滤器之前-->   
  20.     <filter>   
  21.         <filter-name>lazyLoadingFilter</filter-name>   
  22.         <filter-class>   
  23.             org.springframework.orm.hibernate3.support.OpenSessionInViewFilter   
  24.         </filter-class>   
  25.     </filter>   
  26.        
  27.         <!--Struts2的过滤器,使用Struts2,必须配置该项-->   
  28.     <filter>   
  29.         <filter-name>struts2</filter-name>   
  30.         <filter-class>   
  31.             org.apache.struts2.dispatcher.FilterDispatcher   
  32.         </filter-class>   
  33.     </filter>    
  34.        
  35.        
  36.         <!--解决Hibernate延迟加载出现的问题,仍需要放到struts2过滤器mapping之前-->   
  37. <filter-mapping>   
  38.         <filter-name>lazyLoadingFilter</filter-name>   
  39.         <url-pattern>*.action</url-pattern>   
  40.     </filter-mapping>   
  41. <!--Struts2的过滤器,配套的filter-mapping-->   
  42.     <filter-mapping>   
  43.         <filter-name>struts2</filter-name>   
  44.         <url-pattern>/*</url-pattern>   
  45.     </filter-mapping>    
  46.   <welcome-file-list>   
  47.     <welcome-file>index.jsp</welcome-file>   
  48.   </welcome-file-list>   
  49. </web-app>  

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

<web-app version="2.5"

  xmlns="http://java.sun.com/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 

  <!--定义Spring的配置的位置,可以定义多个配置文件,可以使用通配符。  -->

  <context-param>

   <param-name>contextConfigLocation</param-name>

   <param-value>/WEB-INF/applicationContext*.xml</param-value>

  </context-param>

  <!--设置一起动当前的Web应用,就加载Spring,让Spring管理Bean-->

  <listener>

   <listener-class>

     org.springframework.web.context.ContextLoaderListener

   </listener-class>

  </listener>

   <!--解决Hibernate延迟加载出现的问题,需要放到struts2过滤器之前-->

  <filter>

   <filter-name>lazyLoadingFilter</filter-name>

   <filter-class>

     org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

   </filter-class>

  </filter>

 

   <!--Struts2的过滤器,使用Struts2,必须配置该项-->

  <filter>

   <filter-name>struts2</filter-name>

   <filter-class>

     org.apache.struts2.dispatcher.FilterDispatcher

   </filter-class>

  </filter> 

 

 

   <!--解决Hibernate延迟加载出现的问题,仍需要放到struts2过滤器mapping之前-->

<filter-mapping>

   <filter-name>lazyLoadingFilter</filter-name>

   <url-pattern>*.action</url-pattern>

  </filter-mapping>

<!--Struts2的过滤器,配套的filter-mapping-->

  <filter-mapping>

   <filter-name>struts2</filter-name>

   <url-pattern>/*</url-pattern>

  </filter-mapping> 

  <welcome-file-list>

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

  </welcome-file-list>

</web-app>



applicationContext.xml

Java代码

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xmlns:aop="http://www.springframework.org/schema/aop"  
  5.        xmlns:tx="http://www.springframework.org/schema/tx"  
  6.        xsi:schemaLocation="   
  7.        http://www.springframework.org/schema/beans   
  8.        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  9.        http://www.springframework.org/schema/tx   
  10.        http://www.springframework.org/schema/tx/spring-tx-2.5.xsd   
  11.        http://www.springframework.org/schema/aop   
  12.        http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" default-lazy-init="true">   
  13.   
  14.         
  15.        
  16.          
  17.     <!-- mysql数据库 :定义数据源的Bean ,给HibernatesessionFactory -->   
  18.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   
  19.         <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>   
  20.         <property name="url" value="jdbc:mysql://localhost:3306/ssh2compass?useUnicode=true&amp;characterEncoding=UTF-8"/>   
  21.         <property name="username" value="root"/>   
  22.         <property name="password" value="123456"/>   
  23.          <!-- 连接池启动时的初始值 -->   
  24.          <property name="initialSize" value="1"/>   
  25.          <!-- 连接池的最大值 -->   
  26.          <property name="maxActive" value="500"/>   
  27.          <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->   
  28.          <property name="maxIdle" value="2"/>   
  29.          <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->   
  30.          <property name="minIdle" value="1"/>   
  31.       </bean>   
  32.       <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  33.          <property name="dataSource" ref="dataSource"/>   
  34.          <property name="mappingResources">   
  35.             <list>   
  36.               <value>com/v512/example/model/Product.hbm.xml</value>   
  37.             </list>   
  38.          </property>   
  39.          <property name="hibernateProperties">   
  40.             <value>   
  41.                 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect   
  42.                 hibernate.hbm2ddl.auto=update   
  43.                 hibernate.show_sql=false  
  44.                 hibernate.format_sql=false  
  45.                 hibernate.cache.use_second_level_cache=true  
  46.                 hibernate.cache.use_query_cache=false  
  47.                 hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider   
  48.               </value>   
  49.          </property>   
  50.     </bean>   
  51.        
  52.     <!-- oracle数据库 :定义数据源的Bean ,给HibernatesessionFactory-->   
  53.     <!--    
  54.     <bean id="dataSource"  
  55.         class="org.apache.commons.dbcp.BasicDataSource">   
  56.         <property name="driverClassName"  
  57.             value="oracle.jdbc.driver.OracleDriver">   
  58.         </property>   
  59.         <property name="url"  
  60.             value="jdbc:oracle:thin:@192.168.1.3:1521:ora9">   
  61.         </property>   
  62.         <property name="username" value="scott"></property>   
  63.         <property name="password" value="tiger"></property>   
  64.     </bean>   
  65.       -->   
  66.          
  67. <!-- 定义HibernatesessionFactory,通过该Bean,可以获得HibernateSession-->   
  68.     <!--    
  69.     <bean id="sessionFactory"  
  70.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
  71.         <property name="dataSource">   
  72.             <ref bean="dataSource" />   
  73.         </property>   
  74.         <property name="hibernateProperties">   
  75.             <props>   
  76.                 <prop key="hibernate.dialect">   
  77.                     org.hibernate.dialect.Oracle9Dialect   
  78.                 </prop>   
  79.                 <prop key="hibernate.cache.provider_class">   
  80.                     org.hibernate.cache.EhCacheProvider   
  81.                 </prop>   
  82.                 <prop key="hibernate.cache.use_query_cache">true</prop>   
  83.                 <prop key="hibernate.show_sql">true</prop>   
  84.             </props>   
  85.         </property>   
  86.         <property name="mappingResources">   
  87.             <list>                   
  88.                 <value>   
  89.                     com/v512/example/model/Product.hbm.xml   
  90.                 </value>   
  91.             </list>   
  92.         </property>   
  93.     </bean>   
  94.      -->   
  95.   
  96.     <bean id="productDao" class="com.v512.example.dao.hibernate.ProductDaoHibernate">   
  97.     <property name="sessionFactory" ref="sessionFactory"></property>   
  98.     </bean>   
  99.     <bean id="productManager" class="com.v512.example.service.impl.ProductManagerImpl">   
  100.     <property name="productDao" ref="productDao"></property>   
  101.     <property name="compassTemplate" ref="compassTemplate"></property>   
  102.     </bean>   
  103.        
  104.     <bean id="productBean" class="com.v512.example.action.ProductAction" scope="prototype">   
  105.     <property name="productManager" ref="productManager"></property>   
  106.        
  107.     </bean>   
  108.        
  109.        
  110.         <!-- 配置事务管理器 -->     
  111.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">   
  112.         <property name="sessionFactory">   
  113.             <ref local="sessionFactory"/>   
  114.         </property>   
  115.     </bean>   
  116.        
  117.     <!-- 配置事务特性 ,配置adddeleteupdate开始的方法,事务传播特性为required-->          
  118.     <tx:advice id="txAdvice" transaction-manager="transactionManager">   
  119.         <tx:attributes>   
  120.             <tx:method name="insert*" propagation="REQUIRED"/>   
  121.             <tx:method name="delete*" propagation="REQUIRED"/>   
  122.             <tx:method name="update*" propagation="REQUIRED"/>   
  123.             <tx:method name="*" read-only="true"/>   
  124.         </tx:attributes>   
  125.     </tx:advice>   
  126.        
  127.     <!-- 配置那些类的方法进行事务管理,当前cn.com.jobedu.oa.service包中的子包、类中所有方法需要,还需要参考tx:advice的设置 -->   
  128.     <aop:config>   
  129.         <aop:pointcut id="allManagerMethod" expression="execution (* com.v512.example.service.*.*(..))"/>   
  130.         <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>   
  131.     </aop:config>      
  132.        
  133.     </beans>  

<?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:aop="http://www.springframework.org/schema/aop"

       xmlns:tx="http://www.springframework.org/schema/tx"

       xsi:schemaLocation="

       http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

       http://www.springframework.org/schema/tx

       http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

       http://www.springframework.org/schema/aop

       http://www.springframework.org/schema/aop/spring-aop-2.5.xsd" default-lazy-init="true">

 

     

 

   

  <!-- mysql数据库 :定义数据源的Bean ,给HibernatesessionFactory -->

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

      <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>

      <property name="url" value="jdbc:mysql://localhost:3306/ssh2compass?useUnicode=true&amp;characterEncoding=UTF-8"/>

      <property name="username" value="root"/>

      <property name="password" value="123456"/>

       <!-- 连接池启动时的初始值 -->

    <property name="initialSize" value="1"/>

    <!-- 连接池的最大值 -->

    <property name="maxActive" value="500"/>

    <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->

    <property name="maxIdle" value="2"/>

    <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->

    <property name="minIdle" value="1"/>

    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

       <property name="dataSource" ref="dataSource"/>

    <property name="mappingResources">

       <list>

         <value>com/v512/example/model/Product.hbm.xml</value>

       </list>

    </property>

       <property name="hibernateProperties">

       <value>

           hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

           hibernate.hbm2ddl.auto=update

           hibernate.show_sql=false

            hibernate.format_sql=false

           hibernate.cache.use_second_level_cache=true

                 hibernate.cache.use_query_cache=false

              hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider

         </value>

       </property>

  </bean>

 

  <!-- oracle数据库 :定义数据源的Bean ,给HibernatesessionFactory-->

  <!--

  <bean id="dataSource"

   class="org.apache.commons.dbcp.BasicDataSource">

   <property name="driverClassName"

     value="oracle.jdbc.driver.OracleDriver">

   </property>

   <property name="url"

     value="jdbc:oracle:thin:@192.168.1.3:1521:ora9">

   </property>

   <property name="username" value="scott"></property>

   <property name="password" value="tiger"></property>

  </bean>

    -->

   

<!-- 定义HibernatesessionFactory,通过该Bean,可以获得HibernateSession-->

  <!--

  <bean id="sessionFactory"

   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

   <property name="dataSource">

     <ref bean="dataSource" />

   </property>

   <property name="hibernateProperties">

     <props>

      <prop key="hibernate.dialect">

        org.hibernate.dialect.Oracle9Dialect

      </prop>

      <prop key="hibernate.cache.provider_class">

        org.hibernate.cache.EhCacheProvider

      </prop>

      <prop key="hibernate.cache.use_query_cache">true</prop>

      <prop key="hibernate.show_sql">true</prop>

     </props>

   </property>

   <property name="mappingResources">

     <list>     

      <value>

        com/v512/example/model/Product.hbm.xml

      </value>

     </list>

   </property>

  </bean>

   -->

 

  <bean id="productDao" class="com.v512.example.dao.hibernate.ProductDaoHibernate">

  <property name="sessionFactory" ref="sessionFactory"></property>

  </bean>

  <bean id="productManager" class="com.v512.example.service.impl.ProductManagerImpl">

  <property name="productDao" ref="productDao"></property>

  <property name="compassTemplate" ref="compassTemplate"></property>

  </bean>

 

  <bean id="productBean" class="com.v512.example.action.ProductAction" scope="prototype">

  <property name="productManager" ref="productManager"></property>

 

  </bean>

 

 

   <!-- 配置事务管理器 --> 

  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">

   <property name="sessionFactory">

     <ref local="sessionFactory"/>

   </property>

  </bean>

   

    <!-- 配置事务特性 ,配置adddeleteupdate开始的方法,事务传播特性为required-->      

    <tx:advice id="txAdvice" transaction-manager="transactionManager">

      <tx:attributes>

       <tx:method name="insert*" propagation="REQUIRED"/>

       <tx:method name="delete*" propagation="REQUIRED"/>

       <tx:method name="update*" propagation="REQUIRED"/>

       <tx:method name="*" read-only="true"/>

      </tx:attributes>

    </tx:advice>

   

    <!-- 配置那些类的方法进行事务管理,当前cn.com.jobedu.oa.service包中的子包、类中所有方法需要,还需要参考tx:advice的设置 -->

    <aop:config>

      <aop:pointcut id="allManagerMethod" expression="execution (* com.v512.example.service.*.*(..))"/>

      <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>

    </aop:config>  

 

  </beans>



到此已经可以测试了
测试完插入之后,所有准备工作都已完成 现在我们来测下搜索
search.jap

Java代码

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>   
  3.     <%@taglib prefix="s" uri="/struts-tags" %>   
  4.        
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  6. <html>   
  7. <head>   
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
  9. <title>Insert title here</title>   
  10. </head>   
  11. <body>   
  12. <s:form action="search.action" method="post">   
  13. <s:textfield name="queryString" label="搜索产品"/>   
  14. <s:submit></s:submit>   
  15. </s:form>   
  16.   
  17.   
  18. </body>   
  19. </html>  

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <%@taglib prefix="s" uri="/struts-tags" %>

    

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<s:form action="search.action" method="post">

<s:textfield name="queryString" label="搜索产品"/>

<s:submit></s:submit>

</s:form>

 

 

</body>

</html>



搜索后的结果页面
searchResults.jsp

Java代码

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     import="java.util.List"  
  3.     pageEncoding="UTF-8"%>   
  4.     <%@taglib prefix="s" uri="/struts-tags" %>   
  5.        
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  7. <html>   
  8. <head>   
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
  10. <title>Insert title here</title>   
  11. </head>   
  12. <body>   
  13. <%   
  14.   
  15. if(((List)request.getAttribute("searchresults")).size()==0){   
  16.     %>   
  17.     no results found.   
  18. <%} %>   
  19.   
  20. <table border="1">   
  21. <s:iterator value="#request.searchresults">   
  22. <tr><td>   
  23. <s:property value="name"/>   
  24. </td>   
  25. <td>   
  26.   
  27. <s:property value="price"/></td>   
  28. <td>   
  29.   
  30. <s:property value="brand"/></td>   
  31. <td>   
  32.   
  33. <s:property value="description"/></td>   
  34. </tr>   
  35. </s:iterator>   
  36. </table>   
  37.   
  38. </body>   
  39. </html>  

<%@ page language="java" contentType="text/html; charset=UTF-8"

  import="java.util.List"

    pageEncoding="UTF-8"%>

    <%@taglib prefix="s" uri="/struts-tags" %>

   

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

 

if(((List)request.getAttribute("searchresults")).size()==0){

  %>

  no results found.

<%} %>

 

<table border="1">

<s:iterator value="#request.searchresults">

<tr><td>

<s:property value="name"/>

</td>

<td>

 

<s:property value="price"/></td>

<td>

 

<s:property value="brand"/></td>

<td>

 

<s:property value="description"/></td>

</tr>

</s:iterator>

</table>

 

</body>

</html>


step10

另外得说下,该项目见索引的过程:服务器启动把需要建立索引的表的数据全部取出建立索引
在项目运行过程中,插入数据,容器检测到索引有变动,添加索引,这个可以自己测试

为此 要添加另外一个类:该类就是专门建索引用 注意包的位置

CompassIndexBuilder

Java代码

  1. package com.v512.example.service.impl;   
  2. import org.compass.gps.CompassGps;   
  3. import org.springframework.beans.factory.InitializingBean;   
  4.   
  5.   
  6. /**  
  7.  * 通过quartz定时调度定时重建索引或自动随Spring ApplicationContext启动而重建索引的Builder.  
  8.  * 会启动后延时数秒新开线程调用compassGps.index()函数.  
  9.  * 默认会在Web应用每次启动时重建索引,可以设置buildIndex属性为false来禁止此功能.  
  10.  * 也可以不用本Builder, 编写手动调用compassGps.index()的代码.  
  11.  *  
  12.  */  
  13. public class CompassIndexBuilder implements InitializingBean {      
  14.     // 是否需要建立索引,可被设置为false使本Builder失效.   
  15.     private boolean buildIndex = false;   
  16.   
  17.     // 索引操作线程延时启动的时间,单位为秒   
  18.     private int lazyTime = 10;   
  19.   
  20.     // Compass封装   
  21.     private CompassGps compassGps;   
  22.   
  23.     // 索引线程   
  24.     private Thread indexThread = new Thread() {   
  25.   
  26.         @Override  
  27.         public void run() {   
  28.             try {   
  29.                 Thread.sleep(lazyTime * 1000);   
  30.                 System.out.println("begin compass index...");   
  31.                 long beginTime = System.currentTimeMillis();   
  32.                 // 重建索引.   
  33.                 // 如果compass实体中定义的索引文件已存在,索引过程中会建立临时索引,   
  34.                 // 索引完成后再进行覆盖.   
  35.                 compassGps.index();   
  36.                 long costTime = System.currentTimeMillis() - beginTime;   
  37.                 System.out.println("compss index finished.");   
  38.                 System.out.println("costed " + costTime + " milliseconds");   
  39.             } catch (InterruptedException e) {   
  40.                 e.printStackTrace();   
  41.             }   
  42.         }   
  43.     };   
  44.   
  45.     /**  
  46.      * 实现<code>InitializingBean</code>接口,在完成注入后调用启动索引线程.  
  47.      *  
  48.      * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()  
  49.      */  
  50.     public void afterPropertiesSet() throws Exception {   
  51.         if (buildIndex) {   
  52.             //设置为后台线程   
  53.             indexThread.setDaemon(true);   
  54.             indexThread.setName("Compass Indexer");   
  55.             indexThread.start();   
  56.         }   
  57.     }   
  58.   
  59.     public void setBuildIndex(boolean buildIndex) {   
  60.         this.buildIndex = buildIndex;   
  61.     }   
  62.   
  63.     public void setLazyTime(int lazyTime) {   
  64.         this.lazyTime = lazyTime;   
  65.     }   
  66.   
  67.     public void setCompassGps(CompassGps compassGps) {   
  68.         this.compassGps = compassGps;   
  69.     }   
  70. }  

package com.v512.example.service.impl;

import org.compass.gps.CompassGps;

import org.springframework.beans.factory.InitializingBean;

 

 

/**

 * 通过quartz定时调度定时重建索引或自动随Spring ApplicationContext启动而重建索引的Builder.

 * 会启动后延时数秒新开线程调用compassGps.index()函数.

 * 默认会在Web应用每次启动时重建索引,可以设置buildIndex属性为false来禁止此功能.

 * 也可以不用本Builder, 编写手动调用compassGps.index()的代码.

 *

 */

public class CompassIndexBuilder implements InitializingBean {  

    // 是否需要建立索引,可被设置为false使本Builder失效.

    private boolean buildIndex = false;

 

    // 索引操作线程延时启动的时间,单位为秒

    private int lazyTime = 10;

 

    // Compass封装

    private CompassGps compassGps;

 

    // 索引线程

    private Thread indexThread = new Thread() {

 

        @Override

        public void run() {

            try {

                Thread.sleep(lazyTime * 1000);

                System.out.println("begin compass index...");

                long beginTime = System.currentTimeMillis();

                // 重建索引.

                // 如果compass实体中定义的索引文件已存在,索引过程中会建立临时索引,

                // 索引完成后再进行覆盖.

                compassGps.index();

                long costTime = System.currentTimeMillis() - beginTime;

                System.out.println("compss index finished.");

                System.out.println("costed " + costTime + " milliseconds");

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    };

 

    /**

     * 实现<code>InitializingBean</code>接口,在完成注入后调用启动索引线程.

     *

     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()

     */

    public void afterPropertiesSet() throws Exception {

        if (buildIndex) {

          //设置为后台线程

            indexThread.setDaemon(true);

            indexThread.setName("Compass Indexer");

            indexThread.start();

        }

    }

 

    public void setBuildIndex(boolean buildIndex) {

        this.buildIndex = buildIndex;

    }

 

    public void setLazyTime(int lazyTime) {

        this.lazyTime = lazyTime;

    }

 

    public void setCompassGps(CompassGps compassGps) {

        this.compassGps = compassGps;

    }

}



本项目中用的是paoding-analyzer
所以请在src目录下增加paoding-dic-home.properties文件

Java代码

  1. paoding.dic.home=C:/paoding/dic   
  2. paoding.dic.detector.interval=60  

paoding.dic.home=C:/paoding/dic

paoding.dic.detector.interval=60



over

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值