accept | image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */* |
referer | http://localhost:8080/struts/index.jsp |
accept-language | zh-cn |
ua-cpu | x86 |
accept-encoding | gzip, deflate |
user-agent | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon) |
host | localhost:8080 |
connection | Keep-Alive |
cookie | JSESSIONID=D800F1B5CADDFA2D39EFEDC3DB5FD6F3 |
可以看出,Header其实就是一个个的"名/值"对,
你所使用的浏览器是:
在上面的代码中,使用了
name属性:用于指定标记要读取的Header名称,比如此处指定了该标记要读取的Header名称为"user-agent",也就是用户所使用的浏览器的信息。
id属性:在
以下是上面代码的运行效果:
你所使用的浏览器是:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon)同样,可以使用下面的程序从pageContext中读出已经存入的变量。在上面的标记中,已经将user-agent这个Header放在了名为explorer 的变量中:
<%String test = "";
test = (String) pageContext.getAttribute("explorer");
out.println("您所使用的浏览器是:"+test);
%>
以下是运行效果:
您所使用的浏览器是:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon)
点击此处添加请求参数
在上面的代码中,使用了
以下是
请求参数testString的值为:
请求参数testInt的值为:
上面的代码中用到了
name属性:用于指定页面请求中的参数名,如在上面的示例中,先后指定的请求参数名为testString和testInt。
id属性:在
value属性:该属性指定请求参数的默认值。当HTTP请求中不包含name属性所指定的参数时,倘若不为该参数指定一个默认值,则后台将报错。因此,通常情况下都应为请求参数指定一个默认值。在上例中为请求参数testString和testInt指定的默认值均为一个空串。
以下是运行结果代码的运行结果。用户可以通过点击"添加参数"按钮来为本页面加入请求参数。在用户点击后,应该能看到请求参数在页面上显示出来了,同时在地址栏上可以看到相应的请求参数。
添加参数
请求参数testString的值为:this is a test
请求参数testInt的值为:10000
如果在请求参数中包含多个同名的请求参数,那么,
那么,当用户使用
添加参数
testValue的值是:
如果想要把所有和参数名匹配的请求参数的值都显示出来,可以使用
参数列表如下:
<%
for (int i=0;i out.println("参数"+i+" : " + testArray[i]);
out.println("
");
}
%>
在上面的代码中,使用了
以下就是运行效果,请求的URL为:
参数列表如下:
参数0 :
Cookie是Web服务器留在客户端用于识别客户身份的一种方式。它是在用户访问服务器时,服务器创建并保存在客户端的。待到用户下一次登录时,服务器可以根据Cookie所保留的信息来"认出"客户。这种技术在如今大量使用浏览器的电子商务应用中得到相当广泛的应用。虽然使用Cookie以后Web服务器端可以很方便的识别用户,但这也带来了很大的安全问题。因此,大多数的浏览器都可以选择是否允许保存Cookie。
每个Cookie其实就是一个"名/值"对,通常,在java中使用javax.servlet.http.Cookie来构造一个Cookie对象。以下是一段Cookie 代码示例:
if (testcookie.getValue().equals("emptyValue")){
javax.servlet.http.Cookie newcookie = new javax.servlet.http.Cookie("/taglib1/bean-cookie","Taglib1 Cookie Value");
newcookie.setComment("This is a new cookie by Taglib1.");
newcookie.setMaxAge(3600);
response.addCookie(newcookie);
}
%>
新添加的Cookie的值是:
上面代码的第一句使用到了
name属性:
id属性:在
value属性:倘若name属性所指定的Cookie不存在,就使用该value属性的值做为其默认值。
这样,上面代码的第一句的含义就很清楚了,它是在查找一个名为/taglib1/bean-cookie的Cookie,如果它存在,就把它赋给一个名为testcookie的Cookie对象。倘若它不存在,就将默认的value属性的值设为testcookie的value。
在接下来的页面代码中,程序首先把testcookie的值取出来进行判断,倘若它等于"emptyValue",则说明还没有为该用户正式创建过 Cookie。于是便为用户创建Cookie。程序调用javax.servlet.http.Cookie类的构造函数来构造一个name为/taglib1/bean-cookie,value 为"Taglib1 Cookie Value"的Cookie。同时为其设定注释和最大过期时间,在上面的代码中最大过期时间设置为3600秒。然后将创建好的新 Cookie写入服务器返回对象中,在客户端进行保存。当用户第一次访问该页面时,由于Cookie还未建立,所以会调用Cookie的构造函数来创建一个新的Cookie,但当用户关闭浏览器再次访问时,就会看到新添加的Cookie的值始终不变了,除非已经超过了它的最大过期时间。
以下是代码的运行效果,用户可以尝试关闭该浏览器然后再次打开以观察Cookie的使用效果。
新添加的Cookie的值是:emptyValue
<bean:page>
<bean:page>标记用于获取JSP内建对象。常用的内建对象包括application、config、request、response还有session。
<bean:page>标记的使用很简单,以下是一段示例代码:
<bean:page id="session_dup" property="session"/>
<%
out.println("");
");
out.println(""); ");
out.println(""); ");
out.println("Session的创建时间");
out.println("
out.println(""); ");
out.println(session_dup.getCreationTime());
out.println("
out.println("
out.println(""); ");
out.println(""); ");
out.println("Session的ID");
out.println("
out.println(""); ");
out.println(session_dup.getId());
out.println("
out.println("
out.println(""); ");
out.println(""); ");
out.println("Session的失效时间");
out.println("
out.println(""); ");
out.println(session_dup.getMaxInactiveInterval());
out.println("
out.println("
out.println(""); ");
out.println(""); ");
out.println("Session上次访问时间");
out.println("
out.println(""); ");
out.println(session_dup.getLastAccessedTime());
out.println("
out.println("
out.println("
%>
上面的代码第一行使用了<bean:page>标记,它有两个属性:
property属性:指定了要使用的内建对象的名称。如request,session,application等。例如在上面的代码中就引用了session对象。
id属性:将property属性所指定的内建对象赋值给id属性所指定的对象,然后在页面上就可以引用它了。例如在上面的代码里就将session 对象赋给了一个叫session_dup的对象,接下来的代码就从session_dup中读取出了session中的信息并显示出来。
上面的程序运行效果如下所示
Session的创建时间 | 1216445271937 |
Session的ID | D800F1B5CADDFA2D39EFEDC3DB5FD6F3 |
Session的失效时间 | 1800 |
Session上次访问时间 | 1216446318484 |
这里和session时间相关的值都是long型的整数,它们代表从1970年1月1日到现在的毫秒数。当不停的刷新页面时,会发现最后一个 "上次访问时间"后的整数不停的在变化。
id属性:该属性指定了通过其它属性所引用的Web资源在本页面内的对象名。
page属性:该属性指定了相对于当前应用的一个URI,比如要将当前Web应用的首页当作一个资源引入当前页面中,可以使用"/index.jsp" 这样的方式。注意,page属性的值必须以"/"开头。
forward属性:该属性指定了全局的转发路径,它和struts-config.xml文件中设置全局转发的元素相匹配。
href属性:指定一个完整的URL链接。
以下是一些该标记的使用方法。
上面的代码将taglib1应用的主页做为了外部资源引入,并保存在对象indexpage中,然后使用了
上面的代码将taglib1应用中的全局转发项"index"做为了外部资源引入,查询struts-config.xml文件可以得知,名称为"index"的全局转发项就是链接到了主页,因此,以上代码的作用也是将主页作为了资源引入当前页面,并使用
当用户希望使用这个资源文件中的消息文本时,只需要将
beanmessage1=This is bean message No.1 beanmessage2=This is bean message No.2 beanmessage3=This is bean message with arg,{0}.
使用
第一种,直接在
以下是实际效果:
This is bean message No.1
第二种,使用
<%
String test = "beanmessage1";
pageContext.setAttribute("messagekey",test);
%>
上面的代码首先定义了一个字符串,该串就是资源文件内消息文本的key值,然后将之存储于pageContext对象内,并命名为messagekey,再由标记的name属性指定pageContext对象内的messagekey。以下是运行效果,可以看到,依然能读出key为beanmessage1的消息文本。
This is bean message No.1
第三种方法是使用一个已经存在的JavaBean对象名做为name属性的值,再将其中某个属性做为property属性的值,以该JavaBean对象中的这一属性所存入的字符串值作为消息文本的key。示例代码如下所示:
<%
TestPageBean bean1 = new TestPageBean("beanmessage1","empty");
pageContext.setAttribute("testbean",bean1);
%>
在上面的代码中首先初始化了一个TestPageBean类型的对象bean1,这个bean1有两个属性,一个是name属性,一个是value属性,都是字符串类型,在构造函数中已经分别为其初始化了,其中,将name属性的值设为beanmessage1,也就是消息文本的key值。然后,将这个bean1存入 pageContext对象中,命名为testbean。在
有些时候,资源文件中的消息文本带有一些参数,如下面的形式:
beanmessage3=This is bean message with arg,{0}.
可以使用
运行效果如下所示:
This is bean message with arg,HELLOWORLD.
id属性:该属性和Struts BEAN标记库的其它标记中的id属性一样,它定义了一个对象来表示Web资源的内容。
name属性:用于指定Web资源路径。
input属性:如果没有设置input属性,则id属性默认的是一个字符串类型的对象。如果给input赋了值,比如"yes",则id属性所定义的对象类型就为java.io.InputStream。
以下是一段示例代码:
上面的代码将首页作为资源引入了页面,并且为其命名为indexpage,由于未设置input属性,因此,indexpage实际上就是一个字符串。它的内容应该是index.jsp的源代码.
id属性:将获取到的Struts框架内部对象赋给由id所指定的对象。
formbean属性:该属性指定了ActionFormBean对象,它与struts-config.xml中的
forward属性:该属性指定了ActionForward对象,它与struts-config.xml中的
mapping属性:该属性指定了ActionMapping对象,它与struts-config.xml中的
以下是一段示例代码:
上面的代码将使用了forward属性,它将全局转发中name为index的项赋给了indexpage,然后将其转发路径用
/index.jsp
通常,定义变量有以下三种方式:
第一种是通过value属性直接设置变量的值,在这种情况下id属性所指定的变量是一个String类型。以下是示例代码:
运行效果如下所示:
This is a test string
第二种方式是通过name属性和property属性共同指定一个变量来赋给id属性所定义的变量,此时id属性所定义的变量可以是任何类型。以下是示例代码:
<%
Date d = new Date();
pageContext.setAttribute("currDate",d);
%>
当前时间距离1970年1月1日的毫秒数为:
上面的代码中将当前时间的Date型对象放入了pageContext对象中,然后使用
当前时间距离1970年1月1日的毫秒数为:1216446879484
第三种方式是通过type属性和name属性联合指定id所定义的变量的类型。type属性是id所定义变量的完整类型,name属性指定了已经存在的某个JavaBean。以下是一段代码示例:
<%
pageContext.setAttribute("session",request.getSession());
%>
session的上次访问时间:
在上面的代码中,首先将session对象存入pageContext对象中,然后使用
session的上次访问时间:1216446876937
<%
ArrayList testlist = new ArrayList();
testlist.add(new Integer(1));
testlist.add(new Integer(2));
testlist.add(new Integer(3));
pageContext.setAttribute("listforcount",testlist);
%>
长度为:
在上面的代码中,首先定义了一个ArrayList型的对象,然后为其添加三个成员,再将它存入pageContext对象中,并命名为listforcount。接下来使用
长度为:3
以下是一些简单的使用
<%
String a = "string for test1";
pageContext.setAttribute("test1",a);
%>
上面的代码首先将一个字符串变量存于pageContext对象中,再用
string for test1
<%
TestPageBean t = new TestPageBean("string for test2","emptyvalue");
pageContext.setAttribute("test2",t);
%>
上面的代码创建了一个TestPageBean型的对象,该对象有两个属性,分别是name和value。在构造函数中将其name属性赋值为 "string for test2",然后将这个TestPageBean型的对象放入pageContext对象中,再用
string for test2
<%
Date currTime = new Date();
pageContext.setAttribute("currTime",currTime);
%>
当前的时间是:
上面的代码中,首先定义了一个Date型对象,然后将其存储于pageContext对象中,命名为currTime。在使用
当前的时间是:2008-07-19 02:17:40
<%
String filterstring = "
";
pageContext.setAttribute("filterstring",filterstring);
%>
这是filter为true的输出效果:
在上面的代码中,定义了一个字符串filterstring,它的内容是"
",在HTML符号中
应该是一个水平线。接下来使用
这是filter为true的输出效果:
这是filter为false的输出效果: