dwr学习 之 一、dwr+spring的简单集成

dwr学习 之 一、dwr+spring的简单集成

dwr学习 之 一、dwr+spring的简单集成

dwr学习之 二、dwr功能演示

 

1. 环境搭建

我采用的环境为SpringMVC + myBatis + mySql + maven

关于使用Eclipse构建MavenSpringMVC项目,请参考: http://limingnihao.iteye.com/blog/830409.

关于mybatis,请参考:http://limingnihao.iteye.com/blog/781671

 

1.1 web.xml

         在配置好SpringMVC的环境之下,需要在web.xml中给Springdispatcher在添加一个dwrservlet-mapping

<!-- spring -->
<servlet>
	<servlet-name>springDispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>springDispatcher</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

<!-- dwr设置 -->
<servlet-mapping>
	<servlet-name>springDispatcher</servlet-name>
	<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

 

1.2 Spring配置文件

         添加dwrnamespacedwrcontroller、注解扫描等标签。给出配置文件全部内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" 
	xmlns:tx="http://www.springframework.org/schema/tx" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:dwr="http://www.directwebremoting.org/schema/spring-dwr"
	xsi:schemaLocation="http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
		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/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc-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">


	<aop:aspectj-autoproxy />
	<mvc:annotation-driven />
	<context:component-scan base-package="liming.student.manager" />

	<!-- 导入属性配置文件 -->
	<context:property-placeholder location="classpath:mysql.properties" />
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
	</bean>

	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis-config.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>

	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="annotationClass" value="org.springframework.stereotype.Repository" />
		<property name="basePackage" value="liming.student.manager" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

	<!-- DWR配置 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
		<property name="order" value="1" />
	</bean>
	<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
		<property name="order" value="2" />
	</bean>
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="order" value="3" />
		<property value="true" name="alwaysUseFullPath"></property>
		<property name="mappings">
			<props>
				<prop key="/dwr/**">dwrController</prop>
			</props>
		</property>
	</bean>

	<dwr:controller id="dwrController" debug="true">
		<dwr:config-param name="allowScriptTagRemoting" value="true" />
		<dwr:config-param name="crossDomainSessionSecurity" value="false" />
	</dwr:controller>
	<dwr:configuration></dwr:configuration>
	<dwr:annotation-config />
	<dwr:annotation-scan scanRemoteProxy="true" scanDataTransferObject="true" base-package="liming.student.manager" />

</beans>

 

 

 

2. 配置文件解说

2.1 controller

添加dwrdwr:controller标签,debugtrue时,可以访问/dwr/index.html的测试页面。还可以可以设置一些参数的值:

<dwr:controller id="dwrController" debug="true">
	<dwr:config-param name="allowScriptTagRemoting" value="true" />
	<dwr:config-param name="crossDomainSessionSecurity" value="false" />
</dwr:controller>
  

    controller常用配置:

参数名称

默认值

说明

jsonpEnabled

false

Set to true to enable DWR's JSONP remoting.

allowGetForSafariButMakeForgeryEasier

false

Set to true to make DWR work in Safari 1.x (where a bug drops the bodies from POST requests). POST requests are slightly harder to forge, so enabling this reduces security slightly.

crossDomainSessionSecurity

true

Set to false to enable requests from other domains. Note that enabling this can be a significant security risk. See the Wikipedia notes on CSRF for more. Do not set this to false without understanding the consequences.

allowScriptTagRemoting

true

Set to true to enable Script Tag remoting. Note that enabling this can be a significant security risk. See the Wikipedia notes on CSRF for more. Do not set this to false without understanding the consequences. There are some cases where you will need to enable Script Tag remoting, but want to leave crossDomainSessionSecurity in place - particularly when you have an http based web page, and an https based DWR service.

debug

false

Set to true to enable the debug/test pages.

scriptSessionTimeout

1800000 (30 mins)

How quickly do scriptSessions timeout?

maxCallCount

20

What is the maximum number of calls that can be done in a single batch. (Helps prevent DoS attacks).

 

 

2.2 url-mapping

         Springmvc中,每个url都需要一个controller的映射器(RequestMapping),需要使用<dwr:url-mapping />标签进行声明,这样才可以访问/engine.js, /interface.js, /call/**, /interface/**路径。但是带来的不管是测试页(/dwe/index.html)将不能访问。解决办法是,声明一个SimpleUrlHandlerMappingbean指定dwr的请求路径:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	<property name="order" value="3" />
	<property value="true" name="alwaysUseFullPath"></property>
	<property name="mappings">
		<props>
			<prop key="/dwr/**">dwrController</prop>
		</props>
	</property>
</bean>
  

2.3 configuration

<dwr:configuration/> 标签用于模仿在 dwr.xml 中可用的配置的行为。主要是声明实体类转换。例如:

<dwr:configuration>
	<dwr:convert type="bean" class="liming.student.manager.data.model.PlaceEntity"></dwr:convert>
</dwr:configuration>
  

2.4 remote

dwr:remote用于声明可以进行js调用的java bean

<bean class="liming.student.manager.web.dwr.DWRDemo">
	<dwr:remote javascript="DWRDemo">
		<dwr:include method="getPlaceBaseAllList"/>
	</dwr:remote>
</bean>
  

2.5 annotation-config、annatation-scan

         当使用注解声明bean和实体类转换时,需要声明dwr:annotation-configannotation-scan

         @ RemoteProxy:注解定义为远程调用的类,可指定namejs调用的名称。

         @ RemoteMethod:可远程调用的方法。

         @DataTransferObject:实体类转换器。

 

annotation-config:启用DWR 扫描,在类路径中检测 @ RemoteProxy @ RemoteMethod注解的类。

       annotation-scan:定义一些注解扫描的参数:

                   base-package:指定的扫描的包;

                   regex:将扫描仪类路径中使用正则表达式;

                   scanRemoteProxyDWR 是否扫描远程代理类?默认值为 true

     scanDataTransferObjectDWR 是否扫描转换器?默认值为 true

     scanGlobalFilter-默认值为 true

 

<dwr:annotation-config />
<dwr:annotation-scan scanRemoteProxy="true" scanDataTransferObject="true" base-package="liming.student.manager" />
 

dwr学习 之 一、dwr+spring的简单集成

dwr学习之 二、dwr功能演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值