JavaWeb12-JSP, EL表达式,JSTL标签

JSP & EL & JSTL

一.JSP

1. jsp回顾

jsp作用

jsp全称java server pages(java服务器页面),本质是一个servlet.它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp).

jsp作用:将内容的生成和显示进行分离

用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面,并使用JSP标识或者小脚本来生成页面上的动态内容

jsp原理

jsp脚本

有三个基本的脚本元素,作用是使JAVA代码可以直接插入到HTML代码中

声明标签

格式:<%! int a = 1; %>

作用:声明的变量在类的成员位置上

脚本片断

格式:<% int a = 1; out.println(a); %>

作用:内容会生成在_jspService()方法中

脚本表达式

格式:<%= "hello " + a %>

作用:它就相当于是out.println()将内容直接输出到页面中,注意表达式不能以分号结尾

jsp注释

在jsp页面中可以使用三种注释

可以使用html中注释

<!-- html的注释 -->

可以对jsp脚本内容使用java注释

//单行注释 /* 多行注释 */ /**文档注释*/

可以使用jsp注释(推荐)

<%-- jsp注释 --%>

2. jsp指令简单介绍

jsp指令介绍

当我们创建一个jsp页面时,在页面第一行有一段代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

这个就是指令,对于指令它有以下作用

a. 用于指示JSP执行某些步骤

b. 用于指示JSP表现特定行为

jsp指令格式

格式:

<%@指令名 attr1=”” attr2=””%>

注意:

其中attr1和attr2表示指令中的属性,通常我们将JSP指令写在JSP文件的的最上方,但是这不是必须的。

jsp指令分类

JSP中有三大指令,分别是以下三个:

page

include

taglib

其中这三个指令中,page是最复杂的,我们会详细讲解(导入类,编码的设置等等);include指令表示静态包含,我们之前学习的请求包含属于动态包含;taglib指令是用来导入标签库,后面会学习一些标签库,在这里只做简单介绍。

3. jsp指令-page

重点属性:

import

作用:在jsp页面上导包操作.

这个属性可以有多个.

pageEncoding

作用:指定当前jsp页面的编码。这个编码是给服务器看的,服务器需要知道当前页面的编码,否则服务器无法正确的把jsp翻译成Java文件。

contentType

在jsp文件中有如下指令:

<%@page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

其中contentType属性的作用等同于response.setContentType(“text/html;charset=utf-8”)的作用。response的setContentType()方法这里我们就不再多说,当我们在jsp文件中提供了contentType属性,那么jsp对应的java文件中就会存在response.setContentType(“text/html;charset=utf-8”)这句代码。contentType属性的默认值是“text/html; charset=ISO-8859-1”,但是我们知道iso-8859-1并不支持中文,所以我们需要将charset的值修改为“utf-8“。

pageEncoding与contentType的区别与联系

pageEncoding与contentType都是page指令的属性,它们都是用来设置编码,有如下联系:

如果这两个属性只提供了其中一个,那么没有提供的那个属性的编码值就是提供的这个属性的编码值,例如:在jsp页面中设置了contentType=”text/html;charset=utf-8”,那么没有设置的pageEncoding的值就为utf-8,反之亦然;

如果两个属性都没有提供,那么两者的默认编码就是ISO-8859-1。

根据对这两个属性的讲解,它们有如下区别:

pageEncoding是设置当前页面的编码,该编码是给服务器看的,可以让服务器正确的将jsp文件翻译成Java文件;

contentType有两个作用:一是设置响应字符流的编码,二是设置Content-Type响应头,即通知浏览器使用什么编码方式解码响应信息。

了解属性:

language

代表在jsp脚本中可以写的语言, 只有一个值 java

extends

它用于设置jsp翻译后的java类的父类. 要求必须是HttpServlet或其子类.

session

面上是否禁用session。可取值为true/false 如果值为false,在页面上不能使用session。

isELIgnored

用是否忽略el表达式.可取值为true/false 如果值为true,那么页面上的el表达式就不会被解析.

