[Java] JSP笔记 - EL、JSTL 常用标签
一、 什么是 EL 语言
表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言。
二、EL 语言的作用
为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。
三、使用 EL 语言前的配置
在Tomcat5.0.16和之后和版本中,默认是支持EL的,我们不需要作其它的任何配置。
四、如何使用 EL 表达式
1. EL的内置对象
首先我们要知道 EL 的内置对象有哪些----pageScope、requestScope、sessionScope、applicationScope,如果未指定scope,默认从 pageScope 到 applicationScope一次扩大范围查找属性名,也可以使用 xxxScope.属性名 直接指定在某个 scope 查找,如:
${requestScope.tom}
2. 语法结构
${expression}
3. [ ]与.运算符
EL 提供.和[]两种运算符来存取数据。如:
${student.name}
${studentList[0].name}
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。如:
${ student.My-Name} <!-- ${ student.My-Name} 写法不正确,应该改为下面这种 -->
${ student["My-Name"] }
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。如:
${ sessionScope.student[property] } <!-- 其中 property 是一个变量,动态取对象的属性,如"id", "name"等等 -->
4. 使用 EL 取出内置对象的数据
(1)、普通对象和对象属性
服务器端:
request.setAttribute("student", student);
在浏览器上打印出服务器端绑定的数据:
${ student } <!-- 相当于执行了 student.toString(); -->
${ student.name } <!-- 相当于执行了 student.getName(); -->
${ student.teacher.name } <!-- 相当于执行了 student.getTeacher().getName(); -->
...
(2)、数组中的数据
服务器端:
String[] nameArray = new String[]{"Tom", "Lucy", "Lilei"};
request.setAttribute(“nameArray”,nameArray); Student[] students = new Student[3];
students[0] = stu1;
students[1] = stu2;
students[2] = stu3;
request.setAttribute(“students”,students);
在浏览器上打印出服务器端绑定的数组数据:
${ nameArray[0] } <!-- Tom -->
${ nameArray[1] } <!-- Lucy -->
${ nameArray[2] } <!-- Lilei --> ${ students[0].id } <!-- 输出第一个学生的ID -->
${ students[1].name } <!-- 输出第二个学生的name -->
${ students[2].teacher.name } <!-- 输出第三个学生的老师的name -->
(3)、List中的数据
服务器端:
List<Student> studentList=new ArrayList<Student>();
studentList.add(stu1);
studentList.add(stu2);
studentList.add(stu3);
request.setAttribute(“studentList”,studentList);
在浏览器上打印出服务器端绑定的List数据:
${ studentList[0].id } <!-- 输出第一个学生的ID -->
${ studentList[1].name } <!-- 输出第二个学生的name -->
${ studentList[2].teacher.name } <!-- 输出第三个学生的老师的name -->
(4)、Map中的数据
服务器端:
Map<String, Student> studentMap = new HashMap<String, Student>();
studentMap.put("Tom", stu1);
studentMap.put("Lucy", stu2);
studentMap.put("Lilei", stu3);
request.setAttribute(“studentMap”,studentMap);
在浏览器上打印出服务器端绑定的Map数据:
${ studentMap.Tom.id } <!-- 输出第一个学生的ID -->
${ studentMap.Lucy.name } <!-- 输出第二个学生的name -->
${ studentMap.Lilei.teacher.name } <!-- 输出第三个学生的老师的name -->
(5)、使用 EL 取出隐式对象中的数据
JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用。可使用的隐式对象如下:
pageContent | JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContext.response} 为页面的响应对象赋值。 |
此外,还提供几个隐式对象,允许对以下对象进行简易访问:
除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、页面:
五、EL 操作符
算术型 | +、-(二元)、*、/、div、%、mod、-(一元) |
逻辑型 | and、&&、or、||、!、not |
关系型 | ==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。 |
空 | empty。空操作符是前缀操作,可用于确定值是否为空。 |
条件型 | A ?B :C。根据 A 赋值的结果来赋值 B 或 C。 |
例如:
1+2=${1+2}
10/5=${10/5}
10 div 5=${10 div 5}
10%3=${10%3}
10 mod 3=${10 mod 3}
${empty scope中的属性名}
${!empty scope中的属性名}
六、什么是 JSTL 表达式
JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。
JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。顾名思义,format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。xml 库包含一些标记,这些标记用来操作通过 XML 表示的数据,而 sql 库定义了用来查询关系数据库的操作。
如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。
七、JSTL 表达式的作用
JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库。JSTL标签库可分为5类: 核心标签库
- I18N格式化标签库
- SQL标签库
- XML标签库
- 函数标签库
八、JSTL 表达式在页面的配置
1、导入standard.jar和jstl.jar。
2、在JSP页面上引入 JSTL 的引用。如:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
九、JSTL 的使用
1、核心标签库
JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。如:
- 表达式控制标签:out标签、set标签、remove标签、catch标签。
- 流程控制标签:if标签、choose标签、when标签、otherwise标签。
- 循环标签:forEach标签、forTokens标签。
- URL操作标签:import标签、url标签、redirect标签。
下面,演示各个标签的使用。
1.1、表达式控制标签
(1)、<c:out> 标签:用来显示数据对象(字符串、表达式)的内容或结果。相当于 <% out.println(“字符串”)%> 或 <%=表达式%>。
语法如下:
【语法1】:<c:out value=”要显示的数据对象” [escapeXml=”true|false”] [default=”默认值”]>
【语法2】:<c:out value=”要显示的数据对象” [escapeXml=”true|false”]>默认值</c:out>
其中,
value:指定要输出的变量或表达式。
escapeXml:设定是否转换特殊字符(如<、>等一些转义字符),在默认值为true的情况下直接在输出<的,如果改为false将会进行转义输出“<”等。
default:为默认输出结果。如果使用表达式得到的结果为null(注意与空区别),将会输出默认结果。
例如:
<%@ page pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>out标签的使用</title>
</head>
<body>
<ul>
<li>(1)<c:out value="普通一行字符串"></c:out></li>
<li>(2)<c:out value="<未使用字符转义>" /></li>
<li>(3)<c:out value="<未使用字符转义>" escapeXml="false"></c:out></li>
<li>(4)<c:out value="${null}">使用了默认值</c:out></li>
<li>(5)<c:out value="${null}"></c:out></li>
</ul>
</body>
</html>
输出:
普通一行字符串
<未使用字符转义>
<未使用字符转义>
使用了默认值
(2)、<c:set> 标签:主要用于将变量存取于JSP范围中或JavaBean属性中。
【语法1】: 把一个值放在指定(page、session等)的map中。
<c:set value=”值1” var=”name1” [scope=”page|request|session|application”]>
【语法2】: 把一个变量名为name2的变量存储在指定的scope范围内。
<c:set var=”name2” [scope=”page|request|session|application”]>
【语法3】: 把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。
<c:set value=”值3” target=”JavaBean对象” property=”属性名”/>
【语法4】: 把一个值4赋值给指定的JavaBean的属性名
<c:set target=”JavaBean对象” property=”属性名”>值4</c:set>
提示:从功能上分语法1和语法2、语法3和语法4的效果是一样的只是把value值放置的位置不同至于使用那个根据个人的喜爱,语法1和语法2是向scope范围内存储一个值,语法3和语法4是给指定的JavaBean赋值。
(3)、<c:remove> 标签:主要用来从指定的JSP范围内移除指定的变量。
【语法】: 其中var属性是必须的,scope可以以省略。
<c:remove var=”变量名” [scope=”page|request|session|application”]/>
例如:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>remove标签的使用</title>
</head>
<body>
<ul>
<li><c:set var="name" scope="session">张三</c:set>
<li><c:set var="age" scope="session">22</c:set>
<li><c:set var="sex" scope="session">男</c:set>
<li><c:out value="${sessionScope.name}"></c:out>
<li><c:out value="${sessionScope.age}"></c:out>
<li><c:out value="${sessionScope.sex}"></c:out>
<li><c:remove var="age"/>
<li><c:out value="${sessionScope.name}"></c:out>
<li><c:out value="${sessionScope.age}"></c:out>
<li><c:out value="${sessionScope.sex}"></c:out>
</ul>
</body>
</html>
输出:
张三
22
男
张三
男
(4)、<c:catch> 标签:用来处理JSP页面中产生的异常,并将异常信息存储。
【语法】: var表示由用户定义存取异常信息的变量的名称。省略后也可以实现异常的捕获,当就不能显示的输出异常信息。
<c:catch var=”name1”>容易产生异常的代码</c:catch>
例如:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ uri="http://java.sun.com/jsp/jstl/core" taglib prefix="c" %>
<html>
<head>
<title>JSTL: -- catch标签实例</title>
</head>
<body>
<h4>catch标签实例</h4>
<hr>
<c:catch var=”error”>
<c:set target="Dank" property="hao"></c:set>
</c:catch>
<c:out value="${error}"/>
</body>
</html>
说明:第10~12把容易产生异常的代码放在<c:catch></c:catch>中,自定义一个变量error用于存储异常信息。第11行实现了一段异常代码,向一个不存在的JavaBean中插入一个值。第13行用EL表达式得到error的值,并使用<c:out>标签输出。
1.2、流程控制标签
流程控制标签主要用于对页面简单业务逻辑进行控制。流程控制标签包含有4个:<c:if>标签、<c:choose>标签、<c:when>标签和<c:otherwise>标签。下面将介绍这些标签的功能和使用方式。
(1)、<c:if> 标签:同程序中的if作用相同,用来实现条件控制。
【语法1】:
<c:if test=”条件1” var=”name” [scope=”page|request|session|application”]> 【语法2】:
<c:if test=”条件2” var=”name” [scope=”page|request|session|application”]>结果2</c:if>
【参数说明】:
- test 属性用于存放判断的条件,一般使用EL表达式来编写。
- var 指定名称用来存放判断的结果类型为true或false。
- scope 用来存放var属性存放的范围。
(2)、<c:choose>、<c:when> 和 <c:otherwise> 标签:这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。
【语法1】:3个标签的嵌套使用方式,<c:choose>标签只能和<c:when>标签共同使用。如:
<c:choose>
<c:when test="条件1">
…..//业务逻辑1
</c:when>
<c:when test="条件2">
…..//业务逻辑2
</c:when>
<span style="white-space: pre;"> </span><c:otherwise>
…..//业务逻辑3
</c:otherwise>
</c:choose>
【语法2】:<c:when>标签的使用方式,该标签都条件进行判断,一般情况下和<c:choose>共同使用。如:
<c:when text=”条件”>
表达式
</c:when>
【语法3】:<c:otherwise>不含有参数,只能跟<c:when>共同使用,并且在嵌套中只允许出现一次。如: <c:otherwise>
表达式
</c:otherwise>
例如:
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL: -- choose及其嵌套标签标签示例</title>
</head>
<body>
<h4>choose及其嵌套标签示例</h4>
<hr>
<c:set var="score">85</c:set>
<c:choose>
<c:when test="${ score>=90 }">
你的成绩为优秀!
</c:when>
<c:when test="${ score>=70 && score<90 }">
您的成绩为良好!
</c:when>
<c:when test="${ score>60 && score<70 }">
您的成绩为及格
</c:when>
<c:otherwise>
对不起,您没有通过考试!
</c:otherwise>
</c:choose>
</body>
</html>
1.3、循环标签。
循环标签主要实现迭代操作。主要包含两个标签:<c:forEach>和<c:forTokens>标签,接下来将详细介绍这两个标签的用法。
(1)、<c:forEach> 标签:该标签根据循环条件遍历集合(Collection)中的元素。
【语法】:
<c:forEach var=”name” items=”Collection” varStatus=”StatusName” begin=”begin” end=”end” step=”step”>
所有内容
</c:forEach>
【参数解析】:
- var设定变量名用于存储从集合中取出元素。
- items指定要遍历的集合。
- varStatus设定变量名,该变量用于存放集合中元素的信息。
- begin、end用于指定遍历的起始位置和终止位置(可选)。
- step指定循环的步长。
【循环标签属性说明】:
名称 | EL | 类型 | 是否必须 | 默认值 |
var | N | String | 是 | 无 |
items | Y | Arrays Collection Iterator Enumeration Map String []args |
是 | 无 |
begin | Y | int | 否 | 0 |
end | Y | int | 否 | 集合中最后一个元素 |
step | Y | int | 否 | 1 |
varStatus | N | String | 否 | 无 |
其中varStatus有4个状态属性,如下:
(2)、<c:forTokens> 标签:该标签用于浏览字符串,并根据指定的字符将字符串截取。
【语法】: <c:forTokens items=”strigOfTokens” delims=””delimiters [var=”name” begin=”begin” end=”end” step=”len” varStatus=”statusName”] >
【参数说明】
- items 指定被迭代的字符串。
- delims 指定使用的分隔符。
- var 指定用来存放遍历到的成员。
- begin 指定遍历的开始位置(int型从取值0开始)。
- end 指定遍历结束的位置(int型,默认集合中最后一个元素)。
- step 遍历的步长(大于0的整型)。
- varStatus 存放遍历到的成员的状态信息。
注:<c:forToken>的属性varStatus的使用同<c:forEach>的使用方法相同,在此就再不表述。
1.4、URL操作标签。
JSTL包含3个与URL操作有关的标签,分别为:<c:import>、<c:redirect>和<c:url>标签。它们的作用为:显示其他文件的内容、网页导向、产生URL。下面将详细介绍这3个标签的使用方法。
(1)、<c:import> 标签:该标签可以把其他静态或动态文件包含到本JSP页面。同<jsp:include>的区别为:只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
【语法1】: <c:import url=”url” [context=”context”][ value=”value”][scope=”page|request|session|application”] [charEncoding=”encoding”]> 【语法2】: <c:import url=”url” varReader=”name” [context=”context”][charEncoding=”encoding”]>
<c:import>标签参数说明。
【参数说明】:
- 使用相对路径的实例如下:
<c:import url=”aa.txt”>
aa.txt放在同一文件目录。
如果以“/”开头表示应用的根目录下。例如:tomcat应用程序的根目录文件夹为webapps。导入webapps下的文件bb.txt的编写方式为:
<c:import url=”/bb.txt”>
如果访问webapps管理文件夹中其他web应用就要用context属性。 - context 属性用于在访问其他web应用的文件时,指定根目录。例如,访问root下的index.jsp的实现代码为:
- <c:import url=”/index.jsp” context=”/root”>
- 等同于webapps/root/index.jsp
- var 属性表示为资源起的别名。
- scope 属性标识该资源访问的范围。
- charEncoding 属性标识该资源的编码方式。
- varReader 这个参数的类型是Reader,用于读取资源。
(2)、<c:redirect> 标签:用来实现了请求的重定向。同时可以在url中加入指定的参数。例如:对用户输入的用户名和密码进行验证,如果验证不成功重定向到登录页面;或者实现web应用不同模块之间的衔接。
【语法1】:
<c:redirect url=”url” [context=”context”]> 【语法2】:
<c:redirect url=”url”[context=”context”]>
<c:param name=”name1” value=”value1”>
</c:redirect>
【参数说明】:
- url 指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址。
- context 用于导入其他web应用中的页面。
例如,当请求页面时重定向到tomcat首页:
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:redirect url="http://127.0.0.1:8080">
<c:param name="uname">root</c:param>
<c:param name="password">123456</c:param>
</c:redirect>
(3)、<c:url> 标签:该标签用于动态生成一个String类型的URL,可以同<c:redirect>标签共同使用,也可以使用html的<a>标签实现超链接。
【语法1】:指定一个url不做修改,可以选择把该url存储在JSP不同的范围中。
<c:url value=”value” [var=”name”][scope=”page|request|session|application”][context=”context”]/> 【语法2】:给url加上指定参数及参数值,可以选择以name存储该url。
<c:url value=”value” [var=”name”][scope=”page|request|session|application”][context=”context”]>
<c:param name=”参数名” value=”值”>
</c:url>
例如,使用动态生成url实现了网页的超链接:
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out value="url标签使用"></c:out>
<h4>使用url标签生成一个动态的url,并把值存入session中.</h4>
<hr>
<c:url value="http://127.0.0.1:8080" var="url" scope="session">
</c:url>
<a href="${url}">Tomcat首页</a>
2、I18N格式标签库
JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言。同时还提供了格式化数据和日期的方法。实现这些功能需要I18N格式标签库(I18N-capable formation tags liberary)。引入该标签库的方法为:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
I18N格式标签库提供了11个标签,这些 标签从功能上可以划分为3类如下:
- 数字日期格式化。formatNumber标签、formatData标签、parseNumber标签、parseDate标签、timeZone标签、setTimeZone标签。
- 读取消息资源。bundle标签、message标签、setBundle标签。
- 国际化。setlocale标签、requestEncoding标签。
另外 JSTL 还有 读取消息资源 标签库 、 SQL标签库等。
现在JSTL已经不常用了,大家更喜欢 ajax 技术。
十、 参考资料
本文转自: http://joinyo.iteye.com/blog/1550308
感谢: 慕课网JessicaJiang 美女讲师
[Java] JSP笔记 - EL、JSTL 常用标签的更多相关文章
- JSP中EL很常用,怎样使用大于号、小于号、等于号等
JSP中EL很常用,怎样使用大于号.小于号.等于号等 符号 在EL中使用 常规 1 等于 eq == 2 不等于 ne != 3 大于 gt > 4 小于 lt < 5 大于等于 ge ...
- java:jsp: 一个简单的自定义标签 tld
java:jsp: 一个简单的自定义标签 tld 请注意,uri都是:http://www.tag.com/mytag,保持统一,要不然报错,不能访问 tld文件 <?xml version=& ...
- Java jsp页面中jstl标签详解
JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实. JSTL ...
- 超全面的JavaWeb笔记day13<JSTL&自定义标签>
1.JSTL标签库(重点) core out set remove url if choose when otherwise forEach fmt formatDate formatNumber 2 ...
- 【java读书笔记】JSTL,高速精通
JSTL并非什么新颖的技术并且非常easy,甚至有人觉得JSTL已经过时了.可是我觉得它既然存在,就有存在的道理.作为技术人员就应该知道它们是什么,怎么使用,有什么长处. JSTL包括两部分:标签库和 ...
- [刘阳Java]_MyBatis_映射文件的常用标签总结_第5讲
MyBatis中常用标签的总结,简单给出自己的总结 MyBatis映射文件中的标签使用介绍1.<select>:用于编写查询语句用的标签 id:表示当前<select>标签的唯 ...
- [Java] JSP笔记 - 自定义标签
自定义标签的创建步骤: 自定义标签的四大功能: 自定义标签的类结构: 在 1.0 中呢, 可以将 <body-content> 的值设置为 JSP, 2.0中则不允许在自定义标签体中出现j ...
- [Java] JSP笔记 - Listener 监听器
Java Web 开发时,可以使用 Listener 来监听来监听一些事件,从而实现一些功能.实际上这个监听器,原理就是 Delphi 中大家常用的各种事件. 1. 那么,监听器的主要用途用哪些呢: ...
- Java Servlet(十):JSTL核心标签库
JSTL全名称:JaveServer Pages Standard Tag Library.JSTL是由JCP(Java Community Process)所定制的标准规范,它主要提供给Java W ...
随机推荐
- MVC 5 中Filter控制 action的访问权限
1,创建一个继承自 FilterAttribute, IActionFilter的类 namespace HeatMetering2.Filters { public class HMV2Authen ...
- [Erlang 0109] From Elixir to Erlang Code
Elixir代码最终编译成为erlang代码,这个过程是怎样的?本文通过一个小测试做下探索. 编译一旦完成,你就看到了真相 Elixir代码组织方式一方面和Erlang一样才用非常 ...
- [MySQL Reference Manual] 20 分区
20 分区 20 分区 20.1 MySQL的分区概述 20.2 分区类型 20.2.1 RANGE分区 20.2.2 LIST分区 20.2.3 COLUMNS分区 20.2.3.1 RANGE C ...
- 萌新笔记——封装hiredis——C++与redis对接(一)(string的SET与GET操作)
在菜鸟教程自学了redis,总想着像Mysql一样,在C/C++中进行对接.于是查询了一些资料,最后找到了hiredis.然而直接用它的话,难免有点不方便.于是,对其进行封装. hiredis直接去g ...
- Python中关于字符串的问题
在Python里面,字符串相加经常会出现'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)这样的 ...
- NYOJ----776删除元素
删除元素 时间限制:1000 ms | 内存限制:65535 KB 描述 题意很简单,给一个长度为n的序列,问至少删除序列中多少个数,使得删除后的序列中的最大值<= 2*最小值 输入 多组测 ...
- [收集]MVC3 HTML辅助方法集录
1.跳转链接 @Html.ActionLink("linkText","actionName",routeValues,htmlAttributes) e.g& ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- 最长不下降序列nlogn算法
显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...
- Android技术分享收集
Android高工必备技能! 我的 Android 开发实战经验总结 微信Android客户端架构演进之路 微信Android版智能心跳方案 流量优化: WebP 探寻之路 HTTP 协议缓存机制详解 ...