JSP 9大对象详解

JSP 9大对象详解
学习JSP主要学习他的9大对象(request, response, pageContext, session, application, out, config, page, exception ),这些对象都是静态对象,不用定义就可以直接使用,把他们都了解清楚并会运用,就可以在简历上添上一个熟悉技能:JSP

Jsp内置对象 功能 主要方法
out 向客户端输出数据 print() println() flush() clear() isAutoFlush() getBufferSize() close() …………
request 向客户端请求数据
通过它取得来自客户端的parameters,cookies,header等信息 getAttributeNames() getCookies() getParameter() getParameterValues() setAttribute() getServletPath() …………..
response 封装了jsp产生的响应,然后被发送到客户端以响应客户的请求 addCookie() sendRedirect() setContentType()
flushBuffer() getBufferSize() getOutputStream()
sendError() containsHeader()……………
application 应用程序级对象(即应用程序上下文),多个用户之间共享信息
config 表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet
JSP的配置信息,作用域为页面 getServletContext() getServletName() getInitParameter() getInitParameterNames()……………
page 对应this关键字。JSP网页本身,Jsp实现类的实例,它是jsp本身,通过这个可以对它进行访问 flush()………
pagecontext 为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中己经命名对象的该问 网页的属性是在这里管理 forward() getAttribute() getException() getRequest() getResponse() getServletConfig()
getSession() getServletContext() setAttribute()
removeAttribute() findAttribute() ……………
session 用户级对象,用来保存每个用户的信息,以便跟踪每个用户的操作状态通过 <%@ page session ="false" %>该页面禁止会话 getAttribute() getId() getAttributeNames() getCreateTime() getMaxInactiveInterval()
invalidate() isNew()
exception 反映运行的异常只有在page指令中指定isErrorPage = "true"属性,才可以使用这个对象。 getMessage()…………

getLocalizedMessage( )
toString( )




他们分别继承于
①request javax.servlet.http.HttpServletRequest
②response javax.servlet.http.HttpServletResponse
③pageContext
④session javax.servlet.http.Httpsession
⑤out javax.servlet.jsp.JspWriter
⑥application javax.servlet.servletContext
⑦config javax.servlet.servletConfig
⑧page java.lang.Object
⑨exception java.lang.Throwable
由此看出他与servlet的关系。你以看看9大JSP隐式对象与Servlet之间的暧昧,看看他们的暧昧关系.


使用示例

①out
返回类型 方法 説明
void clear( )
void clearBuffer( )
void close( )
void flush( )
void newLine( )
void print(var)
void println(var)


更多方法请看API Reference


<%...@ page contentType="text/html;charset=Shift_JIS" autoFlush="true" %>
<html>
<head>
<title>バッファの制御(outオブジェクト)</title>
</head>
<body>
<%...
for(int i=0;i<=10;i++){
Thread.sleep(1000);
/* データベース処理など、処理時間の長い処理 */
out.print("…");
out.flush();
}
%>
</body>
</html>

②request

返回类型 方法 説明
Cookie[ ] getCookies( )
String getHeader(String)
Enumeration getHeaderNames( )
Enumeration getHeaders(String)
String getMethod( )
String getParameter(String)
String[ ] getParameterValues(String)
Enumeration getParameterNames( )
void setCharacterEncoding(String)


更多方法请看API Reference
sample.html

<table border="1" width="250">
<tr><th>キー名</th><th>値</th></tr>

<!-- 返回值为ENUMERATION的处理 -->
<%
request.setCharacterEncoding("Shift_JIS");
Enumeration objEnm=request.getParameterNames();
while(objEnm.hasMoreElements())...{
String strKey=(String)(objEnm.nextElement());
%>
<tr>
<td><%=strKey%></td>
<td><%=request.getParameter(strKey)%></td>
</tr>

<% } %>

<!-- 返回值为COOKIE的处理 -->
<%
Cookie[] cookies = request.getCookies();
for (int i = 0; i < cookies.length; i++) ...{
Cookie c = cookies[i];
String name = c.getName();
String value = c.getValue();
<%>
<tr>
<td><% out.print(name);%></td>
<td><% out.print(value);%></td>
</tr>
<% }%>

</table>

③response
response 与out 都是向客户端输出信息,他们的区别可以这样简单的区分,前者负责输出不可见的元素,后者负责可见的。
返回类型 方法 説明
void addCookie(Cookie)
void addHeader(String, String) ■
void addDateHeader(String, long) ■
void addIntHeader(String, int) ■
String encodeURL(String)
String encodeRedirectURL(String)
void sendError(int)
void sendRedirect(String)
void setHeader(String, String) ■负责持有string类型的Header
void setDateHeader(String, long) ■负责持有long类型的Header
void setIntHeader(String, int) ■负责持有int类型的Header
void setStatus(int)


