DWR3与SpringMVC4全注解整合 一个小错误浪费了我好几个小时

DWR与SpringMVC全注解整合 一个小错误浪费了我好几个小时

之前配置过DWR与SSH的整合

SSH与DWR完美整合 带事例

使用的就是把dwr所需要的bean写到一个xml中,加入到applicationContext.xml

假如我们dwr所需要的bean特别多,那这个文件会越来越大,所以今天就想到了使用注解来试试

由于当前我正在练习SpringMVC项目

所以今天就整合了下全注解DWR与SpringMVC

版本信息为:dwr3和spring4

方法如下:

1、配置dwr.xml文件,这个文件和web.xml在一个同一个目录

代码如下:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE dwr PUBLIC 
	"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" 
	"http://getahead.org/dwr/dwr30.dtd">

<dwr>
	<allow>
		<!-- 判断用户或邮箱是否被注册 返回一个布尔值 true表示已被注册-->
		<create creator="spring" javascript="getbooleanusermail" scope="application">
			<param name="beanName" value="dwrVeriuseri" />
			<!-- 加include可以具体指定java类中关的方法,不加则默认允许访问所有公布类的public方法, 在我的例子中,为了让大家了解include的作用我只允许访问getHello方法。 -->
			<!-- include method="dwruserloginok" / -->
		</create>
	</allow>
</dwr>
上面的代码我解释下:

creator:他有很多选项,这里选择的是spring,表示bean由spring管理

javascript:表示前端使用的类名

scope:表示范围

name:通过bean的名字

value:表示bean的具体名字

2:配置web.xml

在web.xml中加入以下代码


<servlet>
	<servlet-name>dwr-invoker</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>logLevel</param-name>
		<param-value>WARN</param-value>
	</init-param>
	<init-param>
		<param-name>crossDomainSessionSecurity</param-name>
		<param-value>false</param-value>
	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>dwr-invoker</servlet-name>
	<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
3、写一个dwr的bean类



@Component("dwrVeriuseri")
public class DwrVeriuserimpl implements DwrVeriuser{
//里面的具体方法就略掉了撒
}
我们使用Component注解来让spring自动装载,并且他的名字是:dwrVeriuseri


这个名字就是我们dwr.xml里配置的beanName

4、最后一点比较重要,添加扫描包

由于我的SpringMVC项目里有两个主要的配置文件

applicationContext.xml

LoveBN-servlet.xml

而在web.xml里的配置是这样的

我这里贴出全部的web.xml代码


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	metadata-complete="true" version="3.1">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/</url-pattern>
	</filter-mapping>
	<servlet>
		<servlet-name>LoveBN</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:config/LoveBN-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>LoveBN</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<!-- dwr配置 -->
	<servlet>
		<servlet-name>dwr-invoker</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>logLevel</param-name>
			<param-value>WARN</param-value>
		</init-param>
		<init-param>
			<param-name>crossDomainSessionSecurity</param-name>
			<param-value>false</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>dwr-invoker</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>/WEB-INF/theme/default/shop/index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
看见了吗


context-param这段代码是优先执行的

如果我将扫描包的代码

<context:component-scan base-package="springMVC.NLoveB.dwr.impl" />

加入到LoveBN-servlet.xml

就会造成dwr找不到指定的beanName类
所以我们应该扫描dwr的包加入到applicationContext.xml里面,使其优先执行

5、其他配置

您还可以测试配置资源文件mvc:resources

最后就可以用浏览器打开地址http://localhost:8080/LoveBN/dwr


ps:我的错误就是忘记了web.xml的启动顺序,所以导致一直找不到beanName

关于web.xml的启动顺序,我在网络上找到一篇很好的文章,大家可以参考这里

关于 web.xml 中的context-param 、listener、 filter、servlet 加载顺序及其详解


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img