(3)对象
JSP根据ServletAPI而提供了某些隐含对象。可以使用标准的变量来访问这些对象而不用编写额外的代码,就可以在JSP中自动使用到它。
在JSP页面中可以获得7个主要的隐含对象。
1.out 把信息回送到客户端的浏览器中。
2.response 处理服务器对客户端的一些响应。
3.request 用来得到客户端的信息。
4.application 用来保存网站的一些全局变量。
5.session 用来保存单个用户访问时的一些信息。
6.cookie 将服务器端的一些信息写到客户端的浏览器中。
7.pageContext 提供了访问和放置页面中共享数据的方式。
1.out对象
out对象是javax.servlet.jsp.JspWriter类的一个子类对象,作用就是把信息回送到客户端的浏览器中。在out对象中,最常用的的
方法就是pirnt()和println()。在使用print()或println()方法时,由于客户端是浏览器,因此向客户端输出时,可以使用HTML中 一些标记。
out.println("<h1> Hello.jsp </h1>");
其他一些常用的方法是:out.write()功能和out.print()相同,newLine()的功能是输出一个换行符,out.flush()的功能是输出缓冲内容。out.close()的功能是关闭输出流。out对象的生命周期是当前页面。因此对于每一个JSP页面,都有一个out对对象。
<%@ page contentType="text/html;charset=GBK" %>
<%
out.println("Hello");
out.newLine();
out.write("Hello");
%>
<%="hello"%>
<%
out.close();
%>
程序中用3中方法输出了3个Hello字符串,"out.newLine();"是输出一个"\n",并不是输出一个"<br>"所以在浏览器上显示不出来。 可以将out.print和out.write缩写成一个"="。
2.response对象
response对象是一个javax.servlet.http.HttpServletResponse子类的对象。
页面转向
对于response对象,最常用到的是sendRedirect()方法,可以使用这个方法将当前客户端的请求转到其他页面去。响应的代码格式为
response.sendRedirect("URL地址");
和<jsp:forward>指令的最大区别是:只能使用<jsp:forward>在本网站内跳转,但可以使用response.sendRedirect跳转到任何一个地址上的页面。
<%@ page contentType="text/html;charset=GBK" %>
<%
response.sendRedirect("5_01.jsp");
%>
执行程序,会自动跳到5_01.jsp文件,而且浏览器的地址显示的是5_01.jsp。
动态contentType响应
当请求一个JSP页面的时候,如果该页面用page指令设置页面的contentType属性的值是text/html将把静态页面发送给客户端。也可以设置为其他一些相应类型。text/plain(文本文件)、application/x-msexcel(Excel文件)和application/msword(Word文件)
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
<BODY>
<P>pesponse 对象<BR> setContentType方法
<P>将当前页面保存为word文档
<%
response.setConetType("application/msword;charset=GB2312");
%>
</BODY>
<HTML>
执行程序,会将页面转化成为Word文档的格式发送到客户端的浏览器。
HTTP文件头响应
可以利用JSP动态改变客户端的响应,使用的语法是"response.setHeader()",比如让客户端自动每隔5秒刷新一次。
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="java.util.*" %>
<%
out.println(""+new Date());
response.setHeader("Refresh","5");
%>
设置缓冲区
在实际的JSP应用开发中,为了确保显示的正确性,需要将禁用页面缓冲,否则会显示其他用户的一些的信息。为解决这个问题,需要在每个JSP的页面中添加语句
<%@ page contentType="text/html;charset=GBK" %>
<%
response.setHeader("Pragma","No_cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",-1);
%>
<% out.println("设置完毕!"); %>
程序中3设置语句让浏览器每次请求页面的时候,都去重新编译运行。
3.request对象
request对象是javax.servlet.HttpServletRequest子类的对象,当客户端请求一个JSP页面时,JSP容器会将客户端的请求信息包装在这个request对象中,请求信息的内容包括请求的头信息(Header)、系统信息(比如编码方式)、请求的方式(比如GET或POST)请求的参数名称和参数值等信息。
得到Form表单的信息
通常用最多的是客户端请求的参数名称和参数值信息请求的参数名称和参数值信息。得到某参数值的语法为:
request.getParameter("param1");
也可以通过request对象的getParameterNames()方法得到客户端传递过来的所有参数名:Enumeration params=request.getParameterNames();
<HTML>
<BODY>
<FORM ACTION="5_15.jsp" METHOD="POST">
<P>姓名: <INPUT TYPE="TEXT" SIZE="20" NAME="ID" ></P>
<P>密码: <INPUT TYPE="PASSWORD" SIZE="20" NAME="PWD"></P>
<P><INPUT TYPE="SUBMIT VALUE="提交""></P>
</FORM>
</BODY>
</HTML>
Form表单Action属性是文件5_15.jsp,意思是当用户提交时,用5_15.jsp来处理提交的数据。METHOD属性说明提交的方式,这里设置为Post方式。
<%@ page contentType="text/html;charset=GBK" %>
<%
request.setCharactreEncoding("GBK");
String strID = "";
String strPWD= "";
strID = request.getParameter("ID");
strPWD= request.getParameter("PWD");
%>
姓名: <%=strID%><br>
密码: <%=strPWD%>
ID和PWD分别是程序中文本框的名字。首先执行5_14.html文件,在文本框中输入用户名和密码,输入完毕,点击"提交"按钮。调用5_15.jsp来处理提交的内容。程序将文本框的内容读取出来,在输出到浏览器上。
改进程序:
程序名称: 5_16.html
<HTML>
<BODY>
<FORM ACTION="5_17.jsp" METHOD="POST">
<P> 姓名: <INPUT TYPE ="TEXT" SIZE="20" NAME="ID" ></P>
<P> 密码: <INPUT TYPE ="PASSWORD" SIZE="20" NAME="PWD"></P>
<P> <INPUT TYPE="SUBMIT" VALUE="提交"></P>
</FORM>
</BODY>
</HTML>
程序名称: 5_17.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%@ import="java.util.*" %>
<%
String current_param= "";
request.setCharacterEncoding("GBK");
Enumeration params = request.getParameterNames();
while(params.hasMoreElements())
{
current_param = (String)params.nextElement();
out.println("Name: "+current_param+"<br>");
out.println("Value: "+getParamenter(current_param)+"<br>");
}
%>
得到客户的信息
利用request对象可以获得客户提交的信息,比如JSP文件目录、客户端的地址及服务器的端口等。
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.uti.*" %>
<br>客户使用的协议是:
<%
String protocol = request.getProtocol();
out.println(protocol);
%>
<br>获取接受客户提交信息的页面:
<%
String path = request.getServletPath();
out.println(path);
%>
<br>客户提交信息的长度:
<%
int length = request.getContentLength();
out.println(length);
%>
<br>客户提交信息的方式:
<%
String method = request.getMethod();
out.println(method);
%>
<br>获取HTTP头文件中User-Agent值:
<%
String header1 = request.getHeader("User-Agent");
out.println(header1);
%>
<br>获取HTTP头文件中accept的值:
<%
String header2 = request.getHeader("accept");
out.println(header2);
%>
<br>获取HTTP头文件Host的值:
<%
String header3 = request.getHeader("Host");
out.println(header3);
%>
<br>获取HTTP头文件accept-encoding的值:
<%
String header4 = request.getHeader("accept-encoding");
out.println(header4);
%>
<br>获取客户的IP地址:
<%
String IP = request.getRemoteHostAddr();
out.printlnf(IP);
%>
<br>获取客户机的名称:
<%
String clientName = request.getRemoteHost();
out.println(clientName);
%>
<br>获取服务器的名称:
<%
String serverName = request.getServerName();
out.println(serverName);
%>
<br>获取服务器的端口号:
<%
int serverPort = request.getServerPort();
out.println(serverPort);
%>
联系客服