ssh项目使用dwr框架


     DWR是Direct Web Remoting 的缩写。

     是一个WEB远程调用框架.。页面可通过java业务方法来实现ajax的一个开源框架。

     最初接触dwr,时,感觉最大的方便之处就是,它可以调用java的业务方法和映射java实体类。

    好吧,现在来看看怎么配置dwr框架。dwr也是可以支持注解配置的。通过配置文件和注解两种方式来简单介绍一下dwr在项目的使用。

    我写了俩个demo ,配置文件和注解两种方式各一个 demo,点击下载(eclipse 开发的,使用myeclipse 导入  稍作修改)

     

首先,加入dwr.jar包。配置dwr.xml:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC 
	"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" 
	"http://getahead.org/dwr/dwr20.dtd"> 
<dwr>
    <allow>
         <convert match="com.zuxiang.entity.*" converter="bean">
          
         </convert> <!-- 这个节点是做转换,指定那些类可转换成在页面可通过对象点属性方式使用的js对象   -->
         
         <create creator="spring" javascript="customerService"> 

             <!-- creator 由spring创建, 在页面使用的js,为   customerService.js -->

                  <param name="beanName" value="customerService" /> <!-- 由spring管理的业务类对象 customerService -->
                  <!--指定可供远程调用的以为方法--> 
                  <include method="findAll" /> 
        </create> 
    </allow>
</dwr>


当然,使用注解是不需要dwr.xml文件的。xml文件里 convert  指定那些类可转换,

注解是通过@DataTransferObject,标识那些类可转换,@DataTransferObject是标注类的,就是说只要这个类标注了@DataTransferObject,那么这个这个类就可供js使用,

但是有时我只想用到某两个属性怎么办?那就在属性上标注@RemoteProperty,如果标注了@RemoteProperty,那没js,可使用的就只有标了@RemoteProperty的字段了

package com.zuxiang.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.directwebremoting.annotations.DataTransferObject;




/**
 * CusCustomer entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "customer" ,schema = "cc")
@DataTransferObject    //这是个实体类,标注了@DataTransferObject ,就可供js,使用
public class Customer implements java.io.Serializable {

	// Fields

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@Column(name = "cus_id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long cusId;

         @Column(name = "cus_name" ,length = 20 )
          // @RemoteProperty 如果只要该属性s
          private String cusName;
	@Column(name = "cus_addr",length = 250)
	private String cusAddr;
	
	@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer" ,fetch = FetchType.EAGER)
	private List<Product> products;

	// Constructors

	/** default constructor */
	public Customer() {
	}



	/** full constructor */
	public Customer(String cusName, String cusAddr) {
		this.cusName = cusName;
		this.cusAddr = cusAddr;
	}

	// Property accessors

	public Long getCusId() {
		return this.cusId;
	}

	public void setCusId(Long cusId) {
		this.cusId = cusId;
	}

	public String getCusName() {
		return this.cusName;
	}

	public void setCusName(String cusName) {
		this.cusName = cusName;
	}

	public String getCusAddr() {
		return this.cusAddr;
	}

	public void setCusAddr(String cusAddr) {
		this.cusAddr = cusAddr;
	}
	
	public List<Product> getProducts() {
		return products;
	}

	public void setProducts(List<Product> products) {
		this.products = products;
	}

}

那么业务方法又怎么标注呢。。使用@RemoteProxy标注可远程调用的业务类,@RemoteMethod标注远程调用的方法。

如果使用Spring中逻辑层则需要进行如下的设置:

@RemoteProxy(creator = SpringCreator.class,
    creatorParams = @Param(name = "beanName" ,value ="customerService"),
    name = "customerService")

package com.zuxiang.biz;

import java.util.List;

import javax.annotation.Resource;

import org.directwebremoting.annotations.Param;
import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.directwebremoting.spring.SpringCreator;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.zuxiang.dao.CustomerDao;
import com.zuxiang.entity.Customer;

@Service
@Transactional
@RemoteProxy(creator = SpringCreator.class,
    creatorParams = @Param(name = "beanName" ,value ="customerService"),
    name = "customerService")
public class CustomerServiceImpl implements CustomerService{

	@Resource
	private CustomerDao customerDao;
	



	@RemoteMethod
	public List<Customer> findAll() {
		// TODO Auto-generated method stub
		return customerDao.findAll();
	}



}
下面配置,spring,配置文件,

使用 xml.文件的spring配置,就要注意dwr.xml里的 红色部分要对应 spring 里 红色部分;

<param name="beanName" 
	            value="customerService" /> 
applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p" 
	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.0.xsd
        http://www.springframework.org/schema/context 
	    http://www.springframework.org/schema/context/spring-context-2.0.xsd 
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
		
	<!-- session工厂 -->	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation"
			value="classpath:hibernate.cfg.xml">
		</property>
	</bean>
	
	<!-- 事务管理 -->
	<bean id="myHibTransactionManager"
	      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	      <property name="sessionFactory" ref="sessionFactory"></property>
	      
	 </bean>
	
	<!-- dao类 -->
	<bean id="customerDao" class="com.zuxiang.dao.CustomerDaoImpl">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
	
	<!-- 业务类 -->
	<bean id="customerService" class="com.zuxiang.biz.CustomerServiceImpl">
	    <property name="customerDao" ref="customerDao"/>
	</bean>
	
	<!-- struts1 aciton -->
	<bean name="/cus" class="com.zuxiang.struts.action.CustomerAction">
	    <property name="customerService" ref="customerService"></property>
	</bean>
	
	
	<!-- 事务的切面 -->
	  <tx:advice id="txAdvice"
	    transaction-manager="myHibTransactionManager">
	      <tx:attributes>
		<tx:method name="add*" propagation="REQUIRED" />
		<tx:method name="del*" propagation="REQUIRED" />
		<tx:method name="update*" propagation="REQUIRED" />
		<tx:method name="do*" propagation="REQUIRED" />
		<tx:method name="*" propagation="SUPPORTS"  read-only="true" />
    </tx:attributes>
	</tx:advice>
	
	<!--注入事务 -->
	<aop:config>
	    <aop:pointcut id="bizMethods"
	 	expression="execution(* com.zuxiang.biz.*.*(..))" />
	    <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />
	</aop:config>
	
	
	</beans>

使用注解的spring,applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"  
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
       http://www.directwebremoting.org/schema/spring-dwr    
       http://www.directwebremoting.org/schema/spring-dwr-3.0.xsd">
                  
  <context:annotation-config />  
  <!-- 使用注解配置 -->
  <dwr:configuration />  
  <dwr:annotation-config />  
  <dwr:url-mapping />  
  
  <!-- 自动扫描指定包下的类 -->
  <context:component-scan base-package="com.zuxiang">
     <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
  </context:component-scan>
  
  <!-- jpa实体管理类 -->
  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
      <property name="persistenceUnitName" value="zuxiang"/>
  </bean>  
  

   <!-- 事务管理 -->
  <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    	<property name="entityManagerFactory" ref="entityManagerFactory"/>
  </bean>

  <!-- dwr 扫描转换类和远程调用类 -->
   <dwr:annotation-scan scanDataTransferObject="true" scanRemoteProxy="true" base-package="com.zuxiang"/>  
 
  <!-- debug 模式 -->
   <dwr:controller id="dwrController" debug="true"></dwr:controller>  
  
  
  <!-- 使用注解事务 -->
  <tx:annotation-driven transaction-manager="transactionManager"/>
  
</beans>

下面是 web.xml 配置文件,

配置文件方式的的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>dwr2</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
    <description>register spring listener</description>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <filter>
    <filter-name>MyFilter</filter-name>
    <filter-class>com.zuxiang.filter.MyFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>
  <servlet>
  
  <!-- struts1的aciton -->
   <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <servlet>
  <!-- struts1的aciton -->
  
  
  <!-- dwr 配置 -->
    <servlet-name>dwr</servlet-name>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>crossDomainSessionSecurity</param-name>
      <param-value>false</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>dwr</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
  <!-- dwr 配置 -->
  
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

注解方式的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>dwr3</display-name>
  
  <context-param>
	    <param-name>contextConfigLocation</param-name>
	    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <listener>
	    <description>register spring listener</description>
	    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- struts2 配置 -->
  <filter>
	  	<filter-name>struts2</filter-name>
	  	<filter-class>
	  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	  	</filter-class>
  </filter>
  
  <filter-mapping>
	  	<filter-name>struts2</filter-name>
	  	<url-pattern>/*</url-pattern>
  </filter-mapping>
    <!-- struts2 配置 -->
    
    <!-- dwr 配置 -->
  <servlet>  
       <servlet-name>dwr</servlet-name>  
          <servlet-class>org.directwebremoting.spring.DwrSpringServlet</servlet-class>  
       <init-param>  
         <param-name>debug</param-name>  
         <param-value>true</param-value>  
       </init-param>  
       <!-- 解决CSRF Security Error  加入下面 加入跨域调用配置信息 -->
      <init-param>
             <param-name>crossDomainSessionSecurity</param-name>
             <param-value>false</param-value>
      </init-param>
      <init-param>
            <param-name>allowScriptTagRemoting</param-name>
            <param-value>true</param-value>
      </init-param>
       
  </servlet>  
  
  <servlet-mapping>  
      <servlet-name>dwr</servlet-name>  
      <url-pattern>/dwr/*</url-pattern>  
  </servlet-mapping>  

  
   <!-- dwr 配置 -->
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

这里只是说一下相关配置,到我资源里下载demo,运行一下。更容易看懂








  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值