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中取数据,要注意他们的区别,他们处理的是不同的字段。

 参考文章:
http://www.javaroad.jp/servletjsp/index.html  Servlet・JSPの文法
http://www.javaroad.jp/opensource/index.html  Tomcat、Eclipse、StrutsなどJava関連

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值