JSP程序设计:内置对象

 1、概述:JSP内置对象是指不用声明就可以在JSP页面的脚本部分直接使用的组件,通过存取这些对象实现与JSP容器相互作用。
2、九种内置对象:request(客户端请求,包括由GET/POST请求传递的参数)、response(网页对客户端的响应)、out(发送响应的输出流)、session(与请求相关的会话)、application(servlet的运行环境)、config(servlet配置对象)、pagecontext(管理网页属性)、page(JSP页面本身)和exception(在有错的网页中未被捕获的异常)。一种机械的记忆方法:单词parscope (气象雷达)示波器正好是几个对象的首字母。
3、out对象:被封装成javax.servlet.JspWriter接口,专门为向客户端发送输出而设计的。out变量是从PageContext对象初始化而获得的,其作用域为page。out对象常用方法:print( )、println( )、newLine( )(输入换行符)、close( )、Flush( )(输出缓冲区里的数据)、clearBuffer( )(清除缓冲区里的数据,并写客户端)、Clear( )(清除缓冲区里的数据)、getBufferSize( )(获得缓冲区的大小)、getRemaining( )(获得缓冲区剩余空间的大小)、isAutoFlush( )(判断缓冲区是否自动刷新)。
4、request对象:与请求相关的javax.servlet.http.HttpServletRequest类的一个对象,该对象封装了用户提交的信息。
方法:
(1). Object getAttribute( String name ) ;
   返回由name指定的属性值,该属性不存在时返回null。
(2). Enumeration getAttributeNames() ;
   返回request对象的所有属性名称的集合。
(3). String getAuthType() ;
   返回用来保护servlet的认证方法的名称,未受保护时返回null。
(4). String getCharacterEncoding() ;
   返回请求中的字符编码方法,可以在response对象中设置。
(5). int getContentLength() ;
   返回请求的BODY的长度,不能确定长度时返回-1。可以在response中设置。
(6). String getContentType() ;
   返回在response中定义的内容类型。
(7). String getContentPath() ;
   返回请求的路径。
(8). Cookie[] getCookies() ;
   返回客户端所有的Cookie的数组。
(9). Enumeration getHeaderNames() ;
   返回所有HTTP头的名称的集合。
(10). Enumeration getHeaders( String name ) ;
    返回指定HTTP头的所有值的集合。
(11). String getHeader( String name ) ;
    返回指定名称的HTTP头的信息。
(12). long getDateHeader( String name ) ;
    返回指定名称的Data类型的HTTP头的信息。
(13). int getIntHeader( String name ) ;
    返回指定名称的Int类型的HTTP头的信息。
(14). ServletInputStream getInputStream() ;
    返回请求的输入流。
(15). Locale getLocale() ;
    返回当前页的Locale对象,可以在response中设定。
(16). Enumeration getLocales() ;
    返回请求中所有的Locale对象的集合。
(17). String getLocalName() ;
    获取响应请求的服务器端主机名。
(18). String getLocalAddr() ;
    获取响应请求的服务器端地址。
(19). int getLocalPort() ;
    获取响应请求的服务器端端口
(20). String getMethod() ;
    获取客户端向服务器端发送请求的方法(GET、POST)。
(21). String getParameter( String name ) ;
    获取客户端发送给服务器端的参数值。
(22). Map getParameterMap() ;
    该方法返回包含请求中所有参数的一个Map对象。
(23). Enumeration getParameterNames() ;
    返回请求中所有参数的集合。
(24). String[] getParameterValues( String name ) ;
    获得请求中指定参数的所有值。
(25). String getQueryString() ;
    返回get方法传递的参数字符串,该方法不分解出单独的参数。
(26). String getPathInfo() ;
    取出请求中处于ServletPath和QueryString之间的额外信息。
(27). String getPathTranslated() ;
    返回用getPathInfo()方法取得的路径信息的实际路径。
(28). String getProtocol() ;
    返回请求使用的协议。可以是HTTP1.1或者HTTP1.0。
(29). BufferedReader getReader() ;
    返回请求的输入流对应的Reader对象,该方法和getInputStream()方法在一个页面中只能调用一个。
(30). String getRemoteAddr() ;
    获取发出请求的客户端IP地址。
(31). String getRemoteHost() ;
    获取发出请求的客户端主机名
(32). String getRemoteUser() ;
    返回经过客户端验证的用户名,未经验证返回null。
(33). int getRemotePort() ;
    返回发出请求的客户端主机端口。
(34). String getRealPath( String path ) ;
    返回给定虚拟路径的物理路径。
(35). RequestDispatcher getRequestDispatcher( String path ) ;
    按给定的路径生成资源转向处理适配器对象。
(36). String getRequestedSessionId() ;
    返回请求的session的标识。
(37). String RequestURI() ;
    返回发出请求的客户端地址,但是不包括请求的参数字符串。
(38). StringBuffer getRequestURI() ;
    返回响应请求的服务器端地址
(39). String getScheme() ;
    获取协议名称,缺省值为HTTP协议。
(40). String getServerName() ;
    返回响应请求的服务器名称。
(41). String getServletPath() ;
    获取客户端所请求的脚本文件的文件路径。
(42). int getServerPort() ;
    获取响应请求的服务器端主机端口号。
(43). void removeAttribute( String name ) ;
    在属性列表中删除指定名称的属性。
(44). void setAttribute( String name, Object value ) ;
    在属性列表中添加/删除指定的属性。
(45). void setCharacterEncoding( String name ) ;
    设置请求的字符编码格式。
(46). HttpSession getSession() ;
    HttpSession getSession( boolean create ) ;
    获取session,如果create为true,在无session的情况下创建一个。
 (47). boolean isRequestedSessionIdFromCookie() ;
    检查请求的会话ID是否为通过Cookie传入。
(48). boolean isRequestedSessionIdFromURL() ;
    检查请求的会话ID是否为通过URL传入。
(49). boolean isRequestedSessionIdValid() ;
    检查请求的会话ID是否仍然有效。
(50). boolean isSecure() ;
    检查请求是否使用安全链接,如果HTTPS等。
(51). boolean isUserInRole( String role ) ;
    检查已经通过验证的用户是否在是role所指定的角色。
(52). Principal getUserPrincipal() ;
    返回包含用户登陆名的一个java.security.Principal对象。
成员:
String BASIC_AUTH = "BASIC"             -
String CLIENT_CERT_AUTH = "CLIENT_CERT" -
String DIGEST_AUTH = "DIGEST"           -
String FORM_AUTH = "FORM"
例子:
html文件:

< html >
< head >
< title >登录演示 </ title >
</ head >
< body >
< form  method ="POST"  action ="login.jsp" >
     
< p > 用户名: < input  type ="text"  name ="user"  size ="18" ></ p >
     
< p > 密码: < input  type ="text"  name ="pass"  size ="20" ></ p >
     
< p >< input  type ="submit"  value ="提交"  name ="ok" >
    
< input  type ="reset"   value ="重置"  name ="cancel" ></ p >
</ form >
</ body >
</ html >
jsp文件:
<% @ page contentType="text/html; charset=GB2312"  %>
< html >
< head >
< title > 处理GET方法传递数据 </ title >
</ head >
< body >
<%  
    
String strUser=new String(request.getParameter("user").getBytes("ISO-8859-1"));
    
String strPass=request.getParameter("pass");
    
