struts2实现ajax交互
- 格式:pdf
- 大小:377.24 KB
- 文档页数:16
在上一篇博文中已经学习了如何整合mybatis和spring,实现持久层的CRUD操作、业务层的事务管理和spring的IoC。
现在我们这个demo的基础上,继续整合struts2,并利用json插件和jquery实现ajax,完成后系统将实现登录与注册的简单功能。
浏览器端如何简单、高效地与服务器端进行数据交互是web开发者最为关心的内容。
在客户端构造intput表单数据或者拼凑URL参数名称/参数值,然后在服务器端笨拙地用request.getParameter(“参数名称”)获取参数显然已经过时了,在struts2中,只要在action 里定义了input表单名称/URL参数名称对应的String类型属性,并设置getter和setter 方法,struts2在调用action的时候就可以根据参数值自动帮你设置好action中对应的属性值供你使用,这极大地方便了开发者。
但是json更为强大——它可以根据浏览器端上传的符合格式的数据设置action中对象的值,也就是说,struts2自动封装的数据只有一层,而json是无限层。
json给页面参数的传递带来极大的方便,结合jquery来使用,可以轻易地做到页面局部刷新、页面无跳转进行友好的系统异常提示等,其中后者是我觉得最有必要做到的一点,在action中定义一个message变量,把action方法执行的结果或者系统异常信息放到里面以json的方式返回给客户端,客户端根据这个变量的结果来进行下一步的操作或者提示系统异常信息,非常地好用。
json由javascript中的对象和数组构成,基本形式是{key:value},key为属性名称,value 为属性值,value可以为数字、字符串、数组、对象,value可以为数组和对象是json可以封装无限层数据的关键所在。
至于如何建构和解析json不是本篇博文的详细表述范围,请参考其他资料。
现在就让我们利用struts2作为MVC框架,整合json插件,在浏览器端使用jquery解析和系列化json数据,由此制作一个具有登陆/注册功能的小demo。
下面是在Ecl ipse环境下的AJ AX利用JS ON插件和St rut s2结合实现省市县连动的例子首先,登录h ttp://str uts.ap ach e.o rg/do wnl oad.cg i#S tru ts206站点,下载Stru ts2的最新GA版;登录http://cod e.g oog /p/jso npl ugi n/dow nlo ads/li st下载JS ON插件的JAR包。
在Ecl ipse下新建一个Web项目,命名为str uts2_a jax,把下载的压缩包解压,将里面的lib文件夹下的Str uts2-c ore-2.0.6.j ar、xwo rk-2.0.1.Jar、og nl-2.6.11和JSON插件的J AR包等必需类库(图1-2)复制到/W ebR oot/WE B-I NF/lib目录下。
编辑w eb应用的web.xml文件,配置S tru ts2的核心F ilt er,下面是增加了S tru ts2的核心Fi lter配置的w eb.xml文件的代码:<?xm l v ers ion="1.0" en cod ing="G BK"?><w eb-app ve rsi on="2.4" xml ns="h ttp://jav a.s /xm l/n s/j2ee"xmln s:x si="ht tp://w /2001/XM LSc hem a-i nst anc e"xsi:sch ema Loc ati on="ht tp://j ava.su /xm l/n s/j2eehttp://jav a.s /xm l/n s/j2ee/we b-app_2_4.x sd"><f ilt er><f ilt er-nam e>s tru ts2</f ilt er-na me><f ilt er-cla ss>org.ap ach e.s tru ts2.di spa tch er.Fi lte rDi spa tch er</fil ter-cl ass></fil ter><f ilt er-map pin g><f ilt er-nam e>s tru ts2</f ilt er-na me><u rl-pat ter n>/*</url-pa tte rn></fil ter-ma ppi ng></we b-a pp>经过以上几步,我们可以在一个W EB应用中使用S tru ts2的基本功能了。
jsajax请求的五个步骤AJAX(Asynchronous JavaScript and XML)是一种使用JavaScript和XML来进行异步数据交互的技术。
它通过在不重新加载整个页面的情况下,动态地更新部分页面内容,提高用户体验和页面加载速度。
下面将详细介绍AJAX请求的五个步骤。
第一步:创建XMLHttpRequest对象在JavaScript中,可以使用XMLHttpRequest对象来发送AJAX请求。
该对象允许与服务器交互,并从服务器获取数据。
我们可以通过以下代码来创建XMLHttpRequest对象:```var xhr = new XMLHttpRequest(;```第二步:设置请求参数在发送AJAX请求之前,需要设置一些请求参数,例如请求类型、URL、是否异步、请求头、请求体等。
以下是设置请求参数的示例:```xhr.setRequestHeader('Content-Type', 'application/json');```第三步:设置回调函数在接收到服务器响应后,需要执行一些操作,例如更新页面内容、处理返回的数据等。
为此,我们需要设置一个回调函数,用于处理服务器响应。
通常有四个回调函数可用:- onreadystatechange:当请求状态发生变化时触发- onload:当请求成功完成时触发- onprogress:在接收服务器响应期间触发- onerror:在请求发生错误时触发以下是设置回调函数的示例:```xhr.onreadystatechange = functioif (xhr.readyState === 4 && xhr.status === 200)//执行操作}};```第四步:发送请求当所有准备工作都完成后,可以调用send方法来发送AJAX请求。
如果是GET请求,可以将参数放在URL中;如果是POST请求,需要将参数作为send方法的参数传递。
ssh试题一、选择题(共60分,每题2分,可多选)1.struts 2框架通过struts prepare and execute过滤器拦截用户的请求,该过滤器是C(a)一个特殊的servlet(b)拦截器(C)过滤器(d)转发器2.关于struts2框架,下面哪些说法是正确的?bc(a)struts2框架可以脱离web容器运行;(b)struts2框架的运行环境是web容器;默认配置文件是struts。
3框架xml(b)struts。
xml(c)struts插件。
xml(d)默认为struts。
xml4.struts2框架使用default.properties文件定义运行时的参数,所定义的参数可以在struts.xml文件中覆盖,如果覆盖应使用什么标签?c(a)(b)(c)(d)5.关于action类,以下哪项陈述是正确的?BD(a)要定义action类,必须实现action接口;(b)任何跳转字符串都可以在操作中定义;(c)必须在操作中定义execute方法;(b)在struts中,在XML文件中配置action类;7.关于actionsupport类,下面正确的说法是:bd(a)编写action类必须继承actionsupport类;(b) Actionsupport类,提供访问国际邮件资源文件的方法;(c) Actionsupport 类提供struts 2框架的内置验证器;(d)利用actionsupport类的validate方法可以实施自定义验证;8.规范用户提交数据的合理方案是:(c)d(a)实现JavaScript验证;(b)实现struts 2的内置验证;(c)实现Ajax技术的验证;(d)实施javascript验证和struts2的服务器端验证;9.现有程序控制逻辑。
Java和控件操作。
Java和登录JSP以及reigist JSP页面,在struts中,XML的配置如下:{2}.jsp一则下面正确的论述是:d(a)通过请求登录JSP页面访问注册表;(b)通过请求登录JSP页面访问登录;(c)通过请求注册JSP页面访问登录;(d)访问登录。
$.ajax使用方法$.ajax是jQuery中的一个方法,用于执行异步HTTP(Ajax)请求。
以下是$.ajax的基本使用方法:1.创建请求:```javascript$.ajax({url:"example.php",//请求的URL地址type:"GET",//请求方式,GET或POST dataType:"json",//预期服务器返回的数据类型,可以是xml、json、script、html等success:function(data){//请求成功后的回调函数console.log(data);//输出服务器返回的数据},error:function(){//请求失败时的回调函数console.log("请求失败");}});```2.发送数据:```javascript$.ajax({url:"example.php",type:"POST",data:{foo:"bar"},//要发送到服务器的数据,以键值对的形式表示dataType:"json",success:function(data){console.log(data);},error:function(){console.log("请求失败");}});```3.处理服务器响应:在成功回调函数中,服务器返回的数据作为参数传递给回调函数。
可以根据需要处理这些数据,例如更新页面内容或执行其他操作。
4.配置选项:$.ajax方法接受一个配置对象作为参数,其中包含以下选项:-`url`:请求的URL地址。
-`type`:请求方式,默认为"GET"。
-`dataType`:预期服务器返回的数据类型,默认为"html"。
Struct2_使⽤Ajax调⽤Action⽅法并返回值⼀、Login.jsp1、<head>引⼊jquery:<script type="text/javascript"src="/ajax/jQuery/jquery-1.7.1.js"></script>2、界⾯控件:⽤户名:<input type="text"id="userName"><input type="button"id="btnAjax"value="Ajax调⽤"/>3、提交ajax请求<script type="text/javascript">$(function() {$("#btnAjax").click(function() {var userName = $("#userName").val().trim();if (userName == '') {alert("⽤户名不能为空");return false;}//login1为Action类命名空间名称;AjaxExecute为Action⽅法名称$.ajax({type : "post",url : '/login1/ajaxExecute',data : {//设置数据源userName : userName,password : "我是密码"},dataType : "json",//设置需要返回的数据类型success : function(d) {alert(d.sayHi);},error : function(d) {alert(d.responseText);}});});});</script>⼆、后台类:LoginActionNoNamespcepackage action;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import org.apache.struts2.convention.annotation.Action;import space;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.interceptor.validation.SkipValidation;import freemarker.template.SimpleDate;@ParentPackage("json-default")@Namespace("/login1")public class LoginActionNoNamespce extends SuperActionSupport {private static final long serialVersionUID = 1L;private Map<String, String> dataMap;//会把本类所有getter⽅法序列化成字符串返回给jsp页⾯public Map<String, String> getDataMap() {return dataMap;}public void setDataMap(Map<String, String> dataMap) {this.dataMap = dataMap;}@SkipValidation@Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) })public String ajaxExecute() throws Exception {this.dataMap = new HashMap<String, String>();// 参数名称必须和jsp的空间名称⼀⼀对应String userName = request.getParameter("userName");String password = request.getParameter("password");dataMap.put("isSuccess", "true");SimpleDateFormat now = new SimpleDateFormat("yyyy年MM⽉dd⽇ HH时mm分ss秒");dataMap.put("sayHi", "Hi:" + userName + " 当前时间为:" + now.format(new Date()) + password);return SUCCESS;}}三、注意事项1. 类注解:@ParentPackage("json-default"),⽐如为json-default,不能为struts-defaultjson-default是继承于structs-default的,见.m2\repository\org\apache\struts\struts2-json-plugin\2.3.16.3\struts2-json-plugin-2.3.16.3.jar\struts-plugin.xml2. Action注解:@Action(value = "ajaxExecute", results = { @Result(type = "json", params = { "root", "dataMap" }) }),这⾥的type必须为json、root是固定值,去掉params节点会返回undefined3. 这⾥的dataMap定义为:private Map<String, String> dataMap;必须要添加getter、setter参数,否则返回null4. JSP页⾯(这⾥可以⽤命名空间,如url : '/login1/ajaxExecute', @ParentPackage("json-default")这样设置就不会报错)5. maven管理,需要引⽤的库<dependencies><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.3.16</version><exclusions><exclusion><groupId>org.javassist</groupId><artifactId>javassist</artifactId></exclusion></exclusions></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-convention-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>2.3.16.3</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version></dependency></dependencies>。