autoFlush与buffer

用于设置jsp中out流的默认缓冲区大小以及是否自动刷新.

errorPage

设置错误页面,当jsp中如果出现了异常,会自动跳转到指定的错误页面

isErrorPage

指示当前页面是一个错误页面,这时就可以使用一个内置对象 exception,

通过这个内置对象就可以获取异常信息.

4. jsp指令-include和taglib

include

include指令作用

include指令的作用是在JSP页面中静态包含一个文件,同时由JSP解析包含的文件内容

include指令格式

<%@ include file=“filename” %>

include指令功能分析

包含的是目标文件的源码;包含过来,一起翻译

main.jsp中的代码

<%

String s = “abc”;

%>

<%include file=“part.jsp” %>

part.jsp中的代码

<%=s %> 没有定义变量s

尽管part.jsp本身会有错误但是运行main.jsp就可以正确引入part.jsp

taglib

taglib指令作用

作用:是用于导入标签库.

taglib指令格式

<%@taglib prefix="" uri="" %>

uri 标签文件的URI地址

prefix 标签组的命名空间前缀

5. jsp内置对象

jsp九个内置对象及其类型

内置对象

类型

request

HttpServletRequest

response

HttpServletResponse

session

HttpSession

application

ServletContext

config

ServletConfig

page

this(Servlet)

pageContext

PageContext

exception

Throwable

out

JspWriter

jsp九个内置对象的创建过程

我们可以创建一个demo1.jsp页面,启动服务器,在浏览器中访问 demo1.jsp页面,在tomcat下的work目录中查找到它翻译后的demo1_jsp.java文件,在java文件中我们可以查找到每一个内置对象的创建。

request,response这两个对象是_jspService的参数

final javax.servlet.jsp.PageContext pageContext;

javax.servlet.http.HttpSession session = null;

final javax.servlet.ServletContext application;

final javax.servlet.ServletConfig config;

javax.servlet.jsp.JspWriter out = null;

final java.lang.Object page = this;

java.lang.Throwable exception = org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);

