javaEE(2)——EL,jstl,Ajax

1 EL表达式

${}
从小到大:page, request, session, application(Context)
${name}
指定某个作用域查找:
${applicationScope.name}
${requestScope.name}

eq, ne…
在这里插入图片描述
保留字:
在这里插入图片描述
MVC:
M:model——javabean,dao,service,util,entity
V:view——jsp,html
C:control——servlet

2 jstl国际标签库

配置JSTL:
如果需要在JSP中使用JSTL,需要使用JSP的指令元素< %@taglib uri=" " prefix=" " % >分别指定JSTL的URI和标签库前缀。
如:< %@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”% >

在这里插入图片描述

2.1 Core标签

core标签库主要包括:
一般用途的标签:out / set / remove / catch
条件标签:if / choose / where / otherwise
迭代标签:foreach / forTokens
URL相关标签:import / url / redirect / param

如何在JSP页面中使用core标签库:
< %@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”% >

标签描述语法
<c:out>用于在JSP中显示数据,就像<%= … ><c:out value="<要输出内容>" default="<输出的默认值>" escapeXml="<true
<c:set>用于保存数据<c:set var="<存储信息变量>" value="<要存储的值>" target="<要修改的属性所属的对象>" property="<要修改的属性>" scope="<var属性的作用域>"/>
<c:remove>删除数据<c:remove var="<要移除的变量名称>" scope="<变量所属的作用域>"/>
<c:catch>用来处理产生错误的异常状况,并且将错误信息储存起来<c:catch var="">…</c:catch>
<c:if><c:if test="<boolean条件>" var="" scope=""> …</c:if>
<c:choose>本身只当做<c:when>和<c:otherwise>的父标签<c:choose><c:when test=""> …</c:when> <c:when test=""> …</c:when>…<c:otherwise>…</c:otherwise></c:choose>
<c:forEach>基础迭代标签,接受多种集合类型<c:forEach items="" begin="" end="" step="" var="" varStatus="">
<c:forTokens>根据指定的分隔符来分隔内容并迭代输出多一个属性delims="<string分隔符>"

2.2 functions

Functions标签库分为两大类,共16个函数。
URI: http://java.sun.com/jsp/jstl/functions
前缀: fn
格式:${fn:函数名(参数)}

函数语法描述
fn:length${fn:length(sessionScope.arrayList1)}对集合的长度取值
fn:contains${fn:contains(“ABC”, “a”)},返回“ false ”判断源字符串是否包含子字符串
fn:containsIgnoreCase${fn:startsWith (“ABC”, “ab”)},返回“ false ”忽略大小写判断源字符串是否包含子字符串
fn:endsWith${fn:endsWith(“ABC”, “bc”)},返回“ false ”判断源字符串是否符合一连串的特定词尾
fn:escapeXml字符实体转换将所有特殊字符转化为字符实体码,包含一个 string 参数,返回一个 String 类型的值
fn:indexOf${fn:indexOf(“ABCD”,“BC”)},返回位置的下标,为 1取得子字符串与源字符串匹配的开始位置,若子字符串与源字符串中的内容没有匹配成功将返回 -1
fn:join允许为一个字符串数组中的每一个字符串加上分隔符,并连接起来
fn:replace${fn:replace(“ABC”,“A”,“B”)},“BBC”允许为源字符串做替换的工作,返回String类型的值
fn:split${fn:split(“A,B,C”,",")},将“ A,B,C ”字符串转换为数组 {A,B,C}
fn:substring${fn:substring(“ABC”,“1”,“2”)},结果为“ B ”截取字符串,第2,3参数为开始结束下标
fn:substringBefore${fn:substringBefore(“ABCD”,“BC”)},结果为“ A ”允许截取源字符从开始到某个字符串
fn:toLowerCase${fn:toLowerCase(“ABCD”)},结果为“ abcd ”将源字符串中的字符全部转换成小写字符
fn:toUpperCase大写转换
fn:trim删除源字符串中结尾部分的“空格”以产生一个新的字符串

fn:join:
<% String[] stringArray = {“a”,“b”,“c”}; %>
<% request.getSession().setAttribute(“stringArray”, stringArray);%>
${fn:join(sessionScope.stringArray,";")}
定义数组并放置到 Session 中,然后通过 Session 得到该字符串数组,使用 fn:join 函数并传入分隔符“ ; ”,得到的结果为“ a;b;c ”。
参考博客:
https://blog.csdn.net/nlcold/article/details/7237335

3 Ajax

用于创建快速动态网页的技术。
AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行显示。
使用 AJAX 的应用程序案例:谷歌地图、腾讯微博、优酷视频、人人网等等。

3.1 Ajax提交form表单方法