<!--❶操作HEADER-->
<%...@ page contentType="text/html;charset=Shift_JIS" import="java.util.*" %>
<%...
Calendar objCal1=Calendar.getInstance();
Calendar objCal2=Calendar.getInstance();
objCal2.set(1970,0,1,0,0,0);
response.setDateHeader("Last-Modified",objCal1.getTime().getTime());
response.setDateHeader("Expires",objCal2.getTime().getTime());
//response.addIntHeader("Expires", -1); -1 指定客户端不缓存
response.setHeader("pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
%>
<!-- 主要的header有:
Accept-Language 対応言語
Connection 连接方法
Content-Type CONTENTSType(MIME)
Date Content 的発行日
If-Modified-Since 缓存の最終更新日
Referer 链接源
User-Agent 客户端の種類
WWW-Authenticate 認証ID/密码
-->

<!--❷操作COOKIE-->
<%...
Cookie objCok=new Cookie("email",request.getParameter("email"));
objCok.setMaxAge(60*60*24*180);
response.addCookie(objCok);
response.sendRedirect("request_cookie.jsp");
%>
<!--COOKIE本身也是一个对象
Cookie ckName=new Cookie(strName,strValue); //定义方法
COOKIE主要方法有
getComment()/setComment(str) Commentの取得/設定
getDomain()/setDomain(str) 対象Domainの取得/設定
getMaxAge()/setMaxAge(int) 有効期限の取得/設定(秒)
getName() COOKIE名の取得
getPath()/setPath(str) 対象PATHの取得/設定
getSecure()/setSecure(bln) SSL通信要否の取得/設定
getValue()/setValue(str) COOKIE値の取得/設定
getVersion()/setVersion(int) VERSION値の取得/設定
-->

④APPLICATION
返回类型 方法 説明
Object getAttribute(String)
Enumeration getAttributeNames( ) 返回所有可用的APPLICATION作用域内的属性名称
String getInitParameter(String)
Enumeration getInitParameterNames( ) 返回所有可用的APPLICATION作用域内的变量名称
String getRealPath(String) 返回作为参数的相対路径(/index.html)的絶対路径(http://localhost/contextPath/index.html)
String getServerInfo( ) 返回ServletContainer的名称和版本
void log(String) 把作为参数的信息写入ServletContainer指定的log文件
void removeAttribute(String)
void setAttribute(String, Object)


<!-- web.xml -->

<web-app>
... ...
<context-param>
<param-name>myName</param-name>
<param-value>wth</param-value>
</context-param>
<context-param>
<param-name>myPassword</param-name>
<param-value>%&#$%&</param-value>
</context-param>
... ...
</web-app>
<!-- 我们在网页中可以通过applition来取得web.xml文件中的数据 -->
<%...@ page contentType ="text/html;charset= windows-31j" %>
<html>
<body>
<%...
String id = application.getInitParameter("myName");
String pwd = application.getInitParameter("myPassword");
%>
我的名字是<%=di%>,密码是<%=pwd %>


<!-- 应为application属性,变量,是应用程序级别的 我们可以用它来做一个小小的访问记数器 -->
<%......
String strCnt = (String)(application.getAttribute("cnt"));
if(strCnt == null) {
strCnt = 1;
} else {
strCnt = Interget.toString(Integer.parseInt(strCnt));
}

application.setAttribute("cnt", strCnt);
%>
现在的访问数是<%=strCnt %>

</body>
</html>

⑤SESSION
返回类型 方法 説明
Object getAttribute(String)
Enumeration getAttributeNames( )
String getId( ) 返回分配给SESSION唯一的ID
int getMaxInactiveInterval( ) 取得指定SESSION保持的秒数
ServletContext getServletContext( ) 返回属性这个SESSION的ServletContext对象
void invalidate( ) 生成されているセッションIDを破棄します。
boolean isNew( ) 当客户端没有这个SESSION(第一次访问时,或者客户端cookie禁止使用时)返回TRUE
void removeAttribute(String)
void setAttribute(String, Object)
void setMaxInactiveInterval(int) 指定SESSION保持的时间,单位为秒数。


<%... page language = "java" contentType = "text/html;charset=windows-31j" pageEncoding="windows-31j" %>
<html>
<body>

<%...
if(session.isNew()){
session.setAttribute("id","guest_1");
out.println(session.getAttribute("id") + "Nice to meet you !");
} esle {
out.prinln("Hello!" + session.getAttribute("id") );
}
%>

</body>
</html>

⑥pageContext (管得最宽的一个家伙)
返回类型 方法 説明
void forward(String) 把request转送给参数指定的URL(可以是相对路径),实行forward方法之前不能有任何输出,否则会出错.
void include(String)
Exception getException( ) 返回exception对象
JspWriter getOut( ) 返回out对象
Object getPage( ) 返回page对象
ServletRequest getRequest( ) 返回request对象
ServletResponse getResponse( ) 返回response对象
ServletConfig getServletConfig( ) 返回ServletConfig
ServletContext getServletContext( ) 返回ServletContext
HttpSession getSession( ) 返回session对象
Object findAttribute(String) 搜索指定数据(page→request→session→application)
Object getAttribute(String, int) 第二参数指定SCOPE作用域范围PAGE_SCOPE /REQUEST_SCOPE/SESSION_SCOPE/APPLICATION_SCOPE
Enumeration getAttributeNamesInScope(int) 返回指定SCOPE内的所有参数
int getAttributesScope(String) 返回指定数据的SCOPE
void removeAttribute(String, int)
void setAttribute(String, Object, int)


<!-- pageContext1.jsp -->

<%...@ page contentType = "text/html;charset = windows-31j" %>
<html>
<body>
<%...
String str_in_requst= "str_from_request";
String str_in_session= "str_from_session";
pageContext.setAttribute("name", str_in_requst, pageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", str_in_session, pageContext.SESSION_SCOPE);
%>

<%= request.getAttribute("str_in_request") %>
<%= session.getAttribute("str_in_session") %>

<!-- 注意page,request,session.application各个作用域内的可以用同一个变量名
但是findAttribute(String), getAttributesScope(String)方法的搜索顺序是从小到大(page→request→session→application)
-->

</body>
</html>
⑦config
返回类型 方法 説明
Object getInitParameter(String)
Enumeration getInitParameterNames( )
ServletContext getServletContext( )
String getServletName( )


<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

<servlet>
<!-- ①指定<jsp-file>JSP程序对应的Servlet名为<servlet-name>
也可以为<jsp-class>指定名称,具体可以参考我另外一篇文章《JSP/Servlet 入门示例》
-->
<servlet-name>servletName</servlet-name>
<jsp-file>/sample.jsp</jsp-file>
<!-- ②在 <init-param>中初始化变量名及对应值,可以在这里数据库设置连接字符窜 -->
<init-param>
<param-name>name</param-name>
<param-value>I am WTH</param-value>
<param-name>driverName</param-name>
<param-value>org.gjt.mm.mysql.Driver</param-value>
<param-name>connectString</param-name>
<param-value>jdbc:mysql://localhost/dbNameXx?user=UserXx&password=
passwordXx&useUnicode=true&characterEncoding=Shift_JIS</param-value>
</init-param>
</servlet>
<!-- ③<servlet-mapping>指定servlet程序的访问路径,如下例,
当URL里含有"/sample.jsp"时,就可以访问对应的servlet程序servletName ,然后实行对应的sample.jsp
如果不明白,可以参考我另外一篇文章《JSP/Servlet 入门示例》
-->
<servlet-mapping>
<servlet-name>servletName</servlet-name>
<url-pattern>/sample.jsp</url-pattern>
</servlet-mapping>


</web-app>

sample.jsp

<%...@ page contentType="text/html; charset=windows-31j"
import java.sql.*
%>

<HTML>
<BODY>

<%...... out.println("name: ");%>
<%= config.getInitParameter("name"))%><!-- 注意与application.getInitParameter(String) 的区别-->

<%...
Class.forName(config.getInitParameter("driverName"));
Connection db=DriverManager.getConnection(
config.getInitParameter("connectString"));
/* 操作数据库 */
db.close();
%>

</BODY>
</HTML>

⑧page (略)


⑨exception
返回类型 方法 説明
String getMessage( ) 详细的error meesage
String getLocalizedMessage( ) 国际化对应message 和getMessage()返回的一样
String toString( ) 简单的error message


<!-- throwException.jsp -->
<%...-- 设定errorPage属性 --%>
<%...@ page contentType="text/html; charset=windows-31j"
errorPage="/exception.jsp"%>

<html>
<body>

<%...
//除0计算 生成错误;
int x = 1/0;
%>

</body>
</html>
<!-- exception.jsp -->
<%...-- 设置isErrorPage属性--%>
<%...@ page contentType="text/html; charset=windows-31j"
isErrorPage="true"%>

<html>
<body>

<%=exception.toString()%>

</body>
</html>


补充:
application request/responce session page 都有关于Attribute Parameters的方法,心想是不是谁的方法都可以啊。注意啦,其实他们处理的不是同一个对象,他们是不同作用域内的Attribute和Prameter。
另外application 和 config 都有getInitParameter()方法,都可以从web.xml中取数据,要注意他们的区别,他们处理的是不同的字段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值