if (exception != null) {

response.setStatus(javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

}

注意:exception对象只有在jsp页面上设置了page指令的isErrorPage才会有exception对象。

jsp中的四个域对象

jsp有四个域对象,分别是:

application:域范围是整个应用;

session:域范围是整个会话,注意一个会话中只有一个用户,如果要统计站点的访问次数,使用的域是ServletContext,因为这个时候统计的是多个用户,而非一个用户;

request:域范围是整个请求链;

pageContext:域范围是一个jsp页面,在一个页面中存数据再取数据没有任何意义,所以这里所说的域指的是在当前jsp页面和当前jsp页面中使用的标签之间共享数据。

6. jsp内置对象-pageContext的作用

获取其他内置对象

可以通过pageContext对象获取jsp中其他的内置对象. PageContext类中定义了如下八个方法:getPage()、getRequest()、getResponse()、getServletConfig()、getServletContext()、getException()、getSession()等方法,其中getOut()放是在其父类中定义的,有了这些方法,pageContext对象自然能够获取其他八个内置对象了。

操作四个域对象

pageContext也是一个域对象,所以他有以下方法:

void setAttribute(String name,Object value)

Object getAttribute(String name);

Void removeAttribute(String name);

我们还可以利用以下方法操作其他域中的对象:

Object getAttribute(String name, int scope):

该方法的第一个参数是域属性的名称,第二个参数指定是从那个域中取出域属性;

在PageContext中已经定义了如下几个静态常量作为scope的可选值:

int APPLICATION_SCOPE:表示从application域中获取数据;

int PAGE_SCOPE:表示从pageContext域中获取数据;

int REQUEST_SCOPE:表示从request域中获取数据;

int SESSION_SCOPE:表示从session域中获取数据。

void setAttribute(String name,Object value,int scope):

该方法的第一个参数指的是域属性的名称,第二参数指的是域属性的值,第三个参数指定域属性保存的域,scope的取值同上;

void removeAttribute(String name,int scope):

该方法的第一个参数指的是域属性的名称,第二个参数指的是将指定域属性从哪个域中移出,scope的取值同上;

便捷查询域中数据

PageContext类的父类中定义了如下方法:

Object findAttribute(String name):该方法是从jsp的四个域pageContext、request、session、application依次查找指定名称的域属性,如果找到就停止,这说明如果这四个域中存在同名的属性,那么返回的数据是从page范围中获取的。即表示谁的域范围越小,谁的优先级越高。

7. jsp动作标签

jsp标签介绍

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

常用的jsp标签

jsp:forward

<jsp:forward>标签是用来做请求转发,它与RequestDispatcher接口的forward()方法一样,唯一不同的是它是在jsp页面中使用。

jsp:include

<jsp:include>标签的作用使用来包含其他jsp页面,之前学习的include指令属于静态包含,而include动作标签是动态包含,它和RequestDispatcher接口的include()方法一样,是运行级别的包含

jsp:param

<jsp:param>标签作为<jsp:forward>标签和<jsp:include>标签的子标签,用来给转发或包含的页面传递数据。

静态包含与动态包含的区别

include标签与inclue指令区别:

1.include指令是静态包含,包含文件中包含了被包含文件的内容.

include标签是动态包含,它包含的是被包含文件执行后的结果.

2.include指令不能带参数

include标签是可以带参数的

二.EL

1. EL表达式介绍

EL表达式的介绍

EL是Expression Language的缩写,它是jsp内置的表达式语言,从jsp2.0开始,就不让再使用java脚本,而是使用el表达式或动态标签来代替java脚本。EL表达式的格式如下:

${表达式}

EL表达式代替的是java脚本中的<%= …%>,也就是说EL表达式也是向浏览器端输出数据。例如${1+2}会向浏览器端输出3。

EL表达式的作用

为了使JSP写起来更加简单,更加安全,可以通过EL表达式来替换我们jsp页面上的脚本

EL主要作用:

u获取数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

u执行运算:

利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}

u获取web开发常用对象

EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

u调用Java方法

EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

EL表达式使用时注意事项

EL表达式是JSP 2.0(JavaEE1.4)规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。

注意:有些Tomcat服务器如不能使用EL表达式

(1)升级成tomcat6

(2)在JSP中加入<%@ page isELIgnored="false" %>

以下为jsp,servlet,javaee,jdk版本之间的对应关系

jsp

javaee

servlet

tomcat

jdk

Jsp2.0

javaee1.4

servlet2.4

tomcat5.x

jdk1.4

Jsp.2.0/2.1

javaee5.0

servlet2.5

tomcat6.0

jdk1.5

Jsp2.1

javaee6.0

servlet3.0

tomcat7.x

jdk1.6

2. EL表达式获取数据

EL表达式之域查找

1.pageContext--------------------${pageScope.xxx}

2.request--------------------------${requestScope.xxx}

3.session--------------------------${sessionScope.xxx}

4.application---------------------${applicationScope.xxx}

通过el获取时,如果没有查找到,会返回"".除了上面的获取方式外还有一种,例如

${requestScope[“xxx”]}

关于.与[]区别

[]与.在使用方式上是一样的.但是如果名称中包含了"."等特殊字符,就必须使用[]来获取. 例如

request.setAttribute("login.message", "登录失败");

${requestScope.login.message}<br>错误的

${requestScope["login.message"] }正确的

如果没有写范围,会默认从page,request,session.application依次查找

EL表达式获取复杂数据

Ø获取数组中数据

例如:${数组名称[索引] }

Ø获取List中数据

例如:${集合名称[索引]}

获取Map中数据

例如:${集合名称.key名称}

EL表达式之javabean导航

如果在域中保存的是javaBean对象,那么也可以使用EL表达式来访问javaBean的属性,因为EL表达式只做读操作,所以javaBean一定要为属性提供get方法,而对set方法没有要求。使用EL表达式获取javaBean属性就是javaBean导航。

