EL/JSTL

EL/JSTL  JSTL修改项目- 》让项目 中不能再有Java代码 - > 自定义标签。

 

 

JSP 动作: jsp:forward jsp:include动态包含

 

 

 

 

以下代码的问题:

 

<%=request.getParameter("name")%>

1:如果name这个参数不存在,则输出 null值。

  2:上面的是java代码。

 

1:EL表达式

用于在页面上输出数据的。

语法:

  ${隐藏对象.属性}

 

如上面的输出语句可以修改成:

   <%=request.getParameter("name")%>

<hr>

${param.name}

 

 

EL表达式的功能:

   1:在页面上访问List,Map,Bean中的数据,显示。

   2:防止出现Java代码。

 

 

1:EL表达式隐藏对象 11个

隐藏对象

数据类型

示例

表示参数的:

  param

Map<String,String>

?name=Jack&age=90

${param.name} : Jack  - >类似于  param.get(name);

${param.age} : 90

  paramValues

Map<String,String[]>

<hr>

${paramValues.name[0]},${paramValues.name[1]}

表示获取头信息的

  header

Map<String,String>

${header.host}

<br>

${header["user-agent"]}

 headerValue

Map<String,String[]>

 

${headerValues['user-agent'][0]}

表示cookie的

   cookie

Map<String,Cookie>

${cookie.loginName.value}

<br>

显示当前Session的id:${cookie.JSESSIONID.value}

表示全局配置的初始化参数

  web.xml里面配置的<context-param>

  

   initParam

Map<String,String>

<context-param>

<param-name>name</param-name>

<param-value>杰可乐</param-value>

</context-param>

 

 

${initParam.name}  : 杰可乐

 

 

 

表示域对象的

   

   pageScope

   rerquestScope

   sesionScope

   applicatiionScope

Map<String,Object>

<%

pageContext.setAttribute("name", "Jack");

request.setAttribute("name","Mary");

session.setAttribute("name", "Jerry");

application.setAttribute("name","Smith");

%>

<hr>

${pageScope.name}:Jack<br>

${requestScope.name}:Mary<br>

${sessionScope.name}:Jerry<br>

${applicationScope.name}:Smith<br>

表示当前页面对象的

表示工具类的

表示默认的隐藏对象的

  pageContext

 

PageContext类型

表示工具类,可以调用所有没有参数的getXxxx()方法

${pageContext.request.contextPath}

<hr>

<%=((HttpServletRequest)pageContext.getRequest()).getContextPath()%>

 

<!-- 以下表示:pageContext.findAttribute("name") -->

${name}


 

这些隐藏对象:

  如果某个值,不存在,则输出是 “”空的字符串。而不是null值。

 

 

2:EL表达式,用于获取List/Object[],Map/Bean中的值

 

 

 

 

<%

Person person = new Person();

person.setName("张三");

List<Object> list = new ArrayList<Object>();

list.add("Jerry");

list.add(person);

pageContext.setAttribute("tt",list);

%>

<hr>

<br>

${tt[1].name}

 

 

3:EL表达式的运算

+ - * /  % += ..都支持。

 

 

 

Empty 判断是否是 null , size==0

 

 

 

 

比较运算符号:

     <   gt > , eq =  not eq !=

 

 

 

如何解决EL表达式,不能保存值,不能遍历数据的问题:

  JSTL

 

 

 

 

2:JSTL - >JSP Standard Tag Libraray  标准标签库

 

SUN最先开发,目前由 apache维护。

 

 

 

 

JSTL标签,依赖于EL表达式。

 

JSTL标签分类:

  4个标签一个函数:

 

标签、函数

使用

功能

Core标签

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

遍历,输出,显示,控制

 

Fmt标签

格式化标签,国际化标签

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f" %>

 

SQL标签

被禁止使用。

不能在页面上查询数据库。

不是 MVC原则

 

 

XML标签

在页面上处理XML数据

不是 MVC原则

 

 

Function函数

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

 

 

 

 

 

3:Core标签的功能

 

 

 

 

 

Out  输出语句  可以对html进行解析 < : <

 

<c:out value="Jack"></c:out>

<br>

<c:out value="${param.name}" default="没有传递值" escapeXml="false"></c:out>

<br>

${param.name}

 

 

Set保存数据到指定的域中去

<c:set value="Jack" var="name"></c:set>

<br>

${pageScope.name}

 

 

Remove 删除某个域中的数据

<c:remove var="name" />

<br>

 

 

url显示当前的项目的上下文根

<%

String url = response.encodeRedirectURL(request.getContextPath()+"/");

out.print(url);

%>

<hr>

<c:url value="/"></c:url>

 

对于所有JSTL标签,都拥有var属性,var就是用于声明变量的,

如果声明了var变量,就会将数据放到var声明变量中的再放到指定域对象中去。而不显示。

 

如果没有var则是指不保存,直接显示。

 

 

Choose分支

 

 

 

 

forEach遍历

<c:set var="sum" value="0"/>

<c:forEach begin="1" end="100" var="i">

<c:set value="${sum+i}" var="sum"></c:set>

</c:forEach>

${sum}

 

 

遍历集合:

 

 


<%

Map<String, Object> map = new HashMap<String, Object>();

map.put("name", "Jack");//Entry<String,Object> .getKey/getValue

map.put("age", 99);

pageContext.setAttribute("mm",map);

%>

<c:forEach items="${mm}" var="str">

${str.key}=${str.value}<br>

</c:forEach>

 

 

遍历下标对象:
  

 

 

 

forTokens 用于遍历字符串的 默认根据,

<c:forTokens items="Jack#Mary,ALex#Smith" delims="#" var="str">

${str}<br>

</c:forTokens>

 

 

 

 

If

<c:if test="${param.age>100 }" var="boo">

1000

</c:if>

<c:if test="${!boo}">

not 100...

</c:if>

 

 

Import

主页<br>

<c:set var="name" value="JKack" scope="request"></c:set>

<!-- 以下就是include -->

<c:import url="/one.jsp"></c:import>

<br>


 

 

 


 

 

 

 

 

 

 

4:fmt标签

 

格式化标签

<body>

<fmt:formatNumber value="49383484848.97384744" pattern="#,###.00"></fmt:formatNumber>

</body>

 

 

 

 

国际化标签

  

 

1:创建国际化文件

 

将中文进行转码:

 

 

 


2:低层的实现是RessourceBundler

 

@Test

public void test1() {

ResourceBundle res = ResourceBundle.getBundle("msg");

String name = res.getString("name");

System.err.println(name);//中文

}


以下是获取默认的国家,或是指定国家:

@Test

public void test1() {

//可以指定是哪一个国家

Locale locale = Locale.getDefault();

System.err.println(locale.getDisplayCountry());

System.err.println(locale.getDisplayLanguage());

ResourceBundle res = ResourceBundle.getBundle("msg",Locale.ENGLISH);

String name = res.getString("name");

System.err.println(name);//中文

}

 

 

 

 

 

<fmt:setLocale value="${param.local}"/>

<fmt:setBundle basename="msg" />

</head>

<body>

<a href="?local=zh_CN">中文</a> |

<a href="?local=en">English</a>

<hr>

<fmt:message key="name" />

<br>

<fmt:message key="welcome"></fmt:message>

<br>

<fmt:message key="img" var="iii"/>

<img alt="" src="${iii}">

</body>

 

 

5:函数

Fn

 

<hr>

${fn:containsIgnoreCase('Jack and Mary','And') }

<br>

${fn:escapeXml(param.name)}

<br>

${param.name}

<br>

${fn:join(paramValues.name,"#")}

你可能感兴趣的:(EL/JSTL)