DWR的配置以及常见错误的处理

最近学习DWR,mark下

DWR框架常用于用户名的验证和注册

1.DWR介绍

DWR就是可以在javascript里面直接调用Java代码,它的实现是基于Ajax,可以实现无刷新效果(数据与服务器进行交互,用户完全感觉不到)

2.DWR配置和使用

1)web.xml的配置

<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

通常要看DWR生成的测试页,通过测试页执行可以直接检测你写的java类代码正确性,

可以在上面servlet标签里面加入:

<init-param>
  <param-name>debug</param-name>
  <param-value>true</param-value>
</init-param>

就可以访问网址:http://localhost:8080/app/dwr,查看运行(app为你创建的项目名称)

2)dwr.xml(新建这个xml文件在WEB-INF目录下)

下面的配置适合于js调用没有返回值和参数的java方法

配置dwr.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr30.dtd">               //这行标签一定加上,否则会有错误
<dwr>
<allow>
<create creator="new" javascript="userdao" >       
<param name="class" value= "com.dao.userDao" />

<include method="checkUser"/>
</create>           //creator表示实例的生成方式为new,DWR会调用类的默认构造函数来构造

                          //javascipt表示java类让js访问类的对象时的名称,param表示公开给js的java类,

                          //include是公开给js的java方法,exclude表示禁止公开的java方法,如果不写include标签就代表此java类的所有方法都公开

</allow> 

</dwr>

js调用:

先引入 javascript 脚本

<script src='dwr/interface/ userdao.js'></script>

<script src='dwr/engine.js'></script>

<script src='dwr/util.js'></script>

其中 userdao.js 是 dwr 根据配置文件公开给js的java对象的名称, engine.js 和 util.js 是 dwr 自带的脚本文件。

其次,编写调用 java 方法的 javascript 函数

Function check(){

      userdao.checkUser();

}

3.错误

web.xml的<servlet>标签下面加入下面代码,跨域访问

<init-param>

<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>

我做的一个用户名验证和注册时出现的错误:(你可能也会有的)

User:用户的实体类

UserDao:用户和数据库交互的类,方法checkUser(String name)检查用户名是否存在,

方法addUser(User user)来注册用户,(注意我传进来的是一个对象)

给方法传进来对象怎么解决?

在dwr.xml中配置<convert>标签

<convert converter="bean" match="com.bean.User" >

   <param name="include" value="username,password"></param>

</convert>

Bean转换器,match为javabean的目录,param制定要转换的javabean的属性

js接受到表单的数据,你可以用json的格式表示,比如:

var user={username:”zhangsan”,password:”123”};

转换器可以自动把json格式的数据转换为javabean的形式,new创建一个实例,通过set和get函数把参数传给对象。

(一定要注意,实体类User一定要有空的构造函数,没有会出现Error错误的)

注册还有传值方式:

js直接传进来的是两个参数,java的方法参数是usernamepassword

或者

传给Java的是jsonjava导入json类库来解析json数据

 我的实验的一些配置和主页代码:(web.xml,dwr.xml,index.jsp)

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <?xml version="1.0" encoding="UTF-8"?>
  3 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4     xmlns="http://java.sun.com/xml/ns/javaee"
  5     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  6     id="WebApp_ID" version="3.0">
  7     <display-name>Test</display-name>
  8     <welcome-file-list>
  9         <welcome-file>index.html</welcome-file>
 10         <welcome-file>index.htm</welcome-file>
 11         <welcome-file>index.jsp</welcome-file>
 12         <welcome-file>default.html</welcome-file>
 13         <welcome-file>default.htm</welcome-file>
 14         <welcome-file>default.jsp</welcome-file>
 15     </welcome-file-list>
 16     <servlet>
 17         <servlet-name>dwr-invoker</servlet-name>
 18         <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
 19         <init-param>
 20             <param-name>debug</param-name>
 21             <param-value>true</param-value>
 22         </init-param>
 23         <init-param>
 24             <param-name>crossDomainSessionSecurity</param-name>
 25             <param-value>false</param-value>
 26         </init-param>
 27     </servlet>
 28     <servlet-mapping>
 29         <servlet-name>dwr-invoker</servlet-name>
 30         <url-pattern>/dwr/*</url-pattern>
 31     </servlet-mapping>
 32 
 33 </web-app>
 34 <!DOCTYPE dwr PUBLIC
 35 "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
 36 "http://www.getahead.ltd.uk/dwr/dwr30.dtd">
 37 <dwr> 
 38 <allow> 
 39 <create creator="new" javascript="userdao" > 
 40 <param name="class" value= "com.dao.userDao" /> 
 41 <include method="checkUser"/>
 42 <include method="addUser"/>
 43 </create> 
 44 <convert converter="bean" match="com.bean.User" >
 45     <param name="include" value="username,password"></param>
 46 </convert>
 47 
 48 </allow> 
 49 </dwr> 
 50 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 51 <%
 52 String path = request.getContextPath();
 53 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 54 %>
 55 
 56 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 57 <html>
 58   <head>
 59     <base href="<%=basePath%>">
 60     
 61     <title>My JSP 'index.jsp' starting page</title>
 62     <meta http-equiv="pragma" content="no-cache">
 63     <meta http-equiv="cache-control" content="no-cache">
 64     <meta http-equiv="expires" content="0">    
 65     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 66     <meta http-equiv="description" content="This is my page">
 67     <!--
 68     <link rel="stylesheet" type="text/css" href="styles.css">
 69     -->
 70   </head>
 71 
 72 
 73 <body align=center>
 74   <h1>  用户注册</h1> <br>
 75   用户名:<input type="text" id="username" onblur="check()">&nbsp<span id="msg" style="color:red;"></span><br>
 76   密码:<input type="text" id="password"><br>
 77   <input type="button" value="注册" onclick="submit()">
 78   </body>
 79   <script src='dwr/interface/userdao.js'></script>
 80 <script src='dwr/engine.js'></script>
 81 <script src='dwr/util.js'></script>
 82   <script type="text/javascript">
 83  function check(){
 84    var name=document.all.username.value;
 85    userdao.checkUser(name,onData);
 86   }
 87   function onData(result){
 88     if(result==false){
 89       document.getElementById("msg").innerHTML="用户名可以注册";
 90     }else{
 91      document.getElementById("msg").innerHTML="用户名重复了";
 92     }
 93   }
 94   function submit(){
 95      var user;
 96      user={username:document.all.username.value,password:document.all.password.value};
 97      //alert(JSON.stringify(user));
 98      userdao.addUser(user,onRe);
 99   }
100   function onRe(dat){
101      if(dat>0){
102        alert("注册成功");
103      }
104      else{
105        alert("注册失败");
106      }
107      }
108   </script>
109 </html>
View Code

一些运行结果:

猜你喜欢

转载自www.cnblogs.com/wang118/p/9146928.html
今日推荐