写在前面
这一部分主要整理一下JSP注释与隐式对象的相关知识,后者是重点,前者也就是加强一下记忆。
注释
JSP支持两种不同的注释格式:
- JSP注释。 该注释记录页面中做了什么。
- HTML/XHTML注释。 这些注释将会发送到浏览器上。
JSP注释以“<%–”开始, 以“–%>”结束。JSP注释不会被发送到浏览器端, 也不会被嵌套。
HTML/XHTML注释以"< !-- “开始,以”-- >"结束,一个HTML/XHTML注释不会被容器处理, 会原样发送给浏览器。
HTML/XHTML注释的一个用途是用来确定JSP页面本身。相当于一种标注作用。尤其是在运行有多个JSP片段的应用时, 会特别有用。 开发人员可以很容易地通过在浏览器中查看HTML源代码来找出是哪一个JSP页面或片段产生了相应的HTML片段。
<!-- this is /jsp/store/displayer/Products.jspf -->
隐式对象
Servlet容器会传递几个对象给它运行的Servlet。例如, 可以通过Servlet的service方法拿到HttpServletRequest和HttpServletResponse对象, 以及可以通过init方法访问到ServletConfig对象。 此外, 可以通过调用HttpServletRequest对象的getSession方法访问到HttpSession对象。
在JSP中, 可以通过使用隐式对象来访问上述对象。JSP有如下隐式对象:
- request:类型为:javax.servlet.http.HttpServletRequest
- response:类型为: javax.servlet.http.HttpServletResponse
- out:类型为: javax.servlet.jsp.JspWriter
- session:类型为: javax.servlet.http.HttpSession
- application:类型为: javax.servlet.ServletContext
- config:类型为: javax.servlet.ServletConfigpageContext javax.servlet.jsp.PageContext
- page:类型为: javax.servlet.jsp.HttpJspPage
- exception:类型为: java.lang.Throwable
- pageContext:类型为:javax.servlet.jsp.PagContext
1.request对象:该隐式对象代表Servlet/JSP容器传递给Servlet服务方法的HttpServlet Request对象。 可以将request理解为一个指向HttpServletRequest对象的引用变量。
下面代码与Servlet中一样,从request中获取 username 参数值。
<%
String userName = request.getParameter("userName");
%>
2.pageContext对象:它提供了有用的上下文信息, 并通过其自说明的方法来访问各种Servlet相关对象, 如getRequest、 getResponse、getServletContext、 getServletConfig和getSession。 当然, 这些方法在脚本中不是非常有用的, 因为可以更直接地通过隐式对象来访问request、 response、 session和application。
此外, PageContext中提供了另一组有趣的方法:用于获取和设置属性的方法, 即getAttribute方法和setAttribute方法。 属性值可被存储在4个范围之一:
- 页面: 页面范围是最小范围, 这里存储的属性只在同一个JS页面可用。
- 请求: 请求范围是指当前的ServletRequest中。
- 会话: 会话范围指当前的HttpSession中。
- 应用程序: 应用程序范围指应用的ServletContext中。
PageContext的setAttribute方法签名如下:
public abstract void setAttribute(java.lang.String name, java.lang.Object value, int scope)
其中, scope的取值范围为PageContext对象的最终静态int值: PAGE_SCOPE、 REQUEST_ SCOPE、SESSION_SCOPE和APPLICATION_SCOPE。分别对应前面四种属性值:页面、请求、会话、应用程序。
例如将一个属性保存到ServletRequest中:
<%
//product is a Java object
pageContext.setAttribute("product", product,PageContext.REQUEST_SCOPE);
//same function in Java:
//request.setAttribute("product", product);
%>
3.out对象:隐式对象out引用了一个javax.servlet.jsp.JspWriter对象, 这类似于你在调用HttpServlet Response的getWriter方法时得到java.io.PrintWriter。 可以通过调用它的print方法将消息发送到浏览器。 如下代码,在浏览器页面显示Welcome:
<%
out.println("Welcome");
%>
注意, 在默认情况下, JSP编译器会将JSP页面的内容类型设为text/html。 如果要使用不同的类型, 则需要通过调用response.setContentType()或者使用页面指令(详情请参考“指令”小节) 来设置内容类型。
隐式对象应用实例
下面将编写一个简单JSP来展示隐式对象的一些调用方法,代码如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.Enumeration"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>JSP Implicit Objects</title></head>
<body>
<b>Http headers:</b><br/>
<%
for (Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements(); ){
String header = e.nextElement();
out.println(header + ": " + request.getHeader(header) + "<br/>");
}
%>
<hr/>
<%
out.println("Buffer size: " + response.getBufferSize() + "<br/>");
out.println("Session id: " + session.getId() + "<br/>");
out.println("Servlet name: " + config.getServletName() + "<br/>");
out.println("Server info: " + application.getServerInfo());
%>
</body>
</html>
通过URL调用该JSP,显示效果如下:
这里面显示了很多东西,虽然好多我都不是特别明白有啥用,先放在这里。