3. EL表达式执行运算

常见的运算符

empty我们在开发中检查对象是否为null或“空”或判断容器size是否为0

注意事项:

EL表达式支持三元运算符

EL表达式不可以嵌套

${a+${b}}这种是不允许的。

EL中的加号问题

EL表达式中加号两边必须是数字或者字符串形式的数字

4. EL表达式内置对象

EL表达式的11个内置对象介绍

EL表达式的11个内置对象。11个内置对象如下所示:

pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
initParam
cookie
pageContext

其中,pageScope,requestScope,sessionScope,applicationScope是域相关的内置对象,这里我们就不再多说。这11个内置对象中,有10个内置对象的类型是Map类型,只有pageContext的类型不是Map类型,它的类型是PageContext。

关于pageContext内置对象的介绍

EL表达式的11个内置对象中,有10个内置对象的类型是Map类型,只有pageContext的类型是PageContext。它的使用类似于我们jsp的内置对象pageContext,. 通过pageContext对象可以获取其他内置对象的任意的属性值。

常用操作:${pageContext.request.contextPath}

关于请求参数相关内置对象的介绍

请求参数相关的内置对象是:

param:该内置对象的类型是Map<String,String>,可以用来获取值为单值的请求参数,其中key指的是请求参数的名称,value指的是请求参数的值,使用param获取请求参数与request.getParameter()方法一样。

paramValues:该内置对象的类型是Map<String,String[]>,可以用来获取值为多值的请求参数,其中key是参数名,value是多个参数值组成的字符串数组。

注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。

关于请求头相关内置对象的介绍

与请求头相关的内置对象是:

header:该内置对象的类型是Map<String,String>,用来获取值为单值的请求头信息,其中key代表的是请求头名称,value代表的是请求头的值;

headerValues:该内置对象的类型是Map<String,String[]>,用来获取值为多值的请求头信息,key代表的是请求头名称,value代表的是请求头的多个值。

关于全局初始化参数的内置对象的介绍

我们再学习Servlet时,讲过在web.xml文件中配置全局初始化参数,并且全局初始化参数可以使用ServletContext对象获取,现在在EL表达式中内置了一个与初始化参数相关的对象:

initParam:该内置对象的类型是Map<String,String>,用来获取web.xml文件中<context-param>标签的参数值,其中key代表的是参数名,value代表的是参数值。

关于cookie相关内置对象的介绍

EL表达式也内置一个名为cookie的对象,该内置对象与cookie相关,如下:

cookie:该内置对象的类型为Map<String,Cookie>,其中key是Cookie的名字,value是Cookie对象本身。

5. EL函数使用

EL函数库介绍

EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库是有JSTL提供的,JSTL我们会在后面的课程中详解。EL函数库就是定义了一些有返回值的静态方法,然后通过EL表达式来调用它们

在jsp页面中使用taglib指令导入EL函数库,就可以在页面中使用函数库中的方法。另外,导入的函数库可以使用的前提是,我们的项目中有相关的jar包

EL函数库使用

要使用EL函数库,首先要在jsp文件的上面使用taglib指令导入函数库:

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

其中,uri的值并不是一个网络路径,只是在定义函数库时,拟定的一个位置。

下面我们来了解EL函数库中的相关方法,具体如下:

String toUpperCase(String input):把字符串参数转换成大写,并返回;

String toLowerCase(String input):把字符串参数转换成小写,并返回;

int indexOf(String input, String substring):返回input中substring出现的索引位置;

boolean contains(String input, String substring):查看input中是否包含substring,包 含返回true,否则返回false;

boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看input中是否包含substring,包含返回true,否则返回false;

boolean startsWith(String input, String substring):判断input是否是以substring为前缀,如果是就返回true,否则就返回false;

boolean endsWith(String input, String substring):判断input是否是以substring为后缀,如果是就返回true,否则就返回false;

String substring(String input, int beginIndex, int endIndex):以beginIndex为开始值,endIndex为结束值,在input上截取子串;

