当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为 HTTP 信息头的一部分来传送的。我们便可以通过 http 协议获得更多的信息。
而 request 对象是 javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个页面时,JSP 引擎就会产生一个新的对象来代表这个请求。
下面这个例子使用 HttpServletRequest 类的 getHeaderNames() 方法来读取 HTTP 信息头。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hqh</title>
</head>
<body>
<h2>HTTP 头部请求实例 </h2>
<table width="100%" border="1" align="center"> <%-- table 表格 --%>
<tr bgcolor="#949494"> <%-- 定义背景色 --%>
<th>Header Name</th><th>Header Value(s)</th> <%-- 表格标题 --%>
</tr>
<%
Enumeration headerNames = request.getHeaderNames(); // 返回所有 HTTP 头的名称集合
while(headerNames.hasMoreElements()) { // 获取 Enumeration 对象后,遍历 Enumeration 对象
String paramName = (String)headerNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName); // 返回 paramName 指定的信息头,也就是对应的值
out.println("<td>" + paramValue + "</td></tr>\n");
}
%>
</table>
</body>
</html>
Enumeration getAttributeNames()(返回 request 对象的所有属性名称的集合),Enumeration getParameterNames()(返回请求中所有参数的集合)在尝试这两个对应的方法时没有输出有效的信息。可能是信息不足,才没有输出。
while(headerNames.hasMoreElements()) {String paramName = (String)headerNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getParameter(paramName);
out.println("<td>" + paramValue + "</td></tr>\n");
}
for(Enumeration e = request.getAttributeNames(); e.hasMoreElements();) {Object o = e.nextElement();
out.println((String) o + ":" + request.getAttribute((String) o) + "<br><hr>" );
}
同样的服务器在接收到客户端的信息后,会传输信息到客户端上。
response 对象是 javax.servlet.http.HttpServletResponse 类的一个实例。就像服务器会创建 request 对象一样,它也会创建一个客户端响应。
这是一个实时显示时间的例子
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hqh</title>
</head>
<body>
<h2> 自动刷新实例 </h2>
<%
response.setIntHeader("Refresh", 1); // 设置每隔 1 秒自动刷新,指定 int 类型的值到 name 标头,通知浏览器在给定的时间后刷新,时间以秒为单位。Calendar calendar = new GregorianCalendar(); // 获取当前时间
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
out.println("当前时间:" + CT + "\n");
%>
</body>
</html>
我们在浏览网页的时候,经常需要向服务器提交信息,并让后台程序处理。浏览器中使用 GET 和 POST 方法向服务器提交数据。
http://localhost:8080/tt2/NewFile.jsp?name=hqh&url=http://ww.hqh.com
tt2 为项目地址建立的 NewFile.jsp 文件的 JSP 程序用于处理客户端提交的表单数据。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hqh</title>
</head>
<body>
<h1> 使用 GET 方法读取数据 </h1>
<ul>
<li><p><b> 站点名:</b>
<%= request.getParameter("name")%>
</p></li>
<li><p><b> 网址:</b>
<%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>