1、效果图示

横线上方的部分不动(没有刷新),下方实现刷新(异步刷新)

2、实现步骤

jquery+ajax+struts技术实现异步刷新功能的步骤:
    1、需要用到 jquery+ajax+struts 那么需要用几个包:(commons-logging-1.0.4.jar、freemarker-2.3.13.jar、ognl-2.6.11.jar、struts2-core-2.1.6.jar、xwork-2.1.2.jar、commons-fileupload-1.2.1.jar)
                  说明:  需要的包  六个基本包外加  json-lib.jar,struts2-json-plugin.jar,ezmorph.jar 这三个包
    
    2、加入 jquery.js ,调用 jquery里面的 ajax方法,$.get()、$.post()、$.getJSON();
    
    3、Action中 写 JSONObject
                          先将所有的值存入map中 ,然后将map集合转换为json对象
         JSONObject jo = JSONObject.fromObject(map);
    
    4、struts.xml中  设置result 的type=json  并且指定输入的 数据名称
        <result name="success" type="json">  
            <param name="root">outinfo</param>   
        </result>

3、相关代码

页面端(index.jsp)

 <%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="js/jquery.js" ></script> <script type="text/javascript">
$( function() {
//使用 Ajax 的方式 判断登录
$("#btn_login").click( function() {
var url = 'ajaxLogin.action';
//alert("===");
//获取表单值,并以json的数据形式保存到params中
var params = {
loginName:$("#loginName").val(),
password:$("#password").val(),
}; /* //使用$.post方式 $.post(url,params,function(data){data},'json');
$.post(
url, //服务器要接受的url
params, //传递的参数
function cbf(data){ //服务器返回后执行的函数 参数 data保存的就是服务器发送到客户端的数据
//alert(data);
//eval里面的字符串以JavaScript的方式执行 //比如:eval('alert('你好!')');
var member = eval("("+data+")"); //包数据解析为json 格式
$('#result').html("欢迎您: "+member.name+" -密码:"+member.pwd);
},
'json' //数据传递的类型 json
);
*/ //上面注释掉的部分,和下面三行代码的效果是一样的
$.getJSON(url,params,function(data){
var member = eval("("+data+")");
$("#result").html("欢迎您哟:"+member.name+" -密码:"+member.pwd);
});
});
});
</script>
</head> <body>
<span>用户名:</span>
<input type="text" id="loginName" name="loginName">
<br /> <span>密&nbsp;&nbsp;&nbsp;码:</span>
<input type="password" name="password" id="password">
<br /> <input type="button" id="btn_login" value="登录" /> <br />
<hr/>
<p>
这里显示ajax信息(即:异步刷新显示出下方的信息):
<br /><br />
<span id="result"></span>
</p>
</body>
</html>

struts.xml 配置文件

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="ajax" extends="json-default">
<action name="ajaxLogin" class="com.shore.ajax.ation.AjaxLoginAction">
<!-- 返回类型为json 在sjon-default中定义 -->
<result name="success" type="json">
<!-- root表示返回对象的层级为根部 root的值对应要返回的值的属性 -->
<!-- 这里的outInfo值即是 对应action中的 outInfo -->
<param name="root">outinfo</param> <!-- 输出到页面的信息,JavaScript函数中的data参数接收此值 -->
</result>
</action>
</package>
</struts>

Action层下的 AjaxLoginAction 类

 package com.shore.ajax.ation;

 import java.util.HashMap;
import java.util.Map; import net.sf.json.JSONObject; import com.opensymphony.xwork2.ActionSupport; /**
* @author DSHORE/2019-8-1
*
*/
public class AjaxLoginAction extends ActionSupport {
// 用户Ajax返回数据
private String outinfo; //输出信息 // struts的属性驱动模式,自动填充页面的属性到这里 (注入)
private String loginName;
private String password; @Override
public String execute() {
// 用一个Map做例子
Map<String, String> map = new HashMap<String, String>();
// 为map添加一条数据,记录一下页面传过来loginName
map.put("name", this.loginName);
map.put("pwd", this.password);
// 将要返回的map对象进行json处理
JSONObject jo = JSONObject.fromObject(map); // 调用json对象的toString方法转换为字符串然后赋值给outInfo
this.outinfo = jo.toString();
//测试一下outInfo的结果
System.out.println(this.outinfo); return SUCCESS;
} public String getOutinfo() {
return outinfo;
}
public void setOutinfo(String outinfo) {
this.outinfo = outinfo;
} public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
} public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

web.xml 配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

实例效果图

Java基础96 ajax技术的使用(servlet)

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/11284860.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

