Java Server Pages(JSP)——2. JSP注释与隐式对象

写在前面

这一部分主要整理一下JSP注释与隐式对象的相关知识,后者是重点,前者也就是加强一下记忆。

注释

JSP支持两种不同的注释格式:

  1. JSP注释。 该注释记录页面中做了什么。
  2. 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有如下隐式对象:

  1. request:类型为:javax.servlet.http.HttpServletRequest
  2. response:类型为: javax.servlet.http.HttpServletResponse
  3. out:类型为: javax.servlet.jsp.JspWriter
  4. session:类型为: javax.servlet.http.HttpSession
  5. application:类型为: javax.servlet.ServletContext
  6. config:类型为: javax.servlet.ServletConfigpageContext javax.servlet.jsp.PageContext
  7. page:类型为: javax.servlet.jsp.HttpJspPage
  8. exception:类型为: java.lang.Throwable
  9. 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个范围之一:

  1. 页面: 页面范围是最小范围, 这里存储的属性只在同一个JS页面可用。
  2. 请求: 请求范围是指当前的ServletRequest中。
  3. 会话: 会话范围指当前的HttpSession中。
  4. 应用程序: 应用程序范围指应用的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,显示效果如下:
这里写图片描述

这里面显示了很多东西,虽然好多我都不是特别明白有啥用,先放在这里。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值