String substringAfter(String input, String substring):获取input中,substring所在位置后面的字符串;

substringBefore(String input, String substring):获取input中,substring所在位置前面的字符串;

String escapeXml(String input):把input中“<”、“>“、”&“、”'“、“"”进行转义;

String trim(String input):去除input中的前后空格;

String replace(String input, String substringBefore, String substringAfter):将input中的substringBefore替换成substringAfter;

String[] split(String input, String delimiters):以delimiters为标识分割input,返回一个字符串数组;

int length(Object obj):可以获取字符串、数组、各种集合的长度!

String join(String array[], String separator):将array数组中的元素以separator连接起来,返回一个字符串。

示例代码

<!-- 导入函数库 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- 以下为body内容,头部自行添加 -->
<body>
<%
String[] strs = {"a", "b","c"};//定义一个字符数组
List list = new ArrayList();//定义一个list集合
list.add("a");//向集合中添加一个字符
pageContext.setAttribute("arr", strs);//将字符数据以arr的名字保存在page域中
pageContext.setAttribute("list", list);//将list集合以list的名字保存在page域中
%>
${fn:length(arr) }<br/><!--返回arr的长度-->
${fn:length(list) }<br/><!--返回list的长度-->
${fn:toLowerCase("Hello") }<br/> <!-- 将Hello变成小写 -->
${fn:toUpperCase("Hello") }<br/> <!-- 将Hello变成大写 -->
${fn:contains("abc", "a")}<br/><!-- 判断abc中是否包含a -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- 在忽略大小写的情况下,判断abc中是否包含Ab -->
${fn:contains(arr, "a")}<br/><!-- 判断arr数组中是否包含a -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- 在忽略大小写的情况下,判断list集合中是否包含A -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- 判断Hello.java是否以.java结束 -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- 判断Hello.java是否以Hell开始 -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 返回“-”在Hello-World中出现的位置 -->
${fn:join(arr, "-")}<br/><!-- 将arr数组中的元素以“-”连接,并返回 -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- 将Hello-World中的“-”替换成“+” -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!--最终是将数组的元素以“-”连接,并返回 -->
${fn:substring("0123456789", 6, 9)}<br/><!-- 返回0123456789中索引值为6到索引值为9之间的元素 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 返回0123456789中索引值为6到结束的元素 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- 返回Hello-World中“-”后面的字符串 -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- 返回Hello-World中“-”前面的字符串 -->
${fn:trim(" a b c ")}<br/><!-- 去掉 a b c 前后的空格 -->
${fn:escapeXml("<html></html>")}<br/> <!-- 将“<html></html>”中的“<”,“>”转义,即原样输出 -->
</body>

三.JSTL

1. JSTL标签介绍

jstl标签库介绍

JSTL(JSP Standard Tag Library,jsp标准标签库)是Apache对EL表达式的扩展,也就是说JSTL依赖EL表达式。JSTL是标签语言,使用起来非常方便。但是它不是jsp内置的标签,所以用的时候需要我们自己导包,以及指定标签库。

如果你使用Myeclipse开发javaweb,那么把项目发布到Tomcat时,你会发现,Myeclipse会在当前工程的lib目录下存放jstl的jar包,如果没有使用Myeclipse开发,那么就需要自己导入这个jstl的jar包:jstl-1.2.jar。

jstl标签库功能介绍

Jstl标签库一共包含了四大标签库:

lcore:核心标签库,这是我们学习的重点;

lfmt:格式化标签库,用的很少;

lsql:数据库标签库,这个标签库已经过时,本文档不再对其进行介绍;

lxml:xml标签库,这个标签库已经过时,本文档不再对其进行介绍。

另外Jstl标签库中还包含了jstl函数。

如何使用jstl标签库

除了jsp动作标签外,使用其他第三方的标签都需要做以下两件事:

导入jar包;

在使用标签的jsp页面中使用taglib指令导入标签库。

例如:

在jsp页面导入jstl的核心标签库:

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

其中:

