最近学习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的方法参数是username和password。
或者
传给Java的是json,java导入json类库来解析json数据
我的实验的一些配置和主页代码:(web.xml,dwr.xml,index.jsp)
1 2 37 34 37Test 89 16index.html 10index.htm 11index.jsp 12default.html 13default.htm 14default.jsp 1517 28dwr-invoker 18uk.ltd.getahead.dwr.DWRServlet 1920 23debug 21true 2224 27crossDomainSessionSecurity 25false 2629 32 33dwr-invoker 30/dwr/* 3138 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 57 58 5939 4940 41 4442 43 45 46 47 4860 61 My JSP 'index.jsp' starting page 62 63 64 65 66 67 70 71 72 73 74用户注册
75 用户名: 76 密码: 77 78 79 80 81 82 109
一些运行结果: