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

你可能感兴趣的:(jsp,windows,mysql,Web,servlet)