bean:cookie
根据 cookie 的键检索一个 cookie ,将其值赋给在 id 属性,并保存在本地范围和页面范围里。
value 和 multiple 功能跟 header 一样
当使用 bean:write 时,其 name 属性对应 bean:cookie 的 id 属性, property 属性值必须是“ value ”。
bean:header
bean:header 标记用于将 HTTP 请求头中的某个信息的 String 对象存储在 page 范围和本地范围内的 JSP 脚本变量中。
如果指定了 multiple 属性。可以存储同一名称的多个标题。如:如果传入请求具有名称同为“ Accept-Language ”的两个标题,则将使用 String[] 数组来捕获每个标题值。然后将此数组存储在由 id 属性指定的 JSP 变量中。
value 属性用于如果传入请求中不存在指定资源时指定一个默认值。
bean:parameter
bean:parameter 标记将 HTTP 请求参数保存在 page 范围和本地范围内的 JSP 脚本变量中。
指定了 multiple 属性可以将同名参数的多个参数值保存到 page 范围和本地范围内的一个数组( String[] )中。
value 属性表示:如果 name 属性指定的要查找的参数不存在,则则将创建一个新的 String 对象,并将 value 属性的值赋给这个对象,然后同时存储在 page 范围和本地范围里
bean:page
检索 JSP 隐式对象,包括 application, config, request, response, 和 session ,然后放在本地范围和页面范围里。
id 属性值不能为 application, config, request, response, 和 session 。因为此标签会将变量保存在本地范围里。但本地范围已经存在 application, config, request, response, 和 session 这些变量了。其实此标签的主要功能是将这些隐式对象保存在页面范围里了。用 bean:write 只能在 page 不能读取存放在本地范围里的变量。
访问 Web 资源
bean:message
访问指定资源束的一个键值对。
bundle 属性指定使用哪个资源束
key 指定关键字的名称
locale 用于限定语言环境
scope 指定查找 name 属性指定的对象时的搜索范围(应用程序、页面、请求或会话),如果没有指定,则按下列顺序搜索每个范围:页面、请求、会话、应用程序。
指定关键字有三种方法:
1. 用 key 属性来指定关键字 :
<bean:message key=”label.search.name”/>
2. 使用 name 属性指定一个变量,标记将这个变量的值作为检索的关键字:
<%
String msg=”result”;
pageContext.setAttribute(“msg”,msg);
%>
<bean:message bundle=”special” name=”msg” arg=”success”/>
struts-config.xml:
<message-resources parameter="com.yourcompany.struts.SpecialResources" key=”special” />
SpecialResources.properties:
result={0}
页面显示:
success
3. 使用 name 和 property 属性指定一个 javabean 的字段作为检索的关键字:
bean:resource
用于加载 Web 应用程序资源的内容并将其以 String 对象存储在页面范围和本地范围内的 JSP 变量中。另外,你可以选择指定是否只想要资源的 java.io.InputStream 对象的引用而不是将其内容保存在 String 对象中
Web 应用程序资源是那些作为 Web 应用程序的一部分而打包的文件。如:
如果你的 Web 应用程序位于名为 c:\tomcat\strutssample 的目录中,并有以下文件:
l c:\tomcat\strutssample\index.jsp
l c:\tomcat\strutssample\WEB-INF\struts-config.xml
那么你就可以将 index.jsp 作为“ /index.jsp” 来访问。请注意, WEB 应用程序资源的路径与该应用程序相关,且必须用斜杠( / )开头。
如果加载资源错误,则在运行 resource 标记时会抛出一个 JspException 异常。 ]
用 resource 标记加载 struts-config.xml 的示例:
<bean:resource id=”strutsConfig” name=”/WEB-INF/struts-config.xml”/>
访问:
Struts Config file contents:<%=strutsConfig%>
或
Struts Config file contents:<bean:write name=”strutsConfig”/>
以下代码帮说明如何使用资源标记来为 WEB 应用程序资源获得一个 java.io.InputStream 的引用。
<bean:resource id=”strutsConfig” input=”true” name=”/WEB-INF/struts-config.xml”/>
input 属性接受任何的值。只要存在值, java.io.InputStream 引用将被存储在 JSP 变量中,而不是包含 WEB 资源内容的 String 对象。
你可以使用 bean:resource 标记加载 web 应用程序资源的内容,比用 Scriplet 更简洁。
bean:struts
用于将 Struts 配置对象的引用存储在本地范围和页面范围内的 JSP 变量中。
使用标记必须指定 formBean,forward 或 mapping 属性之一,否则运行时将抛出 JspException 。另外,如果找不到指定的配置对象,运行时将抛出 JspException
第一种用法:存储 fromBean 对象
<bean:struts id=”cfg” formBean=”searchForm”/>
formBean 属性的值与在 Struts 配置文件中 <form-bean> 标记的 name 属性的值相匹配。
第二中:存储 forward 对象
<bean:struts id=”cfg” forward=”search”/>
forward 属性的值与在 Struts 配置文件中的 <global-forward> 标记的子标记 <forward> 的 name 属性匹配。
第三种:存储 Action 对象
<bean:struts id=”cfg” mapping=”/search”/>
mapping 属性的值与在 Struts 配置文件中的 <action> 标记的 path 属性的值匹配。
bean:include
用于执行对页面的请求,并将响应结果的客户端代码存储在 JSP 变量中。
有三种使用方法:
1. 使用 forward 属性指定 forward 名称
<bean:include id=”search forward=”forward”/>
2. 使用 href 属性指定绝对 URL
<bean:include id=”search” href=” http://www.google.com ” />
3. 使用 page 属性指定相对于应用程序的 URL
<bean:include id=”search” page=”/search.jsp”/>
使用 bean:write 输出时要将其 filter 属性设置为 false 才能显示正确信息,否则显示客户端源代码
问题 1
用 bean:write 输出时中文信息是乱码
定义和输出 JavaBean
bean:define
定义一个变量并将其保存在本地范围和由 toScope 指定的范围里。如果 id 指定这个变量已存在则替换之。
toScope 属性可选的值有: page,request,session.application 。默认为 ”page”
scope 属性指定要赋给这个变量的值所在的范围。
type 指定指定要赋给这个变量的值的类型。如果该标记指定了 value 属性则 type 默认为 java.lang.String ,否则值为 java.lang.Object 。
给 id 属性变量赋值有以下四种方法:
1. 设置 value 属性
<bean:define id=”name” value=”rolia”/>
2. 同时设置 name 和 property 属性
name 代表一个已存在的 Bean , property 代表这个 Bean 的某个属性。 id 变量的值由 property 属性决定。
3. 设置 name 属性
name 属性指定一个以存在的变量,可以用 scope 属性指定这个变量所在范围。
4. 将值放在标记的起始位置和结束位置之间。
<bean:define id=”name”>rolia</beandefine>
bean:write
用于输出变量,或 JavaBean 的某个属性字段 , 并调用 toString() 方法获得字符串,然后输出字符串的内容。
l name 属性指定一个已存在的变量
l property 属性与 name 属性一起指定 JavaBean 的某个属性字段
l format 指定输出格式如:
<%
java.util.Calendar c = java.util.Calendar.getInstance(java.util.TimeZone.getTimeZone( "GMT+8" ),java.util.Locale.CHINA);
pageContext.setAttribute( "c" ,c);
%>
< bean:write name = "c" property = "time" format = "dd-mm-yyyy hh:mm:ss" />
l filter 当为 true 时,转换 HTML 符号。默认为 true
当要输出的变量不存在或为 null 时抛出错误。所以在输出变量前应用 logic:present 检查变量是否存在。
bean:size
用于将数组、基于 java.util.Collection 的对象或基于 java.util.Map 对象的大小以 java.lang.Integer 对象存储在本地范围和页面范围的变量里。
有三种方法指定集合:
1. 使用一个 scriplet 表达式表示一个本地范围的变量
<%
String[] array = new String[3];
%>
<bean:size id="size" collection="<%=array%>"/>
<bean:write name="size"/>
2. 使用 name 属性来指定集合对象的名称。若没有指定 scope 则依次在 page,request,session.application 范围里查找,否则在 scope 指定的范围里查找。
3. name 和 property 属性指定集合对象的名称为一个 JavaBean 的某个字段的名称。若没有指定 scope 则依次在 page,request,session.application 范围里查找,否则在 scope 指定的范围里查找。
如果没有使用上述任何一种方法指定集合则抛出 JspException