<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%-- <!-- el表达式为了取代jsp中的Java脚本代码,只能输出,不能设置
el表达式格式:${内置对象.key(map.key)} 键值对由键得到map集合中的对应的值,
这里等同于调用getName(),getSex(),getAdress()方法 .注意:这里是针对JavaBean,应以属性代替方法的形式
或者${内置对象['key']}:为了消除中间存在-的情况(会被认为做减法运算),比如param-name
EL表达式有11个内置对象:都是Map类型,由键得值。除了pageContext,它是pageContext类型,
4个域对象+Scope,四大域对象针对的属性,这里pageContext域为applicationScope,但是pageContext和pageScope都是el表达式内置对象,只是pageContext可以获取九大内置对象
cookie:Map<String,Cookie>类型,值是Cookie对象,所以在获取session的id时要:${cookie.key.value}
param:相当于getParameter(),param.key相当于getParameter(key)
paramValues:一个键对应多个值
initParam:
initParamValues:一个键对应多个值
head:请求头
headValues:请求头,对应多值
el表达式函数库的导入和使用:
<%@taglib prefix="fn" ui="http://...."%>
至于库中的函数不再列举,只写一个简单的格式:
${fn:方法名()},比如:${fn:length(arr)}获取arr数组长度
自定义El表达式函数库:
1.创建Java类,在Java类中可以定义任意多个函数,要求函数必须是静态的,必须有返回值,参数可有可无但是有就需要对参数类型的包连带着
2.在WEB-INF下创建(浏览器不能访问该目录,为了安全起见)一个.tld文件,配置该文件的函数属性等等
3.在jsp页面进行函数库的导入和使用
jstl标签库:el表达式的扩展,既可以输出也可以设置
导入:<%@ taglib prefix="c" uri="路径"%>
core标签库:c标签,这些都有自己的属性,像var代表变量或者说是key,值可以是字符串也可以是el表达式
<c:out>:输出
<c:set>:类似setAttribute(key,value),创建域的属性
<c:remove>:类似removeAttribute(),移除域的属性
<c:url>:类似${域.contextPath},可以在url前加上工程文件目录
<c:if>:类似if语句
<c:choose>:类似if else语句
<c:forEach>:类似for循环和for each(类型 变量名:集合|数组)
fmt标签库:
格式化日期:
<fmt:formatDate value="" pattern="" />
value:日期类型的变量
pattern:模板,比如:yyyy-MM-dd HH:mm:ss 对应:2018-07-14 08:50:01
格式化数字:
<fmt:formatNumber value="" pattern="">
pattern:模板,比如:0.00,保留两位小数,不足补零 或 #.##,保留两位小数,不足有几位就保留几位
一般都是格式小数位数和进制
sql标签库:过时
xml标签库:过时
--> --%>
<%
Person person = new Person();
person.setName("小强");
person.setSex("男");
person.setAdress("上海");
request.setAttribute("person", person);
%>
<!-- el表达式格式:域.key(map.key) 键值对由键得到map集合中的对应的值
这里等同于调用getName(),getSex(),getAdress()方法 ,注意这里是针对JavaBean,应以属性代替方法的形式-->
${requestScope.person.name} ${requestScope.person.sex}
${requestScope.person.adress} ${cookie.JSESSIONID.value }
<!-- 获取session的id -->
${pageContext.request.contextPath }
<!-- 获取项目目录,/MyServlet 超链接使用可用来防止项目名被修改而找不到路径 -->
${fn:fun() }
<br />
<%
Date date = new Date();
request.setAttribute("date", date);
%>
<fmt:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss" /><br/>
<!-- 一个自定义标签 -->
<t:myTag/>
<!-- 带有属性和标签体的自定义标签 -->
<t:myTag2 bol="true">我是一个带有属性和标签的自定义标签</t:myTag2><br/>
<!-- 国际化的登陆窗口 :自适应本地浏览器默认语言-->
<%
Locale local = Locale.getDefault();//获取本地默认语言
ResourceBundle res = ResourceBundle.getBundle("res", local);//这里可以理解为拼接成一个文件名res_zh_CN,由该文件名来加载资源
%>
<hr/>
${requestScope.date }
<hr/>
<%
pageContext.setAttribute("context", "测试");
%>
${pageScope.context }
<hr/>
<c:url></c:url>
<form action='${pageContext.request.contextPath }/OtherServlet' method="post">
<%=res.getString("userName") %>:<input type="text" ><br/>
<%=res.getString("password") %>:<input type="password"><br/>
<input type="submit" value="<%=res.getString("userName")%>">
</form>
</body>
</html>