JSP--动作元素、隐式元素、客户端请求、服务器请求

JSP 动作元素

jsp:include 在页面被请求的时候引入一个文件。
jsp:useBean 寻找或者实例化一个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把请求转到一个新的页面。
jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板

常见的属性

所有的动作要素都有两个属性:id属性和scope属性。

  • id属性:

    id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。

  • scope属性:

    该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。

1.include:

Include 指令: <%@ include file="filename" %>

Include 动作: <jsp:include page="page.jsp" flush="true" /> 

<%@include %>指令将会在JSP编译时插入一个包含文本或代码的文件,当你使用<%@ include %>指命时,这个包含的过程就当是静态的。静态的包含就是指这个被包含的文件将会被插入到JSP文件中去,这个包含的文件可以是JSP文件,HTML文件,文本文件。如果包含的是JSP文件,这个包含的JSP的文件中代码将会被执行。  

如果你仅仅只是用include 来包含一个静态文件。那么这个包含的文件所执行的结果将会插入到JSP文件中放<% @ include %>的地方。一旦包含文件被执行,那么主JSP文件的过程将会被恢复,继续执行下一行这个被包含文件可以是html文件,jsp文件,文本文件,或者只是一段Java代码,但是你得注意在这个包含文件中不能使用<html>,</html>,<body>,</body>标记,因为这将会影响在原JSP文件中同样的标记 ,这样做有时会导致错误.


例:将date.jsp静态的插入到main中

main.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The include Action Example</title>
</head>
<body>
<center>
<h2>The include action Example</h2>
<jsp:include page="data.jsp" flush="true"/>
</center>
</body>
</html>
</html>

date.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>
   Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>
</body>
</html>

2、useBean、setProperty、getProperty:

例:用jsp来调用类,并使用类里面的方法

TestBean.java

package Bean;

public class TestBean {
	   private String message = "No message specified";
	 
	   public String getMessage() {
	      return(message);
	   }
	   public void setMessage(String message) {
	      this.message = message;
	  }
}

main_bean.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<center>
<h2>Using JavaBeans in JSP</h2>
 
<jsp:useBean id="test" class="Bean.TestBean" />
 
<jsp:setProperty name="test"      property="message"     value="Hello JSP..." />
 
<p>Got message....</p>
 
<jsp:getProperty name="test" property="message" />
 
</center>
</body>
</html>

3、forward:跳到指定页面


<jsp:forward page="Relative URL" />

注:里面的路径可以动态计算。


4、<jsp:element> 、 <jsp:attribute>、 <jsp:body>:

    <jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。

例:

<%@page language="java" contentType="text/html"%>
<html xmlns="http://www.w3c.org/1999/xhtml"       xmlns:jsp="http://java.sun.com/JSP/Page">

<head><title>Generate XML Element</title></head>
<body>
<jsp:element name="xmlElement">
<jsp:attribute name="xmlElementAttr">
   Value for the attribute
</jsp:attribute>
<jsp:body>
   Body for XML element
</jsp:body>
</jsp:element>
</body>
</html>

jsp隐式对象

    JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。

JSP所支持的九大隐式对象:

对象 描述
request HttpServletRequest类的实例
response HttpServletResponse类的实例
out PrintWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象

request对象

request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

out对象

out对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。

最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。

JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。

下表列出了我们将会用来输出boolean,char,int,double,Srtring,object等类型数据的重要方法:

方法 描述
out.print(dataType dt) 输出Type类型的值
out.println(dataType dt) 输出Type类型的值然后换行
out.flush() 刷新输出流

session对象

session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。

session对象用来跟踪在各个客户端请求间的会话。


application对象

application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。

通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。


config对象

config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。

这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

以下是config对象的使用方法,不是很重要,所以不常用:

config.getServletName();


客户端请求

接下来将会介绍一些在JSP编程中常用的获取HTTP信息头的方法。详细内容请见下表:

序号 方法& 描述
1 Cookie[] getCookies() 返回客户端所有的Cookie的数组
2 Enumeration getAttributeNames() 返回request对象的所有属性名称的集合
3 Enumeration getHeaderNames() 返回所有HTTP头的名称集合
4 Enumeration getParameterNames() 返回请求中所有参数的集合
5 HttpSession getSession() 返回request对应的session对象,如果没有,则创建一个
6 HttpSession getSession(boolean create) 返回request对应的session对象,如果没有并且参数create为true,则返回一个新的session对象
7 Locale getLocale() 返回当前页的Locale对象,可以在response中设置
8 Object getAttribute(String name) 返回名称为name的属性值,如果不存在则返回null。
9 ServletInputStream getInputStream() 返回请求的输入流
10 String getAuthType() 返回认证方案的名称,用来保护servlet,比如 "BASIC" 或者 "SSL" 或 null 如果 JSP没设置保护措施
11 String getCharacterEncoding() 返回request的字符编码集名称
12 String getContentType() 返回request主体的MIME类型,若未知则返回null
13 String getContextPath() 返回request URI中指明的上下文路径
14 String getHeader(String name) 返回name指定的信息头
15 String getMethod() 返回此request中的HTTP方法,比如 GET,,POST,或PUT
16 String getParameter(String name) 返回此request中name指定的参数,若不存在则返回null
17 String getPathInfo() 返回任何额外的与此request URL相关的路径
18 String getProtocol() 返回此request所使用的协议名和版本
19 String getQueryString() 返回此 request URL包含的查询字符串
20 String getRemoteAddr() 返回客户端的IP地址
21 String getRemoteHost() 返回客户端的完整名称
22 String getRemoteUser() 返回客户端通过登录认证的用户,若用户未认证则返回null
23 String getRequestURI() 返回request的URI
24 String getRequestedSessionId() 返回request指定的session ID
25 String getServletPath() 返回所请求的servlet路径
26 String[] getParameterValues(String name) 返回指定名称的参数的所有值,若不存在则返回null
27 boolean isSecure() 返回request是否使用了加密通道,比如HTTPS
28 int getContentLength() 返回request主体所包含的字节数,若未知的返回-1
29 int getIntHeader(String name) 返回指定名称的request信息头的值
30 int getServerPort() 返回服务器端口号

