一、内置对象application
application
对象由服务器负责创建,每个Web服务目录下的 application
对象被访问该服务目录的所有的用户所共享,但不同Web服务目录下的 application
互不相同。
1、application对象的常用方法
public void set Attribute( String key, Object obj)
。application
对象可以调用该方法将参数Object
指定的对象obj
添加到application
对象中,并为添加的对象指定一个索引关键字。如果添加的两个对象的关键字相同,则先前添加的对象被清除。public Object get Attribute( String key)
。获取application
对象含有的关键字是key
的对象。由于任何对象都可以添加到application
对象中,因此用该方法取回对象时,应强制转化为原来的类型。public Enumeration get AttributeNames)
。application
对象调用该方法产生一个枚举对象,该枚举对象使用nextElemets()
遍历application
中的各个对象所对应的关键字。public void remove Attribue( String key)
。从当前application
对象中删除关键字是key
的对象。public String get ServletInfo()
。获取 Servlet编译器的当前版本的信息。
由于 application
对象对所有的用户都是相同的,任何用户对该对象中存储的数据的改变都会影响到其他用户,因此在某些情况下,对该对象的操作需要实现同步处理。
- 注意:有些服务器不直接支持使用
application
对象,必须用Servlet context
类声明这个对象,再使用get Servlet Context()
方法对这个application
对象进行初始化。
2、用application对象制作留言板
在这里使用“向量”这种数据结构,java的 java. util
包中的Ⅴector<V
>泛型类负责创建一个向量对象。如果你已经学会使用数组,那么使用向量就会很容易。当我们创建一个向量时不用像数组那样必须要给出数组的大小。向量创建后,例如,对于“ Vector< String>a = new Vector< String>();
”可以使用add(V o)
方法把 String
对象a
添加到向量的末尾,向量的大小会自动增加。
example3_18_input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="example3_18_pane.jsp" method="post" name="form">
输入您的名字:<br>
<input type="text" name="peopleName">
<br>输入您的留言标题:<input type="text" name="Title">
<br>输入您的留言:<br><textarea name="messages" rows="10" cols="36"></textarea>
<br><input type="submit" value="提交信息" name="submit">
</form>
<form action="example3_18_show.jsp" method="post" name="form1">
<input type="submit" value="查看留言板" name="look">
</form>
</body>
</html>
example3_18_show.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
public String handleStr(String s){
try{
byte bb[] = s.getBytes("ISO-8859-1");
s = new String(bb,"UTF-8");
return s;
}catch(Exception exp){
return s;
}
}
%>
<%
Vector v = (Vector)application.getAttribute("Mess");
for(int i = 0;i < v.size();i ++){
String message = (String)v.elementAt(i);
String a[] = message.split("#");
out.print("留言人:" + handleStr(a[0]) + ",");
out.print("标题:" + handleStr(a[1]) + "<br>");
out.print("留言内容:<br>" + handleStr(a[2]));
out.print("<br>--------------------------<br>");
}
%>
</body>
</html>
example3_18_pane.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
Vector v = new Vector();
int i = 0;
ServletContext application;
synchronized void leaveWord(String s){
application = getServletContext();
i ++;
v.add("No." + i + "," + s);
application.setAttribute("Mess", v);
}
%>
<%
String name = request.getParameter("peopleName");
String title = request.getParameter("title");
String messages = request.getParameter("messanges");
if(name == null){
name = "guest" + (int)(Math.random() * 10000);
}
if(title == null){
title = "无标题";
}
if(messages == null){
messages = "无信息";
}
String s = name + "#" + title + "#" + messages;
leaveWord(s);
out.print("您的信息已提交!");
%>
</body>
</html>
二、内置对象out
out
对象是一个输出流,用来向用户端输出数据。在前面的许多例子里曾多次使用out
对象进行数据的输出。out
对象可调用如下的方法用于各种数据的输出,例如:
out. print( boolean)
或out. printIn( boolean)
用于输出一个布尔值。out. print(char)
或out. printIn(char)
输出一个字符。out. print( double)
或out. printIn( double)
输出一个双精度的浮点数。out. print( fload)
或out. printIn( float)
用于输出一个单精度的浮点数。out. print(long)
或out. printIn(long)
输出一个长整型数据。out. print( String)
或out. printIn( String)
输出一个字符串对象的内容。out. newLine()
输出一个换行符。out. flush()
输出缓冲区里的内容。out. close()
关闭流。
方法 printIn
和 print
的区别是:printIn
会向缓存区写入一个换行,而 print
不写入换行。但是浏览器的显示区域目前不识别 printIn
写入的换行。如果希望浏览器显示换行,应当向浏览器写入<br>
实现换行。