l prefix="c":指定标签库的前缀,这个前缀可以赋任意的值,但大家都会在使用core标签库时指定前缀为c;

l uri="http://java.sun.com/jsp/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件。

jstl核心标签库标签介绍

JSTL core标签库中 12个标签

1、c:out 输出内容到浏览器端

2、c:set 设置值到四种数据范围,设置四个范围中java对象的一个属性值

3、c:remove 用来删除四个数据范围的数据

4、c:catch 捕获程序异常

5、c:if 取代页面中if条件语句,记住没有c:else

<c:if test="${m>5}" > </c:if>

6、c:choose c:when c:otherwise 一起使用 ,取代if elseif else 结构 、switch-case 结构

7、c:forEach 取代页面中for循环

8、c:forTokens 切割字符串

9、c:import 效果和include类似

10、c:url 完成URL重写 (禁用cookie的session追踪 ) ---- 结合c:param完成 中文URL编码

11、c:redirect 完成请求重定向

12、c:param 设置参数 一般和c:url,c:redirect或者c:import一起使用.

重点: c:if c:foreach c:set

2. JSTL核心标签

c:set

格式1:设置域中属性的值

<c:set var=’域中属性名称’ value=’属性的值’ [scope=’page(默认)|request|session|application’]></c:set>

例如:

<c:set var="password" value="tom" scope="request"></c:set>

格式2:设置域中对象属性的值

<c:set property=’对象的属性’ value=’属性的值’ target=’域中对象’></c:set>

例如:

<c:set property="id" value="10" target="${user }"></c:set>

c:if

作用:页面上的逻辑判断

格式:

<c:if test="判断的内容(一般是el表达式)" var="给前面表达式的结果起个名称" [scope="page|request|session|application"] />

注意:

scope 用来表达式结果存放的域

若指定了标签的scope属性,则必须指定var属性

例如:

<c:if test="${3>4 }" var="flag">

三大于四

</c:if>

<c:if test="${3<=4}" var='flag1'>

三不大于四

</c:if>

c:choose与c:when c:otherwise

作用:用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似 “if-else if-else” 的复杂条件判断结构。

格式:

<c:choose>

<c:when test=”el表达式”>

语句

</c:when>

<c:otherwise>

语句

</c:otherwise>

</c:choose>

例如:

<c:set var="day" value="17"/>

<c:choose>

<c:when test="${day ==1 }">

周1

</c:when>

<c:when test="${day ==2 }">

周2

</c:when>

<c:when test="${day ==3 }">

周3

</c:when>

<c:when test="${day ==4 }">

周4

</c:when>

<c:when test="${day ==5 }">

周5

</c:when>

<c:when test="${day ==6 }">

周6

</c:when>

<c:when test="${day ==7 }">

周7

</c:when>

<c:otherwise>

你估计来自火星

</c:otherwise>
</c:choose>

c:forEach

begin属性

设置循环变量从几开始

end属性

设置循环变量到几结束;

step属性

设置循环变量的步长

var属性

定义一个变量,用于接收循环或把数组或集合中遍历的每一个元素赋值给var指定的变量

varStatus属性

varStatus属性就是用来记录循环状态的,它可以创建一个循环变量vs,该循环变量有如下属性:

lcount:用来记录循环元素的个数;

lindex:用来记录所循环元素的下标;

lfirst:判断当前循环的元素是否是第一个元素;

llast:判断当前循环的元素是否是最后一个元素;

lcurrent:代表当前循环的元素。

items:属性

指定要循环的变量,可以是一个数组也可以是一个集合,默认是支持EL表达式

c:out

格式:

<c:out value=’要输出的值’ default=’默认值’ escapeXml=’是否不解析为xml’></c:out>

例如:

在域中有 username=”<a href='#'>jack</a>”

<c:out value="${username }" default="ok" escapeXml="false" ></c:out>

显示的效果为 超链接的jack

c:remove

作用:移除域中的属性

格式:

<c:remove var=’属性的名称’ [scope=’page|request|session|application’]></c:remove>

