Struts2 与 DWR篇

Ajax非常完美的改善了用户体验,使用户体验了一种连续的状态,避免了传统的Web应用进行请求——等待——响应的流程。Ajax使用户可以连续的发送多次异步请求,不需要服务器响应。当服务器的相应成功返回浏览器时,浏览器利用DOM将服务器相应数据加载到当前页面的相应容器中。

Struts2的Ajax支持需要建立在DWR和Dojo这两个成熟的Ajax框架。Struts2在两个成熟的Ajax框架上进一步封装,从而简化了Ajax的开发。

  1. DWR

是一个改善Web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含Ajax技术的网站。

Ajax的输入校验不是基于客户端,而是基于服务器端,是以异步方式实现的校验方式。

Java是同步的,而Ajax是异步的。所以当你调用一个远程方法时,你要给DWR一个回调函数,当数据从网络上回来时,DWR会调用这个函数。

DWR包含 2个主要部分:

(1) 一个运行在服务器端的Java Servlet,它处理请求并且向浏览器发回响应。 
(2) 运行在浏览器端的JavaScript,它发送请求而且还能动态更新网页。 
     DWR工作原理是通过动态把Java类生成为Javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java 到JavaScript的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。

  • 下载与配置DWR

1)在web应用中加载DWR的Jar包

目前2.0尚不支持struts2

如果是用dwr2.0的jar包,还需要同时导入log4j.jar和commons-loggin.jar包

2)放入WEB-INF/目录下