例:获取http信息头

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>HTTP Header Request Example</title>
</head>
<body>
<center>
<h2>HTTP Header Request Example</h2>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>Header Name</th><th>Header Value(s)</th>
</tr>
<%   
	  Enumeration headerNames = request.getHeaderNames();   
	  while(headerNames.hasMoreElements()) {      
		  String paramName = (String)headerNames.nextElement();     
		  out.print("<tr><td>" + paramName + "</td>\n");
	      String paramValue = request.getHeader(paramName);
	      out.println("<td> " + paramValue + "</td></tr>\n");
  	  }
%>
</table>
</center>
</body>
</html>

服务器请求

状态行包含HTTP版本信息,比如HTTP/1.1,一个状态码,比如200,还有一个非常短的信息对应着状态码,比如OK。

下表摘要出了HTTP1.1响应头中最有用的部分,在网络编程中您将会经常见到它们:

响应头 描述
Allow 指定服务器支持的request方法(GET,POST等等)
Cache-Control 指定响应文档能够被安全缓存的情况。通常取值为 public,private 或no-cache 等等。 Public意味着文档可缓存,Private意味着文档只为单用户服务并且只能使用私有缓存。No-cache 意味着文档不被缓存。
Connection 命令浏览器是否要使用持久的HTTP连接。close值 命令浏览器不使用持久HTTP连接,而keep-alive 意味着使用持久化连接。
Content-Disposition 让浏览器要求用户将响应以给定的名称存储在磁盘中
Content-Encoding 指定传输时页面的编码规则
Content-Language 表述文档所使用的语言,比如en, en-us,,ru等等
Content-Length 表明响应的字节数。只有在浏览器使用持久化 (keep-alive) HTTP 连接时才有用
Content-Type 表明文档使用的MIME类型
Expires 指明啥时候过期并从缓存中移除
Last-Modified 指明文档最后修改时间。客户端可以 缓存文档并且在后续的请求中提供一个 If-Modified-Since请求头
Location 在300秒内,包含所有的有一个状态码的响应地址,浏览器会自动重连然后检索新文档
Refresh 指明浏览器每隔多久请求更新一次页面。
Retry-After 与503 (Service Unavailable)一起使用来告诉用户多久后请求将会得到响应
Set-Cookie 指明当前页面对应的cookie

HttpServletResponse类

response对象是javax.servlet.http.HttpServletResponse类的一个实例。就像服务器会创建request对象一样,它也会创建一个客户端响应。

response对象定义了处理创建HTTP信息头的接口。通过使用这个对象,开发者们可以添加新的cookie或时间戳,还有HTTP状态码等等。

下表列出了用来设置HTTP响应头的方法,这些方法由HttpServletResponse 类提供:

S.N. 方法 & 描述
1 String encodeRedirectURL(String url) 对sendRedirect()方法使用的URL进行编码
2 String encodeURL(String url) 将URL编码,回传包含Session ID的URL
3 boolean containsHeader(String name) 返回指定的响应头是否存在
4 boolean isCommitted() 返回响应是否已经提交到客户端
5 void addCookie(Cookie cookie) 添加指定的cookie至响应中
6 void addDateHeader(String name, long date) 添加指定名称的响应头和日期值
7 void addHeader(String name, String value) 添加指定名称的响应头和值
8 void addIntHeader(String name, int value) 添加指定名称的响应头和int值
9 void flushBuffer() 将任何缓存中的内容写入客户端
10 void reset() 清除任何缓存中的任何数据,包括状态码和各种响应头
11 void resetBuffer() 清除基本的缓存数据,不包括响应头和状态码
12 void sendError(int sc) 使用指定的状态码向客户端发送一个出错响应,然后清除缓存
13 void sendError(int sc, String msg) 使用指定的状态码和消息向客户端发送一个出错响应
14 void sendRedirect(String location) 使用指定的URL向客户端发送一个临时的间接响应
15 void setBufferSize(int size) 设置响应体的缓存区大小
16 void setCharacterEncoding(String charset) 指定响应的编码集(MIME字符集),例如UTF-8
17 void setContentLength(int len) 指定HTTP servlets中响应的内容的长度,此方法用来设置 HTTP Content-Length 信息头
18 void setContentType(String type) 设置响应的内容的类型,如果响应还未被提交的话
19 void setDateHeader(String name, long date) 使用指定名称和值设置响应头的名称和内容
20 void setHeader(String name, String value) 使用指定名称和值设置响应头的名称和内容
21 void setIntHeader(String name, int value) 使用指定名称和值设置响应头的名称和内容
22 void setLocale(Locale loc) 设置响应的语言环境,如果响应尚未被提交的话
23 void setStatus(int sc) 设置响应的状态码

猜你喜欢

转载自blog.csdn.net/sm16111/article/details/80259647
今日推荐