zoukankan      html  css  js  c++  java
  • JavaWeb学习——JSP基础

    一、JSP概述

        JSP全称Java Server Pages,本质是servlet。

        运行在web容器中,接收客户端请求并产生响应。

       JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

       JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

    二、JSP组成

        一个完整的.jsp后缀文件包含以下组成成分:

        1. 静态内容

         静态数据在输入文件中的内容和输出给HTTP响应的内容完全一致,即客户端浏览网页源文件所见数据。这些数据(如html)定义了网页的基本骨架,即页面的外观和结构。

        2. JSP指令

         指令是JSP语法元素的第一种类型。它们指示JSP转换器如何翻译JSP页面为Servlet。

         语法格式:

    <%@...... %>  //注意'@'符号

         其中主要的指令类型有:page指令、include指令和taglib指令。

         ①page指令

         可以使用page指令来控制JSP转换器转换当前JSP页面的某些方面。

    <%@ page attribute1="value1", attribute2="value2", ... %>

         一些常用的属性列表:

         import:定义一个或多个本页面中将被导入和使用的Java类型。例如:import=“java.util.*”。可以通过在两个类型间加入“ , ”分隔符来导入多个类型。此外JSP默认导入如下包:java.lang、javax.servlet、javax.servlet.http、javax.servlet.jsp。

         errorPage:定义当出错时用来处理错误的页面。

         isErrorPage:表示本页是一个错误处理页面。

         contentType:定义本页面隐式对象response的内容类型,默认是text/html。

         pageEncoding:定义本页面的字符编码,默认是ISO-8859-1。

         language:定义本页面的脚本语言类型,默认是Java,这在JSP2.2中是唯一的合法值。

         ②include指令

         可以使用include指令将其他文件中的内容包含到当前JSP页面。被包含的文件就好像是该Jsp文件中的一部分,会被同时编译执行,一个页面中可以有多个include指令。

    <%@ include file="url" %>

         ③taglib指令

         允许用户使用标签库定义新的定义标签,在JSP中启用定制行为。这部分以后会在之后涉及。

        3. JSP脚本

         用于在JSP页面执行Java代码。

         语法:

    <%  Java代码  %>

         可以在其中定义变量,编写方法,但不能定义方法。多个脚本片段间可以互相访问。

        4. JSP声明

         用来定义能在JSP使用的变量和方法。

         语法:

    <%! Java代码  %>

         定义的变量和方法的作用域为当前页面和包含的页面。    

        5. JSP表达式

         每个表达式都会被JSP容器执行,并使用隐式对象out的打印方法输出结果。

    <%= Java表达式 %>

         JSP容器首先执行表达式,并将计算结果传递给out.print()。

        6.注释

         ①隐式注释,在客户端源码中不可见

    <%-- JSP注释 --%>
    <% //Java注释 %>

         ②显式注释,在客户端源码可见

    <!--  html注释  --> 

    三、JSP生命周期

        JSP生命周期就是从创建到销毁的整个过程,类似于servlet的生命周期,区别在于JSP生命周期还包括将JSP编译成servlet。

        以下是JSP生命周期中所走过的几个阶段:

    • 编译阶段:servlet容器编译Servlet源文件,生成Servlet类。
    • 初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法。
    • 执行阶段:调用与JSP对应的servlet实例的服务方法。
    • 销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例。

             

        JSP编译:当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

        编译的过程包括三个步骤:

    • 解析JSP文件。
    • 将JSP文件个转为servlet。
    • 编译servlet。

        JSP初始化:容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了。

        一般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。

        JSP执行:这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。

        _jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数。_jspService()方法在每个request中被调用一次并且负责产生与之相对       应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。

        JSP清理:JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

        jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

    四、JSP内置对象

        指不加声明和创建就可以在JSP脚本中使用的成员变量。

        JSP预先定义了9个这样的对象:

    名称 类型
    request javax.servlet.http.HttpServletRequest
    response javax.servlet.http.HttpServletResponse
    session  javax.servlet.http.HttpSession
    application javax.servlet.ServletContext
    out   javax.servlet.jsp.JspWriter
    page   java.lang.Object
    pageContext  javax.servlet.jsp.PageContext
    exception java.lang.Throwable
    config javax.servlet.ServletConfig

        

       


        1. request

         request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。

    1.   服务器在接收到客户端的请求之后,会创建request对象和response对象;
    2.   服务器会通过request对象把客户的数据,包括请求信息都封装到这个对象里面;
    3.   所以我们在控制层,servlet里面就是service方法里面通过request得到很多数据,并对信息进行相应的业务处理,最后反馈给用户结果;
    4.   这个结果我们是通过response来封装的,并带到用户面前;
    5.   当这整个过程结束之后,request和response对象的周期也就结束了,他们的生命范围就是用户的一次请求和得到的一次结果的反馈。

       所提供的方法可以将它分为四大类:

         (1)储存和取得属性方法;
    • void setAttribute(String name, Object value)      设定name属性的值为value
    • Enumeration getAttributeNamesInScope(int scope)   取得所有scope 范围的属性
    • Object getAttribute(String name)   取得name 属性的值
    • void removeAttribute(String name)  移除name 属性的值
         (2)取得请求参数的方法
    • String getParameter(String name)   取得name 的参数值
    • Enumeration getParameterNames()    取得所有的参数名称
    • String [] getParameterValues(String name)    取得所有name 的参数值
    • Map getParameterMap()              取得一个要求参数的Map
         (3)能够取得请求HTTP 标头的方法
    • String getHeader(String name)      取得name 的标头
    • Enumeration getHeaderNames()       取得所有的标头名称
    • Enumeration getHeaders(String name) 取得所有name 的标头
    • int getIntHeader(String name)      取得整数类型name 的标头
    • long getDateHeader(String name)    取得日期类型name 的标头
    • Cookie [] getCookies()             取得与请求有关的cookies
         (4)其他的方法
    • String getContextPath()            取得Context 路径(即站台名称)
    • String getMethod()                 取得HTTP 的方法(GET、POST)
    • String getProtocol()               取得使用的协议 (HTTP/1.1、HTTP/1.0 )
    • String getQueryString()            取得请求的参数字符串,不过,HTTP的方法必须为GET
    • String getRequestedSessionId()     取得用户端的Session ID
    • String getRequestURI()             取得请求的URL,但是不包括请求的参数字符串
    • String getRemoteAddr()             取得用户的IP 地址
    • String getRemoteHost()             取得用户的主机名称
    • int getRemotePort()                取得用户的主机端口
    • String getRemoteUser()             取得用户的名称
    • void getCharacterEncoding(String encoding)    设定编码格式,用来解决窗体传递中文的问题

        2. response

         response对象用于动态响应客户端的请示,控制发送给用户的信息,并将动态生成响应。response具有页面作用域,即访问一个页面时,该页面的response只对这次访问有效,其他页面的response对象对当前页面无效。

         方法说明:

    • String getCharacterEncoding() 返回响应用的是何种字符编码
    • ServletOutputStream getOutputStream() 返回响应的一个二进制输出流
    • PrintWriter getWriter() 返回可以向客户端输出字符的一个对象
    • void setContentLength(int len) 设置响应头长度
    • void setContentType(String type) 设置响应的contentType类型
    • void add(Cokkie cookie) 在客服端添加cookie 
    • sendRedirect(java.lang.String location) 重新定向客户端的请求,属于客户端行为,相当于二次请求,不会保存上次请求数据。

             request.getRequestDispatcher("request.jsp").forward(request, response); 定向转发

             转发是在服务器发挥作用,forward方法将提交信息在页面间传递,request不会丢失,地址栏不会变;

             重定向是客服端发挥作用,通过请求新的地址实现页面的转向,request会丢失,地址栏会变。
        3. out
         out对象实际上是PrintWriter对象的带缓冲的版本(在out对象内部使用PrintWriter对象来输出数据),可以通过page指令的buffer属性来调整缓冲区的大小,默认的缓冲区是8kb。
         out 对象能把结果输出到网页上。
       out主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream)。
         方法说明:
    • voidclear( )               清除输出缓冲区的内容
    • voidclearBuffer( )         清除输出缓冲区的内容
    • voidclose( )               关闭输出流,清除所有的内容
    • intgetBufferSize( )        取得目前缓冲区的大小(KB)
    • intgetRemaining( )         取得目前使用后还剩下的缓冲区大小(KB)
    • boolean isAutoFlush( )      回传true表示缓冲区满时会自动清除;false表示不会自动清除并且产生异常处理

     

        4. session
         在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
         方法说明:
    • long getCreationTime()             取得session产生的时间,单位是毫秒
    • String getId()                     取得session 的ID
    • long getLastAccessedTime()         取得用户最后通过这个session送出请求的时间
    • long getMaxInactiveInterval()      取得最大session不活动的时间,若超过这时间,session 将会失效
    • void invalidate()                  取消session 对象,并将对象存放的内容完全抛弃
    • boolean isNew()                    判断session 是否为"新"的会话
    • void setMaxInactiveInterval(int interval)   设定最大session不活动的时间,若超过这时间,session 将会失效
         同样session中也包含setAttribute等方法,作用域是一次完整的对话。
         session销毁的情况有三种:调用session.invalidate()、session超时、服务器重新启动。

        5. application
         主要是实现用户之间数据的共享,可存放全局变量。
         开始于服务器的启动,终止于服务器的关闭。
         在不同用户之间的连接中,可对application对象的同一属性进行操作。
         方法说明:
    • intgetMajorVersion()              取得Container主要的Servlet API版本
    • intgetMinorVersion()              取得Container次要的Servlet API 版本
    • String getServerInfo()             取得Container的名称和版本
    • String getMimeType(String file)    取得指定文件的MIME 类型
    • ServletContext getContext(String uripath)        取得指定Local URL的Application context
    • String getRealPath(String path)    取得本地端path的绝对路径
    • voidlog(String message)           将信息写入log文件中
    • voidlog(String message, Throwable throwable)    将stack trace 所产生的异常信息写入log文件中

          application对象也有setAttribute等方法。


     

        6. page
         page对象指向当前JSP页面本身,类似于类中的this指针,是java.lang.Object的实例,常用方法即Object方法。(很少使用)
        7. pageContext
         pageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象(容器),可以用来        保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
         通过pageContext获得其他对象:
    • getException            返回exception隐式对象
    • getPage                   返回page隐式对象
    • getRequest              返回request隐式对象
    • getResponse           返回response隐式对象
    • getServletConfig      返回config隐式对象
    • getServletContext    返回application隐式对象
    • getSession              返回session隐式对象
    • getOut                     返回out隐式对象

         PageContext对象提供取得属性的方法:

    • Object getAttribute(String name, intscope)    回传name 属性(范围为scope;类型为Object)
    • Enumeration getAttributeNamesInScope(intscope)   回传所有属性范围为scope 的属性名称,回传类型为Enumeration
    • intgetAttributesScope(String name)   回传属性名称为name 的属性范围
    • voidremoveAttribute(String name)    移除属性名称为name 的属性对象
    • voidremoveAttribute(String name, intscope)     移除属性名称为name,范围为scope 的属性对象
    • voidsetAttribute(String name, Object value, intscope)       指定属性对象的名称为name、值为value、范围为scope
    • Object findAttribute(String name)    寻找在所有范围中属性名称为name 的属性对象

     

        8. config

         config对象是一个servlet初始化时,JSP引擎向他传送信息所用,此信息包括servlet初始化所要用到的参数以及服务器的有关信息。


        9. exception
        exception对象一个异常对象,当一个页面运行过程中发生了异常,就产生这个对象。
        如果JSP页面需要应用这个对象,必须把isErrorPage设为TRUE。
     
     
     
    --- 每天积累一点点,吃水不忘挖井人 ---
     
  • 相关阅读:
    windows服务器下安装APC
    (经验)在CSS中定义超链接样式a:link、a:visited、a:hover、a:active的顺序
    网站访问计数器
    网站计数器代码(jsp版本)
    .NET2.0隐形的翅膀,正则表达式搜魂者
    PHP中array数组教程
    [Python] py2exe先知其然
    [Python] Ubuntu12.04LTS
    [Python] 中文
    [linux] is not in the sudoers file
  • 原文地址:https://www.cnblogs.com/cardiolith/p/9431229.html
Copyright © 2011-2022 走看看