3)配置web.xml文件(配置DWR的核心Servlet,该Servlet负责将服务器端的Java方法暴露出来)

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <welcome-file-list>  
  8.     <welcome-file>index.jsp</welcome-file>  
  9.   </welcome-file-list>  
  10.   <filter>  
  11.         <filter-name>struts</filter-name>  
  12.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  13.         <init-param>  
  14.             <param-name>actionPackages</param-name>  
  15.             <param-value>org.apache.struts2.showcase.person</param-value>  
  16.         </init-param>  
  17.            
  18.     </filter>  
  19.     <filter-mapping>  
  20.         <filter-name>struts</filter-name>  
  21.         <url-pattern>/*</url-pattern>  
  22.     </filter-mapping>  
  23.     <!-- 在web.xml中配置的Dwr的核心Servlet -->  
  24.   <span style="color:#ff0000;"><servlet>  
  25.      <servlet-name>dwr</servlet-name>  
  26.      <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
  27.      <init-param>  
  28.         <param-name>debug</param-name>  
  29.         <param-value>true</param-value>  
  30.      </init-param>  
  31.   </servlet>  
  32.   <servlet-mapping>  
  33.      <servlet-name>dwr</servlet-name>  
  34.      <url-pattern>/dwr/*</url-pattern>  
  35.   </servlet-mapping>  
  36. </span></web-app>  

4)Java方法被暴露出来了,但是具体要暴露哪些方法,需要在dwr.xml中配置被暴露的方法,且dwr.xml需要房子WEB-INF/lib目录下

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3.     <!-- START SNIPPET: dwr -->  
  4. <!DOCTYPE dwr PUBLIC   
  5.     "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"   
  6.     "http://www.getahead.ltd.uk/dwr/dwr10.dtd">  
  7.   
  8. <dwr>  
  9.     <allow>  
  10.         <create creator="new" javascript="validator">  
  11.             <param name="class" value="org.apache.struts2.validators.DWRValidator" />  
  12.         </create>  
  13.         <convert converter="bean"  
  14.             match="com.opensymphony.xwork2.ValidationAwareSupport" />  
  15.     </allow>  
  16.   
  17.     <signatures>  
  18.         <![CDATA[ 
  19.         import java.util.Map; 
  20.         import org.apache.struts2.validators.DWRValidator; 
  21.  
  22.         DWRValidator.doPost(String, String, Map<String, String>); 
  23.         ]]>  
  24.     </signatures>  
  25. </dwr>  

dwr.xml配置文件中,将org.apache.struts2.validators.DWRValidator类创建成一个JavaScript对象,名为validator。DWR框架提供中方式,允许客户端调用validator的方法时,转换成调用DWRValidator实例的方法。

4)建立前台Jsp登陆页面

[javascript]  view plain  copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3. <%  
  4. String path = request.getContextPath();  
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  6. %>  
  7.   
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  9. <html>  
  10.   <head>  
  11.     <base href="<%=basePath%>">  
  12.       
  13.     <title>My JSP 'index.jsp' starting page</title>  
  14.       
  15.     <meta http-equiv="pragma" content="no-cache">  
  16.     <meta http-equiv="cache-control" content="no-cache">  
  17.     <meta http-equiv="expires" content="0">      
  18.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  19.     <meta http-equiv="description" content="This is my page">  
  20.     <!--  
  21.     <link rel="stylesheet" type="text/css" href="styles.css">  
  22.     -->  
  23.       
  24.   </head>  
  25.     
  26.   <body>  
  27.   <s:head theme="ajax"/>  
  28.     <s:form method="post" action="rs" validate="true" theme="ajax">  
  29.             <s:textfield label="用户名" name="username" />             
  30.             <s:password label="密码" name="password"></s:password>  
  31.             <s:textfield label="年龄" name="age"></s:textfield>  
  32.             <s:submit value="注册" />  
  33.         </s:form>           
  34.   </body>  
  35. </html>  

注意的是:需要将表单设置为Ajax主题,并且设置validate="true".当某个输入组件失去焦点时,系统将负责将输入内容发送到服务器端进行校验。
5)建立Action类

[java]  view plain  copy
  1. import com.opensymphony.xwork2.ActionSupport;  
  2.   
  3. @SuppressWarnings("serial")  
  4. public class ReAction extends ActionSupport {  
  5.     private String username;  
  6.     private String userpass;  
  7.     private int age;  
  8.     public int getAge() {  
  9.         return age;  
  10.     }  
  11.     public void setAge(int age) {  
  12.         this.age = age;  
  13.     }  
  14.     public String getUsername() {  
  15.         return username;  
  16.     }  
  17.     public void setUsername(String username) {  
  18.         this.username = username;  
  19.     }  
  20.     public String getUserpass() {  
  21.         return userpass;  
  22.     }  
  23.     public void setUserpass(String userpass) {  
  24.         this.userpass = userpass;  
  25.     }  
  26.     public String execute() throws Exception{  
  27.         return SUCCESS;  
  28.     }  
  29. }  


action类用于接收前台数据

6)建立相应的struts.xml文件

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6. <constant name="struts.devMode" value="true"></constant>  
  7. <constant name="struts.il8n.encoding" value="gbk"></constant>  
  8.     <package name="ge" extends="struts-default">  
  9.        <action name="rs" class="com.zhuxuli.action.ReAction">  
  10.           <result name="input">/index.jsp</result>  
  11.           <result name="success">/success.jsp</result>  
  12.        </action>  
  13.     </package>  
  14. </struts>  

7)现在一个完整的登陆流程都写完了,最后差的一点就是需要在action包下面配置一个校验文件了

注意,本流程是用户登陆的Ajax验证,文件名为:“action类名-validation.xml”

[html]  view plain  copy
  1. <!DOCTYPE validators PUBLIC   
  2.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"   
  3.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  4.           
  5. <validators>  
  6.     <field name="username">  
  7.         <field-validator type="requiredstring">  
  8.             <message>用户名不能为空</message>  
  9.         </field-validator>  
  10.     </field>  
  11.     <field name="userpass">  
  12.         <field-validator type="requiredstring">  
  13.             <message>密码不能为空</message>  
  14.         </field-validator>  
  15.     </field><field name="age">  
  16.         <field-validator type="int">  
  17.             <param name="min">1</param>  
  18.             <param name="max">100</param>  
  19.             <message>年龄必须在1到100之间</message>  
  20.         </field-validator>  
  21.     </field>    
  22. </validators>  

现在一个完整的DWR in struts2的验证模式已经成功。

转载出处:https://blog.csdn.net/zhuali_linkin/article/details/7272231

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值