ssh项目使用dwr框架

来源:互联网 发布:翻墙的原理 知乎 编辑:程序博客网 时间:2024/05/17 07:55

     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 accessorspublic 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{@Resourceprivate CustomerDao customerDao;@RemoteMethodpublic List<Customer> findAll() {// TODO Auto-generated method stubreturn 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,运行一下。更容易看懂







	
				
		
原创粉丝点击