1、无返回结果的:就是把表单数据直接提交给后台,让后台直接处理;最简单的就是$(“#formid”).submit(); 直接将form表单提交到后台。

2、返回有结果的:这种情况下,后台不管是执行成功还是失败,最终的信息都需要返回到前台。

第二种是使用最多的一种,因为程序的执行成功与否都需要给用户提示,程序一般也都是多步完成的,执行完插入操作,需要发起流程,这就需要在界面上判断成功与否。Ajax本身属于有返回结果的一类,其中的success方法就是处理后台返回结果的。

AJAX提交表单有返回结果的有两种实现方式:
1.将form表单数据序列化

<span style="font-size:18px;">  $.ajax({  
    type: "POST",  
    url:your-url,  
    data:$('#yourformid').serialize(),  
    async: false,  //默认true,异步
    error: function(request) {  
        alert("Connection error");  
    },  
    success: function(data) {  
        //接收后台返回的结果  
    }  
  });</span> 
// 需要注意的是,使用这种方法的前提是form表单中的项一定要有name属性,后台获取的键值对为key=name 值,value=各项值。

无论是input标签还是span标签或者其他标签,一定要有name属性,没有name属性后台是获取不到该项的.

2.通过窗口查找form提交

<span style="font-size:18px;">  // 提交表单  
  var obj = document.getElementById("xx_iframe").contentWindow;  
  obj.$("#yourform").form("submit",{  
    success :function(data){  
        //对结果处理  
    }    
  });</span>

因为在当前界面上弹出对话框,然后在对话框上的按钮触发对话框中表单提交,对话框又是链接的另外的html页面,如此通过$(“#formid”)的方式是找不到对话框中的form的,因此这种情况下只能使用这种方式提交表单。
另外ajax中封装的get,post请求也都属于有返回结果的一类。
总的来说,无返回结果的和有返回结果的(将form表单数据序列化+通过窗口实现form提交),form表单都必须要有name属性。

3.2 四种常用的Ajax请求方式

  1. $.ajax()返回其创建的 XMLHttpRequest 对象
    $.ajax() 只有一个参数:参数key/value对象,包含各配置及回调函数信息。
    如果你指定了dataType选项,那么需要保证服务器返回正确的MIME信息,(如 xml 返回 “text/xml”)。
$.ajax({
	type: "post",
	dataType: "html",
	url: '/Resources/GetList.ashx',
	data: dataurl,
	success: function (data) {
		if (data != "") {
			$("#pager").pager({ pagenumber: pagenumber, pagecount: data.split("$")[1], buttonClickCallback: PageClick });
			$("#anhtml").html(data.split("$")[0]);
		}
	}
});
  1. 通过远程 HTTP GET 请求载入信息
    相比于复杂的$ .ajax而言,GET请求功能则显得更加简单,请求成功时可调用回调函数。当然如果需要在出错时执行函数,那么还请使用$ .ajax
$.get("test.cgi", { name: "John", time: "2pm" },
	function(data){
		alert("Data Loaded: " + data);
});
  1. 通过远程 HTTP POST 请求载入信息
    POST请求功能也相对比较简单,请求成功时可调用回调函数。如果需要在出错时执行函数,那么请使用$.ajax请求。
$.post("/Resources/addfriend.ashx", { 
	"fid": fids, "fname": fnames, "tuid": tuids, "tuname": tunames 
},function (data) {
	if (data == "ok") {
		alert("添加成功!");
	}
})
  1. 通过 HTTP GET 请求载入 JSON 数据
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
	$.each(data.items, function(i,item){
		$("<img/>").attr("src", item.media.m).appendTo("#images");
		if ( i == 3 ) return false;
	});
});

3.3 Ajax 异步,同步刷新区别

同步请求会阻止用户,直到检索到响应,而异步不会阻止用户。

同步:当JS代码加载到当前AJAX的时候,会把页面里所有的代码停止加载,页面出现假死状态,当这个AJAX执 行完毕后才会继续运行其他代码页面假死状态解除。
异步:这个AJAX代码运行中的时候其他代码一样可以运行。
jquery的async:false,这个属性默认是true:异步,false:同步。

$.ajax({ 
	type: "post", 
	url: "path", 
	cache:false, 
	async:false, 
	dataType: ($.browser.msie) ? "text" : "xml", 
	success: function(xmlobj){ 
    } 
});
//有了这个属性可以相对的减少代码运行书序问题,但是如果用的太多,页面假死次数太多。这样反而导致用户体验不佳

3.4 Ajax优缺点

优点:
1.快速回复
2.带宽利用率
3.在从服务器检索数据之前,不会阻止用户。
4。它允许我们只将重要数据发送到服务器。
5.它使应用程序具有交互性和更快速。

缺点:
1.取决于JavaScript
2.安全问题
3.调试很困难

安全问题:
AJAX源代码是可读的
攻击者可以将脚本插入系统

3.5 AJAX JSON 实例

<html>  
<head>  
<meta content="text/html; charset=utf-8">  
<title>AJAX JSON by Javatpoint</title>  
<script type="application/javascript">  
function load()  
{  
   var url = "http://date.jsontest.com/";//use any url that have json data  
   var request;  
  
   if(window.XMLHttpRequest){    
    request=new XMLHttpRequest();//for Chrome, mozilla etc  
   }    
   else if(window.ActiveXObject){    
    request=new ActiveXObject("Microsoft.XMLHTTP");//for IE only  
   }    
   request.onreadystatechange  = function(){  
      if (request.readyState == 4  )  
      {  
        var jsonObj = JSON.parse(request.responseText);//JSON.parse() returns JSON object  
        document.getElementById("date").innerHTML =  jsonObj.date;  
        document.getElementById("time").innerHTML = jsonObj.time;  
      }  
   }  
   request.open("GET", url, true);  
   request.send();  
}  
</script>  
</head>  
<body>  
  
Date: <span id="date"></span><br/>  
Time: <span id="time"></span><br/>  
  
<button type="button" onclick="load()">Load Information</button>  
</body>  
</html> 

参考博客:
https://www.w3cschool.cn/ajax/ajax-rfck31uh.html

3.6 AJAX - onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。readyState 属性存有 XMLHttpRequest 的状态信息。
下面是 XMLHttpRequest 对象的三个重要的属性:

属性描述
onreadystatechange存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数
readyState存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 0: 请求未初始化; 1: 服务器连接已建立; 2: 请求已接收; 3: 请求处理中; 4: 请求已完成,且响应已就绪;
status200: “OK”;404: 未找到页面

当 readyState 等于 4 且状态为 200 时,表示响应已就绪:

xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
}

回调函数是一种以参数形式传递给另一个函数的函数。
如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):

function myFunction(){
    loadXMLDoc("/try/ajax/ajax_info.txt",function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    });
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值