if (strUser.equals("张三"&& strPass.equals("admin"))
        out.println(
"<h3>用户登录成功!</h3>");
    
else
        out.println(
"<h3>用户登录失败!</h3>");
 
%>
</ body >
</ html >
5、response是同应答相关的javax.servlet.http.HttpServletResponse类的一个对象, 主要将JSP容器处理后的结果传回到客户端,具有页面作用域。

方法:
1. void addCookie( Cookie cookie ) ;
   添加一个Cookie对象,保存客户端信息。
2. void addDateHeader( String name, long value ) ;
   添加一个日期类型的HTTP头信息,覆盖同名的HTTP头信息。
3. void addHeader( String name, String value ) ;
   添加一个HTTP头,覆盖同名的旧HTTP头。
4. void addIntHeader( String name, int value ) ;
   添加一个整型的HTTP头,覆盖同名的旧HTTP头。
5. boolean containsHeader( String name ) ;
   判断指定的HTTP头是否存在。
6. String encodeRedirectURL( String url ) ;
   对sendRedirect()方法使用的URL进行编码。
7. String encodeURL( String url ) ;
   将URL予以编码,回传包含session ID的URL。
  
8. void flushBuffer() ;
   强制把当前缓冲区的内容发送到客户端。
9. int getBufferSize() ;
   取得以kb为单位的缓冲区大小。
10. String getCharacterEncoding() ;
    获取响应的字符编码格式。
11. String getContentType() ;
    获取响应的类型。
12. Locale getLocale() ;
    获取响应的Locale对象。
13. ServletOutputStream getOutputStream() ;
    返回客户端的输出流对象。
14. PrintWriter getWriter() ;
    获取输出流对应的writer对象。
15. boolean isCommitted() ;
    判断服务器端是否已经将数据输出到客户端。
16. void reset() ;
    清空buffer中的所有内容。
17. void resetBuffer() ;
    情况buffer中所有的内容,但是保留HTTP头和状态信息。
18. void sendError( int xc, String msg ) ;
    void sendError( int xc ) ;
    发送错误,包括状态码和错误信息。
19. void sendRedirect( String locationg ) ;
    把响应发送到另外一个位置进行处理。
20. void setBufferSize( int size ) ;
    设置以kb为单位的缓冲区大小。
21. void setCharacterEncoding( String charset ) ;
    设置响应使用的字符编码格式。
22. void setContentLength( int length ) ;
    设置响应的BODY长度。
23. void setContentType( String type ) ;
    设置响应的类型。
24. void setDateHeader( String name, long value ) ;
    设置指定名称的Data类型的HTTP头的值。
25. void setHeader( String name, String value ) ;
    设置指定名称的HTTP头的值。
26. void setIntHeader( String name, int value ) ;
    设置指定名称的int类型的HTTP头的值。
27. void setStatus( int xc ) ;
    设置响应状态码,新值会覆盖当前值。
成员(HTTP状态码):
int SC_CONTINUE = 100                      int SC_SWITCHING_PROTOCOLS = 101
int SC_OK = 200                            int SC_NON_AUTHORITATIVE_INFORMATION

= 203
int SC_ACCEPTED = 202                      int SC_CREATED = 201
int SC_NO_CONTENT = 204                    int SC_RESET_CONTENT = 205
int SC_PARTIAL_CONTENT = 206               int SC_MULTIPLE_CHOICES = 300
int SC_MOVED_PERMANENTLY = 301             int SC_MOVED_TEMPORARILY = 302
int SC_FOUND = 302                         int SC_SEE_OTHER = 303
int SC_NOT_MODIFIED = 304                  int SC_USE_PROXY = 305
int SC_TEMPORARY_REDIRECT = 307            int SC_BAD_REQUEST = 400
int SC_UNAUTHORIZED = 401                  int SC_PAYMENT_REQUIRED = 402
int SC_FORBIDDEN = 403                     int SC_NOT_FOUND = 404
int SC_METHOD_NOT_ALLOWED = 405            int SC_NOT_ACCEPTABLE = 406
int SC_PROXY_AUTHENTICATION_REQUIRED = 407 int SC_REQUEST_TIMEOUT = 408
int SC_CONFLICT = 409                      int SC_GONE = 410
int SC_LENGTH_REQUIRED = 411               int SC_PRECONDITION_FAILED = 412
int SC_REQUEST_ENTITY_TOO_LARGE = 413      int SC_REQUEST_URI_TOO_LONG = 414
int SC_UNSUPPORTED_MEDIA_TYPE = 415        int

SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416
int SC_EXPECTATION_FAILED = 417            int SC_INTERNAL_SERVER_ERROR = 500
int SC_NOT_IMPLEMENTED = 501               int SC_BAD_GATEWAY = 502
int SC_SERVICE_UNAVAILABLE = 503           int SC_GATEWAY_TIMEOUT = 504
int SC_HTTP_VERSION_NOT_SUPPORTED = 505

例子1:动态响应contenType属性,关键代码(可实现把当前文件页面保存为word文档)如下:
< FORM  action =""  method ="get"  name =form >
      
< INPUT  TYPE ="submit"  value ="yes"  name ="submit" >
</ FORM >
<%  String str=request.getParameter("submit");
    
if(str==null
      {str
="";}
    
if(str.equals("yes"))
      {response.setContentType(
"application/msword;charset=GB2312");
      }
%>
例子2、response重定向,关键代码如下:
code one:
< form  action ="responsedemo2.jsp"  method ="GET" >
< select  name ="where" >
  
< option  value ="csai"  selected > 中国系统分析师
  
< option  value ="hnrpc" >  湖南铁道职业技术学院
  
< option  value ="sun" >  SUN公司
</ select >
< input  type ="submit"  value ="go" >
</ form >

code two:
<%
String address = request.getParameter("where");
if(address!=null)
{
    
if(address.equals("csai")) 
          response.sendRedirect(
"http://www.csai.cn");
    
else if(address.equals("hnrpc")) 
          response.sendRedirect(
"http://www.hnrpc.com");
          
else if(address.equals("sun")) 
              response.sendRedirect(
"http://www.sun.com");
}
%>
例子3:页面刷新:
<%
    response.setHeader(
"refresh","2");           //设置每2秒刷新一次刷新
    out.println(
new java.util.Date().toLocaleString());     //获得当前时间
%>
6、session是与请求相关的javax.servlet.http.HttpSession对象, 表示目前个别用户的会话状态,用来识别每个用户。session对象是JSP中一个很重要的内部对象,我们使用它来保存某个特定客户端(访问者)一次访问的一些特定信息。在JSP网络编程中,有多种方法可以保存客户信息,但是最常用、最实用的还是session对象。
        session对象的Id是指当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个字符类型的Id号,JSP引擎同时将这个Id号送到客户端,存放在cookie中,这样session对象和客户之间就建立了一一对应关系。当客户再访问连接服务器的其他页面时,不再分配给客户新的session,直到客户关闭浏览器后,服务器端将该客户的session对象取消,服务器与该客户的会话对应关系消失。当客户重新打开时,session会重新创建。
方法:
1. Object getAttribute( String name ) ;
   获取与指定名字相关联的session属性值。
2. Enumeration getAttributeNames() ;
   取得session内所有属性的集合。
3. long getCreationTime() ;
   返回session的创建时间,最小单位千分之一秒。
4. String getId() ;
   取得session标识。
5. long getLastAccessedTime() ;
   返回与当前session相关的客户端最后一次访问的时间,由1970-01-01算起,单位毫秒。
6. int getMaxInactiveInterval( int interval ) ;
   返回总时间,以秒为单位,表示session的有效时间(session不活动时间)。-1为永不过期。
7. ServletContext getServletContext() ;
   返回一个该JSP页面对应的ServletContext对象实例。
8. HttpSessionContext getSessionContext() ;
  
9. Object getValue( String name ) ;
   取得指定名称的session变量值,不推荐使用。
10. String[] getValueNames() ;
    取得所有session变量的名称的集合,不推荐使用。
11. void invalidate() ;
    销毁这个session对象。
12. boolean isNew() ;
    判断一个session是否由服务器产生,但是客户端并没有使用。
13. void pubValue( String name, Object value ) ;
    添加一个session变量,不推荐使用。
14. void removeValue( String name ) ;
    移除一个session变量的值,不推荐使用。
15. void setAttribute( String name, String value ) ;
    设置指定名称的session属性值。
16. void setMaxInactiveInterval( int interval ) ;
    设置session的有效期。
17. void removeAttribute( String name ) ;
    移除指定名称的session属性。
例子1:制作站点计数器,关键代码如下:
<% int number=0;   
  synchronized void countpeople()
    { 
            number
++;
      }
  
%>
  
<%
  
if(session.isNew())
    {
      countpeople();
      
String str=String.valueOf(number);
      session.setAttribute(
"count",str);
    }
  
%>
< p > 您是第 <% = ( String )session.getAttribute( " count " ) %> 个访问本站的人。
例子2:记录表单信息,代码如下:
code one:
< form  method ="POST"  action ="login1.jsp" >
     
< p > 用户名: < input  type ="text"  name ="user"  size ="18" ></ p >
     
< p > 密码: < input  type ="text"  name ="pass"  size ="20" ></ p >
     
< p >< input  type ="submit"  value ="提交"  name ="ok" >
    
< input  type ="reset"   value ="重置"  name ="cancel" ></ p >
</ form >

code two(login1.jsp的关键代码):
<%  
    
if (request.getParameter("user")!=null && request.getParameter("pass")!=null)
    {
        
String strName=request.getParameter("user");
        
String strPass=request.getParameter("pass");
        
if (strName.equals("liuzc"&& strPass.equals("liuzc"))
        {
            session.setAttribute(
"login","OK");
            response.sendRedirect(
"welcome.jsp");
        }
        
else
        {
            out.println(
"<h2>登录错误,请输入正确的用户名和密码</h2>");
        }
    }
 
%>

code three(welcome.jsp的关键代码):
<%  
    
String strLogin=(String)session.getAttribute("login");
    
if (strLogin!=null && strLogin.equals("OK"))
    {
        out.println(
"<h2>欢迎进入我们的网站!</h2>");
    }
    
else
    {
        out.println(
"<h2>请先登录,谢谢!</h2>");
        out.println(
"<h2>5秒钟后,自动跳转到登录页面!</h2>");
        response.setHeader(
"Refresh","5;URL=login1.htm");
    }
 
%>
7、application对象提供了对对象的访问,它用于多个程序或者多个用户之间共享数据。对于一个容器而言,每个用户都共用一个application对象,服务器关闭,该对象消失。application主要功用在于取得或更改Servlet的设定。
方法:
1. Object getAttribute( String name ) ;
   返回由name指定的application属性。
2. Enumeration getAttributes() ;
   返回所有的application属性。
3. ServletContext getContext( String uripath ) ;
   取得当前应用的ServletContext对象。
4. String getInitParameter( String name ) ;
   返回由name指定的application属性的初始值。
5. Enumeration getInitParameters() ;
   返回所有的application属性的初始值的集合。
6. int getMajorVersion() ;
   返回servlet容器支持的Servlet API的版本号。
7. String getMimeType( String file ) ;
   返回指定文件的类型,未知类型返回null。一般为"text/html"和"image/gif"。
8. int getMinorVersion() ;
   返回servlet容器支持的Servlet API的副版本号。
9. String getRealPath( String path ) ;
   返回给定虚拟路径所对应物理路径。
10. RequestDispatcher getNamedDispatcher( String name ) ;
    为指定名字的Servlet对象返回一个RequestDispatcher对象的实例。
11. RequestDispatcher getRequestDispatcher( String path ) ;
    返回一个RequestDispatcher对象的实例。
12. URL getResource( String path ) ;
    返回指定的资源路径对应的一个URL对象实例,参数要以"/"开头。
13. InputStream getResourceAsStream( String path ) ;
    返回一个由path指定位置的资源的InputStream对象实例。
14. Set getResourcePaths( String path ) ;
    返回存储在web-app中所有资源路径的集合。
15. String getServerInfo() ;
    取得应用服务器版本信息。
16. Servlet getServlet( String name ) ;
    在ServletContext中检索指定名称的servlet。
17. Enumeration getServlets() ;
    返回ServletContext中所有servlet的集合。
18. String getServletContextName() ;
    返回本web应用的名称。
19. Enumeration getServletContextNames() ;
    返回ServletContext中所有servlet的名称集合。
20. void log( Exception ex, String msg ) ;
    void log( String msg, Throwable t ) ;
    void log( String msg ) ;
    把指定的信息写入servlet log文件。
21. void removeAttribute( String name ) ;
    移除指定名称的application属性。
22. void setAttribute( String name, Object value ) ;
    设定指定的application属性的值。
例子1:使用application对象读写属性值:
applicationdemo1.jsp的关键代码:
<%     
    application.setAttribute(
"user","liuzc");      
    application.setAttribute(
"pass","liuzc518");
%>

applicationdemo2.jsp的关键代码:
<%
    
String Name = (String) application.getAttribute("user");
    
String Password = (String) application.getAttribute("pass");
    out.println(
"user = "+Name);
    out.println(
"pass = "+ Password);
%>
例子2:制作站点计数器,关键代码如下:
<%
    
String strNum = (String)application.getAttribute("num");
    
int num = 0;
    
//检查是否Num变量是否可取得
    
if(strNum != null
        num 
= Integer.parseInt(strNum) + 1//将取得的值增加1
    application.setAttribute(
"num"String.valueOf(num)); //起始Num变量值
%>
访问次数为:
< font  color  = red > <% =  num  %> </ font >< br >

8、config对象提供了对每一个给定的服务器小程序及JSP页面的javax.servlet.ServletConfig对象的访问,config对象用来存放Servlet初始的数据结构。
方法:
1. String getInitParameter( String name ) ;
   返回名称为name的促使参数的值。
2. Enumeration getInitParameters() ;
   返回这个JSP所有的促使参数的名称集合。
3. ServletContext getContext() ;
   返回执行者的servlet上下文。
4. String getServletName() ;
   返回servlet的名称。

9、page对象是可以从JSP脚本小程序和表达式中获得的一个内置对象,它是java.lang.Object类的一个实例 。在脚本语言为java时,page对象只是this引用的一个代名词。
        page对象代表JSP对象本身,或者说代表编译后的servlet对象,可以用( (javax.servlet.jsp.HttpJspPage)page )来取用它的方法和属性。
10、pageContext对象提供了对JSP页面内所在的对象及名字空间的访问。可以访问本页面所在的session,也可以访问本页面所在的application的属性值,它是页面中所有功能的集大成者。
pageContext - javax.servlet.jsp.PageContext
   pageContext对象存储本JSP页面相关信息,如属性、内建对象等。
方法:
1. void setAttribute( String name, Object value, int scope ) ;
   void setAttribute( String name, Object value ) ;
   在指定的共享范围内设置属性。
2. Object getAttribute( String name, int scope ) ;
   Object getAttribute( String name ) ;
   取得指定共享范围内以name为名字的属性值。
3. Object findAttribute( String name ) ;
   按页面、请求、会话和应用程序共享范围搜索已命名的属性。
4. void removeAttribute( String name, int scope ) ;
   void removeAttribute( String name ) ;
   移除指定名称和共享范围的属性。
5. void forward( String url ) ;
   将页面导航到指定的URL。
6. Enumeration getAttributeNamesScope( int scope ) ;
   取得指定共享范围内的所有属性名称的集合。
7. int getAttributeScope( String name ) ;
   取得指定属性的共享范围。
8. ErrorData getErrorDate() ;
   取得页面的errorData对象。
9. Exception getException() ;
   取得页面的exception对象。
10. ExpressionEvaluator getExpressionEvaluator() ;
    取得页面的expressionEvaluator对象。
11. JspWriter getOut() ;
    取得页面的out对象。
12. Object getPage() ;
    取得页面的page对象。
13. ServletRequest getRequest() ;
    取得页面的request对象。
14. ServletResponse getResponse() ;
    取得页面的response对象。
15. ServletConfig getConfig() ;
    取得页面的config对象。
16. ServletContext getServletContext() ;
    取得页面的servletContext对象。
17. HttpSession getSession() ;
    取得页面的session对象。
18. VariableResolver getVariableResolver() ;
    取得页面的variableResolver对象。
19. void include( String url, boolean flush ) ;
    void include( String url ) ;
    包含其他的资源,并指定是否自动刷新。
20. void release() ;
    重置pageContext内部状态,释放所有内部引用。
21. void initialize( Servlet servlet, ServletRequest request, ServletResponse response,
                     String errorPageURL, boolean needSession, int bufferSize, boolean autoFlush ) ;
    初始化未经初始化的pageContext对象。
22. BodyContext pushBody() ;
    BodyContext pushBody( Writer writer ) ;
    保存当前的out对象,并更新pageContext中page范围内的out对象。
23. JspWrite popBody() ;
    取出由pushBody()方法保存的out对象。
24. void handlePageException( Exception e ) ;
    void handlePageException( Thrwoable t ) ;
   
成员:
int PAGE_SCOPE = 1        - 页面共享范围
int REQUEST_SCOPE = 2     - 请求共享范围
int SESSION_SCOPE = 3     - 会话共享范围
int APPLICATION_SCOPE = 4 - 应用程序共享范围
String PAGE = "javax.servlet.jsp.jspPage"
String PAGECONTEXT = "javax.servlet.jsp.jspPageContext"
String REQUEST = "javax.servlet.jsp.jspRequest"
String RESPONSE = "javax.servlet.jsp.jspResponse"
String CONFIG = "javax.servlet.jsp.jspConfig"
String SESSION = "javax.servlet.jsp.jspSession"
String OUT = "javax.servlet.jsp.jspOut"
String APPLICATION = "javax.servlet.jsp.jspApplication"
String EXCEPTION = "javax.servlet.jsp.jspException"
11、exception 对象

exception - java.lang.Throwable
   错误对象,只有在JSP页面的page指令中指定isErrorPage="true"后,才可以在本页面使用exception对象。
方法:
1. Throwable fillInStackTrace() ;
   将当前stack信息记录到exception对象中。
2. String getLocalizedMessage() ;
   取得本地语系的错误提示信息。
3. String getMessage()
   取得错误提示信息。
4. StackTrackElement[] getStackTrace() ;
   返回对象中记录的call stack track信息。
5. Throwable initCause( Throwable cause ) ;
   将另外一个异常对象嵌套进当前异常对象中。
  
6. Throwable getCause() ;
   取出嵌套在当前异常对象中的异常。
7. void printStackTrace() ;
   void printStackTrace( printStream s ) ;
   void printStackTrace( printWriter s ) ;
   打印出Throwable及其call stack trace信息。
8. void setStackTrace( StackTraceElement[] stackTrace )
   设置对象的call stack trace信息。
< --MakeError .jsp(产生错误的页面)-- >
<% @ page contentType="text/html; charset=GBK"  %>
<% @page isErrorPage="true"  %>
<% @page import="java.io.PrintWriter" %>
< html >
< head >
< title >
错误处理页面
</ title >
</ head >
< body  bgcolor ="#ffffff" >
< h1 >
程序运行发生了如下错误:
</ h1 >
< font  color ="red" >
  错误原因是:
<% = exception.getMessage() %>
</ font >
< br >
< font  color ="red" >
  错误跟踪:
<% exception.printStackTrace(new PrintWriter(out)); %>
</ font >
</ body >
</ html >

< --ErrorPage .jsp(处理错误的页面)-- >
<% @ page contentType="text/html; charset=GBK"  %>
<% @page isErrorPage="true"  %>
<% @page import="java.io.PrintWriter" %>
< html >
< head >
< title >
错误处理页面
</ title >
</ head >
< body  bgcolor ="#ffffff" >
< h1 >
程序运行发生了如下错误:
</ h1 >
< font  color ="red" >
  错误原因是:
<% = exception.getMessage() %>
</ font >
< br >
< font  color ="red" >
  错误跟踪:
<% exception.printStackTrace(new PrintWriter(out)); %>
</ font >
</ body >
</ html >

 12、对象作用范围:
    (1)应用作用域(application):即全局作用域。整个应用程序,就是在部署文件中的同一个webApp共享,生命周期:应用程序启动到停止。
    (2)会话作用域(session):当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
    (3)请求作用域(request):就是客户端的一次请求(可以包含多个页面)。
    (4)一个JSP页面。
13、cookie对象

(1)概述:cookie是Web服务器存在用户硬盘上的一段文本。cookie允许一个Web站点在用户的计算机上保存信息并且随后再取回它。当用户再次访问这个站点时,服务端将要求浏览器查找并返回先前发送的cookie信息,来识别这个用户。 cookie的目的就是为用户带来方便,为网站带来增值.虽然有着许多误传,事实上cookie并不会造成严重的安全威胁.cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统.另外,由于浏览器一般只允许存放300个cookie,每个站点最多存放20个cookie,每个cookie的大小限制为4 kb,因此cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段.
(2)好处:
     §能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径。
     §能告诉在线广告商广告被单击的次数,从而可以精确地投入广告。
     §有郊期未到时,能使用户不需要重复输入密码和用户名就进入曾经浏览过的一些站点。
     §能帮助站点统计用户个人资料以实现各种个性化服务。
(3)cookie基本操作:以“关键字=值(key=value)”的格式来保存记录的,基本操作包括创建、传送、读取。
     §创建cookie对象:

Cookie c=new Cookie("username","wzz");

     §传送cookie对象:

response.addCookie(c);

     §读取cookie对象:

Cookie[] c=requset.getCookies();
if(c!=null)
for(int I=0;I
< c .length;I++)
if("username".equals(c[I].getName()))
out.println(c[I].getValue());

     §设置cooki对象的有效时间:

c.setMaxAge(3600);
<% --设置的为cookie将要存在的最大时间-- %>
<% --如果设置为0,表示删除此cookie-- %>
<% --如果设置为负数,表示浏览器关闭时删除此cookie-- %>

(4)cookie的应用:测定多少人访问过、测定访问者新老用户的人数、测定一个用户多久访问一次网站,网站使用数据库结合cookie达到上述目标。
(5)使用cookie对象制作站点计数器的演示程序:

<% @ page contentType="text/html; charset=GB2312"   import="java.util.Date" %>
< html >
< head >
< title > Cookie应用演示 </ title >
</ head >
< body >
<%  
    Cookie thisCookie 
= null;
     
boolean cookieFound = false;
    
// 从请求获取coolies
    Cookie[] cookies 
= request.getCookies();
    
if(cookies!=null)
    {
        
for(int i=0; i < cookies.length; i++
        {
            thisCookie 
= cookies[i];
            
//检查是否存在CookieCount数据
            
if (thisCookie.getName().equals("CookieCount")) 
            {
                cookieFound 
= true;
                break;
            }
        }
    }
    
//输出页面
    out.println(
"<center><h1>Cookie 计数器</h1></center>");
     
// 显示客户端详细信息,是否存在计数器cookie
    
if (cookieFound) 
    {
        
// 获取cookie的值,并加1
        
int cookieCount = Integer.parseInt(thisCookie.getValue());
        cookieCount
++;
        out.println(
"<font color=blue size=+1>");
        out.println(
"<p>这是1分钟内第<B> " +cookieCount +" </B>次访问本页\n");
        
// 设置cookie的新值, 加到相应对象中
        thisCookie.setValue(
String.valueOf(cookieCount));
        thisCookie.setMaxAge(
60*1);
        response.addCookie(thisCookie);
    } 
    
if (cookieFound == false
    {
        out.println(
"<font color=blue size=+1>");
        out.println(
"<p>你在近1分种没有访问过此页,现在是第1次访问此页");
        
// 创建新的Cookie并设置它的存活期
        thisCookie 
= new Cookie("CookieCount""1");
        thisCookie.setMaxAge(
60*1);
        
// 在response对象中加入cookie
        response.addCookie(thisCookie);
    }    
 
%>
</ BODY >
</ HTML >

 Cookie对象方法:

方法

摘要说明

 java.lang.Object clone()

返回一个cookie的副本。

 java.lang.String getComment()

提取cookie的注释。

 java.lang.String getDomain()

返回cookie的域。

 int getMaxAge()

返回以秒为单位的cookie的生存时间。

 java.lang.String getName()

返回cookie的名。

 java.lang.String getPath()

取得cookie的返回路径。

 boolean getSecure()

如果cookie必须结束一个安全连接则返回true

 java.lang.String getValue()

返回cookie的值。

 int getVersion()

返回cookie的协议版本。

 void setComment(java.lang.String comment)

设置cookie注释。

 void setDomain(java.lang.String domain)

设置cookie域。

 void setMaxAge(int maxAge)

设置cookie的生存时间。

 void setPath(java.lang.String path)

设置cookie返回到服务器上的路径。

 void setSecure(boolean secure)

通知浏览器是否使用安全协议发送cookie

 void setValue(java.lang.String value)

设置cookie值。

 void setVersion(int version)

设置cookie的版本,默认值为0

 java.lang.String toString()

Cookie对象转换成一个字符串。

 

你可能感兴趣的:(JSP程序设计:内置对象)