JSTL核心标签库中提供了如下一些与URL操作相关的标签:
l
l
l
l
在举例讲解上面的某些标签时,要引用另外一个JSP文件,这里先创建好这个JSP文件,如例程8-20所示。
例程8-20 register.jsp
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=gb2312" %>
<%
String name = request.getParameter("name");
name = new String(name.getBytes("iso-8859-1"),"gb2312");
session.setAttribute("name",name);
String country = request.getParameter("country");
country = new String(country.getBytes("iso-8859-1"),"gb2312");
session.setAttribute("country",country);
%>
name=${name};
country=${country}
在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。
语法1,使用value属性指定参数的值:
语法2,在标签体中指定参数的值:
parameter value
表8.8
语法1,没有标签体的情况:
[context="context"]
[var="varName"]
[scope="{page|request|session|application}"] />
语法2,有标签体的情况,在标签体中指定构造的URL的参数:
[context="context"]
[var="varName"]
[scope="{page|request|session|application}"]>
表8.9
属性名 |
是否支持EL |
属性类型 |
属 性 描 述 |
value |
true |
String |
指定要构造的URL |
context |
true |
String |
当要使用相对路径导入同一个服务器下的其他WEB应用程序中的URL地址时,context属性指定其他WEB应用程序的名称 |
var |
false |
String |
指定将构造出的URL结果保存到Web域中的属性名称 |
scope |
false |
String |
指定将构造出的URL结果保存到哪个Web域中 |
value属性所指定的URL可以是相对路径和绝对路径,其具体细节与8.3.12节的
例程8-21是一个使用
例程8-21 c_url.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=gb2312" %>
使用绝对路径构造URL:
使用相对当前JSP页面的路径构造URL:
使用相对当前WEB应用的路径构造URL:
在浏览器地址栏输入如下地址访问例程8-21:
http://localhost:8080/JSTL/c_url.jsp?country=China
查看例程8-21的运行结果的源文件,内容如例程8-22所示。
例程8-22 c_url.jsp运行结果的源文件
使用绝对路径构造URL:
使用相对当前JSP页面的路径构造URL:
使用相对当前WEB应用的路径构造URL:
语法1,将URL地址指向的资源内容以字符串形式输出或以字符串形式保存到一个变量中:
[context="context"]
[var="varName"]
[scope="{page|request|session|application}"]
[charEncoding="charEncoding"]>
optional body content for
语法2,将URL地址指向的资源内容保存到一个Reader对象中:
[context="context"]
varReader="varReaderName"
[charEncoding="charEncoding"]>
body content where varReader is consumed by another action
表8.10
属性名 |
是否支持EL |
属性类型 |
属 性 描 述 |
url |
true |
String |
指定要导入的资源的URL地址 |
context |
true |
String |
当要使用相对路径导入同一个服务器下的其他WEB应用程序中的资源时,context属性指定其他WEB应用程序的名称 |
var |
false |
String |
指定将导入的资源内容保存到Web域中的属性名称 |
scope |
false |
String |
指定将导入的资源内容保存到哪个Web域中 |
charEncoding |
true |
String |
将导入的资源内容转换成字符串时所使用的字符集编码 |
varReader |
false |
String |
指定将导入的资源内容保存到page域中的一个java.io.Reader对象中,varReader属性指定了该Reader对象在page这个Web域中的属性名称。 |
使用
当使用第1种语法格式时,如果指定了var属性,导入的资源内容以字符串形式保存到一个变量中,var属性指定了这个变量保存在Scope属性指定的Web域中的名称;如果没有指定var属性,导入的资源内容将以字符串形式直接输出。第1种语法格式的标签体内中可以嵌套
使用第2种语法格式时,导入的资源内容保存到page域中的一个java.io.Reader对象中,varReader属性指定了该Reader对象在page这个Web域中的属性名称。因为
使用
1.使用相对URL导入其他资源文件
(1)当被导入的外部资源文件与当前JSP文件属于同一个WEB应用程序时,JSP容器对资源路径的处理与
(2)当被导入的外部资源文件与JSP文件属于同一个服务器下的不同的WEB应用时,如果要使用相对路径,路径必须以“/”开始。此时,
2.使用绝对URL导入其他资源
使用绝对路径导入外部资源文件时,即使被导入的文件与当前JSP文件属于同一个WEB应用程序,被导入的资源文件也不会共享当前JSP页面的request和session对象。因为在这种情况下,当前JSP文件所属的Web服务器充当了一个Http客户端程序,去访问绝对路径所指定的外部资源文件,然后将响应结果的实体内容加入到当前JSP页面中,此时,访问当前JSP页面的客户端是浏览器,而访问绝对路径所指定的外部资源文件的客户端是当前JSP文件所属的Web服务器,这显然属于两个不同的客户端,所以,被导入的资源文件和当前JSP页面不可能共享request和session对象。
例程8-23是使用
例程8-23 c_import.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=gb2312" %>
使用相对路径导入同一个WEB应用中的资源:
使用相对路径导入同一个服务器下的不同WEB应用中的资源:
使用绝对路径导入资源示例1:
使用绝对路径导入资源示例2:
charEncoding="gb2312">
${myImport}
在浏览器地址栏输入如下地址访问例程8-23,其运行结果如图8.20 所示:
http://localhost:8080/JSTL/c_import.jsp?name=zxx&country=China
图8.20
在
语法1,没有标签体的情况:
语法2,有标签体的情况,在标签体中指定重定向时的参数:
表8.11
属性名 |
是否支持EL |
属性类型 |
属 性 描 述 |
url |
true |
String |
指定要转发或重定向到的目标资源的URL地址 |
context |
true |
String |
当要使用相对路径重定向到同一个服务器下的其他WEB应用程序中的资源时,context属性指定其他WEB应用程序的名称 |
url属性指定将要重定向的资源的URL时,可以使用相对路径和绝对路径,其具体细节与
例程8-24 c_redirect.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=gb2312" %>
例程8-24的运行结果如图8.21 所示。
图8.21