例如:

<c:set var="password" value="123" scope='request'></c:set>
<c:remove var="password" scope=’request’></c:remove>

注意:

scope不写的时候,会把所有域中的同名的属性删除掉.

c:catch

作用:

用于捕获嵌套在标签体中的内容抛出的异常

格式:

<c:catch var='异常对象名称'>
...
</c:catch>

例如:

<c:catch var="e">
<%
int i=0;
int j=1;
double k=j/i;
%>
</c:catch>
<c:out value="${e }"></c:out> 将异常输出
<c:out value="${e.message }"></c:out> 将异常信息输出
c:forTokens

作用:用指定的分隔符切分指定内容

格式:

<c:forTokens items=’指定的内容或者el表达式’ delims=’分隔符[分隔符]’ var=’给分割出来的对象起个名字’>
</c:forTokens>

例如:

<c:set var="arr" value="12,23,34|45,56"></c:set>
<c:forTokens items="${arr }" delims="|," var='a'>
${a }-
</c:forTokens>
c:import

作用:用于在JSP页面中导入一个URL地址指向的资源内容,其作用有点类似<jsp:include>这个JSP标准标签

最基本的使用

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

作用:用于在JSP页面中构造一个URL地址

格式:

<c:url value=’路径’ [context=’工程名’] [var=’给当前路径起个名称’] [scope=’page|request|session|application’]></c:url>

例如:

<c:url value="/jstl/if.jsp" var="ifurl" context="/day11" scope="request"/>
c:redirect

作用:主要应用于重定向

例如:

<c:redirect url="/jstl/if.jsp" context='/day11'></c:redirect>

c:param

作用:在地址栏后面设置参数,一般和c:import ,c:url,c:redirect一起使用

例如:

<c:url value="/jstl/if.jsp" var="ifurl" context="/day11" scope="request">
<c:param name="username" value="sansan"></c:param>
<c:param name="password" value="123"></c:param>
</c:url>

修改jsp的默认编码

原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2017-01-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏懒人开发

AndroidStudio简单使用(二):左侧Structure

上面有说, 可以通过 Alt + 7 快捷键 调出来。 个人觉得, 这个对于查看代码结构,还是很方便的。直接可以看到代码的大体结构。 我们以 android...

3212
来自专栏野路子程序员

Thinkphp修改一句代码,使得foreach标签支持对象,增加变量[数组对象]混合解析法!

3268
来自专栏积累沉淀

Linux之grep和egrep命令总结

grep / egrep 语法: grep  [-cinvABC]  'word'  filename -c :打印符合要求的行数 -i :忽略大小写 ...

19110
来自专栏前端儿

Node.js爬虫抓取数据 -- HTML 实体编码处理办法

2.如果使用了 .html()方法,则很多情况下(多数是非英文的时候)都会出现,这时,可能就需要转义一番了

2041
来自专栏IMWeb前端团队

还在纠结用不用ES6,不如来试试TypeScript

The only limits in our life are those we impose on ourselves. 弱爆的 ES6 in bro...

2370
来自专栏柠檬先生

Angularjs基础(九)

AngularJS 应用 应用程序讲解     实例:         <html ng-app="myNoteApp">           <he...

1856
来自专栏个人分享

jsch ssh服务器调用Linux命令或脚本的小问题

这里发现了一个问题,如果使用红色字体中的方法,用来输出执行linux命令或sh文件时系统错误的输出,这样的话会造成一个问题,就是使用log4j的方法无效,后面的...

1531
来自专栏前端说吧

Sass-学习笔记【基础篇】

4064
来自专栏java一日一条

50个常见的 Java 错误及避免方法(第二部分)

System.out.println("Whatdo you want to do?");

1193
来自专栏全栈之路

golang教程

这里有两个关键点。 - 其一是defer关键字。defer语句的含义是不管程序是否出现异常,均 在函数退出时自动执行相关代码。 - 其二是Go语言的函数允许返回...

5802

扫码关注云+社区

领取腾讯云代金券