JSP学习笔记 07 - 内置对象application、out

一、内置对象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()关闭流

方法 printInprint的区别是:printIn会向缓存区写入一个换行,而 print不写入换行。但是浏览器的显示区域目前不识别 printIn写入的换行。如果希望浏览器显示换行,应当向浏览器写入<br>实现换行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值