DWR与SpringMVC全注解整合 一个小错误浪费了我好几个小时
之前配置过DWR与SSH的整合
使用的就是把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/天,具体规则查看活动详情