Java进阶知识01 Struts2下的 jquery+ajax+struts 技术实现异步刷新功能的更多相关文章

  1. Java进阶知识02 Struts2下的拦截器(interceptor)和 过滤器(Filter)

    一.拦截器 1.1.首先创建一个拦截器类 package com.bw.bms.interceptor; import com.opensymphony.xwork2.ActionContext; i ...

  2. Java进阶知识04 Struts2的基础配置详解

    1.Struts2的原理/流程步骤 简单的理解:    1.客户端发送一个request请求,Tomcat服务器接收到的请求经过web.xml配置文件去处理,进入struts2的核心过滤器,从而进入s ...

  3. Java进阶知识19 Struts2和Spring整合在一起

    1.概述 1.Spring负责对象创建  2.Struts2负责用Action处理请求  3.整合的关键点:让Struts2框架Action对象的创建交给Spring完成. 2.整合实例 需要用到的 ...

  4. Java进阶知识14 Struts2中的S标签

    1.A 开头 <s:a href=""></s:a> //超链接,类似于html里的<a></a> <s:action nam ...

  5. 2018.2.28 PHP中使用jQuery+Ajax实现分页查询多功能如何操作

    PHP中使用jQuery+Ajax实现分页查询多功能如何操作 1.首先做主页Ajax_pag.php 代码如下 <!DOCTYPE html> <html> <head& ...

  6. Java程序员之JS(一) 之 JQuery.ajax

    背景:紧着现在项目的需要,先从JQuery.ajax出发,主要需求是通过 js 调用Java 代码,从而适应现在的项目. 先从几个概念开始讲解: 一. 什么是Deferred  Deferred 对象 ...

  7. Java进阶知识26 SSH整合(Struts2、Spring、Hibernate)

    1.我用到的jar包 2.整合实例 2.1.数据库建表语句 create database school; -- 创建数据库 use school; -- 使用school数据库 create tab ...

  8. Java基础知识01

    1. String,StringBuffer和StringBuilder的区别? String:final修饰,String对象创建后不可修改:StringBuffer和StringBuilder对象 ...

  9. Java进阶知识25 Spring与Hibernate整合到一起

    1.概述 1.1.Spring与Hibernate整合关键点 1) Hibernate的SessionFactory对象交给Spring创建.    2) hibernate事务交给spring的声明 ...

随机推荐

  1. django 路由层 伪静态网页 虚拟环境 视图层

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...

  2. 从入门到自闭之Python集合,深浅拷贝(大坑)

    小数据池 int: -5~256 str: 字母,数字长度任意符合驻留机制 字符串进行乘法时总长度不能超过20 特殊符号进行乘法时只能乘以0 代码块: 一个py文件,一个函数,一个模块,终端中的每一行 ...

  3. LKM rootkit:Reptile学习

    简介 Reptile是github上一个很火的linux lkm rootkit,最近学习了一些linux rootkit的内容,在这里记录一下. 主要是分析reptile的实现 Reptile的使用 ...

  4. X86逆向13:向程序中插入Dll

    本章我们将学习Dll的注入技巧,我们将把一个动态链接库永久的插入到目标程序中,让程序在运行后直接执行这个Dll文件,这一章的内容也可以看作是第八课的加强篇,第八课中我们向程序中插入了一个弹窗,有木有发 ...

  5. 并不对劲的复健训练-bzoj5253:loj2479:p4384:[2018多省联考]制胡窜

    题目大意 给出一个字符串\(S\),长度为\(n\)(\(n\leq 10^5\)),\(S[l:r]\)表示\(S_l,S_{l+1}...,S_r\)这个子串.有\(m\)(\(m\leq 3\t ...

  6. es6 getter setter

    https://stackoverflow.com/questions/34517538/setting-an-es6-class-getter-to-enumerable 1. 我要 getter ...

  7. 【sublime Text】关闭sublime的更新提醒和激活提醒

    下载了原版的sublime Text,未激活的,每次启动都会提醒要去更新么?需要激活吧 ? 超级烦.[谁让没有激活呢?] 那没办法 ,激活吧! Help ---- Enter License--> ...

  8. Neo4j Cypher语法(二)

    目录 4 子句 4.1 CREATE 4.2 MATCH 4.3 Match 4.4 Create match return连用来返回一个关系基础 4.5 Optional_match 4.6 Wit ...

  9. 【zhifu】web开发中的支付宝支付和微信支付

    一.支付类型: 支付宝支付: 支付宝app内的网页支付: app外(即普通浏览器)网页支付: 微信支付: 微信app内的支付(在这里叫公众号支付) app外的支付(微信H5支付): 微信公众号的支付宝 ...

  10. Pytorch中randn和rand函数的用法

    Pytorch中randn和rand函数的用法 randn torch.randn(*sizes, out=None) → Tensor 返回一个包含了从标准正态分布中抽取的一组随机数的张量 size ...