DWR的搭建
【用途】DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用
【搭建步骤】
- 新建一个web工程
- 下载dwr.jar并且放到lib下面
- 配置web.xml
- 创建dwrDemo.java和dwrDemo.jsp文件
- 创建dwr.xml并配置
- 启动测试、总结
【项目框架图】
【jsp页面图】
访问地址 http://localhost:8080/MyProject/dwrDemo.jsp
直接上代码
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>MyProject</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<display-name>DWR Servlet</display-name>
<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>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>
</web-app>
dwrDemo.java
package control;
public class dwrDemo {
public String getSession(String name,String passwd) {
String OK=null;
if(name.equals("admin")&&passwd.equals("123456")) {
OK="sucess";
System.out.println("获取token");
}else {
OK="error";
}
return OK;
}
public int getOrder(int number) {
int order=0;
if(number==1) {
order=1;
}else {
order=0;
}
System.out.println("Order"+number);
return order;
}
}
dwrDemo.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<script type='text/javascript' src='<%=path%>/dwr/engine.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/interface/JDate.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/interface/dwrDemo.js'></script>
<script type='text/javascript' src='<%=path%>/dwr/util.js'></script>
<TITLE>DWR</TITLE>
<script>
function submitDwr() {
var name=document.ThisForm.name.value;
var passwd=document.ThisForm.passwd.value;
alert("-------login-start-------");
dwrDemo.getSession(name,passwd,callback);
}
function submitOrd() {
alert("-------order-start-------");
var number=document.ThisForm.number.value;
dwrDemo.getOrder(number,callback);
}
function callback(data) {
var sucess="sucess";
var error="error";
if(data==sucess){
alert("登陆成功"+data);
}
if(data==error){
alert("登陆失败"+data);
}
if(data==1){
alert("成功"+data);
}
if(data==0){
alert("失败"+data);
}
}
</script>
</HEAD>
<BODY>
<DIV>
<P class="STYLE1"><STRONG>DWR测试用例</STRONG></P>
<form name="ThisForm">
</br>
<b style="color: green">输入 admin 123456</b></br>
<input type="text" name="name"/>
<input type="password" name="passwd"/>
<input type="button" value="LOGIN" onclick="submitDwr()"/>
</br> </br> </br> </br>
<b style="color: green">输入 1</b></br>
<input type="text" name="number"/>
<input type="button" value="ORDER" onclick="submitOrd()"/>
</form>
</DIV>
</BODY>
</HTML>
dwr.xml
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://getahead.org/dwr/dwr10.dtd">
<dwr>
<allow>
<create creator="new" javascript="JDate">
<param name="class" value="java.util.Date"/>
</create>
<create creator="new" javascript="dwrDemo">
<param name="class" value="control.dwrDemo"/>
<!-- 类中不允许执行的方法,如果一个类中有5个方法,这2个不允许执行
<exclude method="getOrder"/>
<exclude method="getSession"/>
-->
<!-- 类中需要执行的方法,其他的方法都不允许执行
<include method="getOrder"/>
<include method="getSession"/>
-->
<!-- 只允许执行类中的这一个方法
<include method="getSession"/>
-->
</create>
</allow>
</dwr>
【遇到问题】
1.如何验证是搭建成功
http://localhost:8080/MyProject/dwr/index.html
【可以在此直接测试接口】
2.由于版本的问题,会出现dtd不匹配的问题
修改版本号或者直接删除,不引用dtd文件就好