SSH与DWR完美整合 带事例

SSH与DWR整合(什么是DWR):

SSH的整合在这里就不详述了

如果您还不会可以查看这里

下面我们开始SSH与DWR的整合吧:

1,我将与DWR相关的方法或类放在了一个统一的包里,以方便管理

emb.dwespring.dao  这个包下有一个类:


public class dwruserlogin {
	private Iuser iuser;
	public Iuser getIuser() {
		return iuser;
	}
	public void setIuser(Iuser iuser) {
		this.iuser = iuser;
	}
	
	public String dwruserloginok(String name , String pass){
		if(iuser.userlogin(name, pass)){
			return "success";
		}else{
			return "input";
		}
		
	}
	
	public String dwruserhas(String name){
		if(iuser.userlogin(name)){
			return "success";
		}else{
			return "input";
		}
		
	}
}
这个类里我定义了两个可以供DWR使用的方法。


dwruserloginok(String name , String pass)        这个是判断用户名和密码是否正确

dwruserhas(String name)                               这个是判断用户是否存在


2,下面我们开始编写web.xml


	<!-- 设置dwr信息 -->
	<!-- Ajax工程dwr的配置信息 -->
	<servlet>
		<servlet-name>dwr-web</servlet-name>
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
		<!-- ssh整合使用上面的class  否则org.directwebremoting.servlet.DwrServlet -->
		<!-- 是否允许调试,true为是 -->
		<init-param>
			<!-- 发布后请改为false 
				并且将action删除掉<constant name="struts.action.extension" value="action"/> 
			-->
			<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>
		<!-- 是否允许跨域请求,false为允许,默认为true -->
		<init-param>
			<param-name>crossDomainSessionSecurity</param-name>
			<param-value>false</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>dwr-web</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
	<!-- 配置dwr信息结束 -->
 上面的代码,其注释信息,相信大家一定看得懂吧。需要说明的是,在网站发布之后,必须关闭调试模式,并且删除struts.xml中添加的语句<constant name="struts.action.extension" value="action"/> 这条语句是解决dwr与action冲突的。因为action会对所有的请求进行过滤,因此也会对我们的dwr调试目录进行过滤了。


3,看看我们的dwr.xml里的内容,需要注意的是dwr是在web-inf目录下的


<?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>
		<create creator="spring" javascript="login" scope="application"> <param name="beanName" value="okuser" />
			<include method="dwruserloginok" />
		</create>
		<create creator="spring" javascript="register" scope="application">
			<param name="beanName" value="okuser" />
			<include method="dwruserhas" />
		</create>
		<convert converter="string" match="java.lang.String"/>
	</allow>

</dwr>

DWR的基本语法就如上面所示,这里解释一下:

    a,因为我们是与ssh整合,因此creator="spring" ,意思是,我们不必自己去实例化(这个值可以是new,其他值大家可以参考官方文档),而是去spring里去查找。

    b,javascript="login",这是我们前台要用到的名字

    c,scope这个就不说了吧

    d,<convert converter="string" match="java.lang.String"/>  这里表示,我们需要将这个java类转换成js可以用的string类型,当然需要注意的是,这个是可以不用写的,因为这个是默认的

    e,<param name="beanName" value="okuser" /> 这里面的beanName是指的将d转换的类型给他用,value里的okuser是spring里创建的bean,这里我也贴上spring里相关的代码:

    

    <bean name="okuser" class="emb.dwespring.dao.dwruserlogin">
    	<property name="iuser">
    		<ref bean="userimpl"/>
    	</property>
    </bean>
     f,<include method="dwruserhas" />这个表示只允许我们访问那些方法,如果不加这一条语句,表示默认的所有的public方法


    g,当然您看到了,可以在dwr里写上多条create,

    h,加入最新版的dwr.jar,大家可以去这里免费下载:http://directwebremoting.org/dwr/downloads/ 

    i,现在我们就可以运行我们的dwr进行查看了,最新版本的dwr的页面如下:


[caption id="attachment_376" align="alignnone" width="450"]dwr调试 dwr调试[/caption]

这里有两个连接,分别对应我们的两个方法,我们点击其中一个


[caption id="attachment_377" align="alignnone" width="787"]dwr方法 dwr方法[/caption]

大家可以看到,没有红色警告的就表示我们的可以访问的方法,我们可以输入数据进行查看。输入数据时,如果您的数据是字符型,一定不要忘记加双引号哦,否则会发生异常,不过大家可以去掉<convert converter="string" match="java.lang.String"/> 这个试试。

    j,上面出现了三个js,这三个都是我们需要的。我们需要在我们的jsp页面引入这三个js

    k,引入后应该怎么样呢,还是直接上代码吧,呵呵:


<script type="text/javascript">
	function loginok(){
		var username=$("#username").val();
		var password=$("#password").val();
		if(username==""||password==""){
			$("#msg").html("用户名或密码不能为空");
			return;
		}
		//试用dwr 传参并设置回调函数,回调函数在下面定义
		login.dwruserloginok(username,password,dingyihuidianhanshu);
	}
	//此处通过回调函数,把返回值给oklogin,然后进行判断
	//比如要有返回值,否则,密码和用户不匹配也会提交
	function dingyihuidianhanshu(oklogin1){
		if(oklogin1=="success"){
			$("#msg").html("验证成功,正在跳转");
			$("#loginid").submit();
			return true;

		}else{
			$("#msg").html("验证失败。请重新输入");
			return false;
		}
	}
</script>
上面的代码我已添加注释,如果您还看不到,请留言哈。


关于类型转换,DWR已经为我们提供了大量的creator和converter如:jsf,none,new,pageflow,spring,script,struts这几种creator,和null,enum,primitive,bignumber,string,array,map,collection, date,dom,dom4j,jdom,xom,servlet,bean,object,hibernate这几种convertor,如果您觉得不够用,可以自己写。

自此,我们SSH+DWR整合就成功了。



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