现在的位置: 首页 > 综合 > 正文

JSP复习

2013年08月09日 ⁄ 综合 ⁄ 共 11598字 ⁄ 字号 评论关闭

1.
      JSP 注释的格式如下:
            <%--   在注释内容   --%>
      HTML 注释的格式是
            <!--   注释内容   -->
2.
      JSP 声明的格式如下:
     <%!  声明部分  %>
3.
      JSP 提供了一种输出表达式值的简单方法,输出表达式值的格式如下:
            <%=   表达式   %>
4.
      JSP 脚本
    可通过Java 代码镶嵌在HTML 代码中,即使用JSP 脚本。
 <table>
     <%
      for(int i=0;i<10;i++)
      {
     %>
     <tr>
      <td>循环</td>
      <td><%=i %></td>
     </tr>
     <%
      }
     %>
    </table>
5.
 JSP 的编译指令是通知JSP 引擎的消息,它不直接生成输出。编译指令都有默认值,因此开发人员无须为每个指令设置值。
 常见的编译指令有三个。
  page: 该指令是针对当前页面的指令。
  include: 用于指定如何包含另一个页面。
  tablib: 用于定义和访问自定义标签。
 编译指令的格式如下:
  <%@ 编译指令名属性名="属性值" %>

 1>   page 指令,通常位于JSP 页面的顶端,对同一个页面可以有多个page 指令。
  page指令的语法格式如下:
       <
%@page
   [language="Java"]
   [extends="package.class"]
   [import= "package. class|package. *,…"]
   [session=true|false"]
   [buffer="none|8kb|size kb"]
   [autoFlush="true|false"]
   [isThread8afe="true|false"]
   [info="text"]
   [errorPage="relativeURL"]
   [contentType=mimeType[;charset=characterSet]"|"text/html;charSet= ISO8859-1"]
   [isErrorPage=" true|false"]
       %>
   下面依次介绍page 的各个属性。
    language: 声明当前JSP 页面使用的脚本语言的种类,因为页面是JSP 页面,该属性的值通常都是java 。
    extends: 确定JSP 程序编译时所产生的Java 类,需要继承的父类,或者需要实现的接口的全限定类名。
    import: 用来导入包,下面几个包是默认自动导入的,不需要显式导入。默认导入的包有: java .lang.*;javax.servlet.*;javax.servlet.jsp.*;javax.servlet. http.*
    session: 设定这个JSP 页面是否需要HTIP session 。
    buffer: 指定输出缓冲区的大小。输出缓冲区的JSP 内部对象: out 用于缓存JSP页面对客户浏览器的输出,默认值为8kb,可以设置为none ,也可以设置为其他的值,单位为kb
    autoFlush: 当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true 时为正常输出:如果设置为false ,会在buffer 溢出时产生一个异常。
    info: 设置该JSP 程序的信息,也可以看做其说明,可以通过Servlet. getServletInfo()方法获取该值。如果在JSP 页面中,可直接调用getServletInfo()方法获取该值,因为JSP 页面的实质就是Servlet 。
    errorPage: 指定错误处理页面。如果本程序产生了异常或者错误,而该JSP 页面没有对应的处理代码,则会自动调用该指令所指定的JSP 页面。使用JSP 页面时,可以不处理异常,即使是checked 异常。
    isErroePage: 设置本JSP 页面是否为错误处理程序。如果该页面本身己是错误处理页面,则无须使用errorPage 属性。
    contentType: 用于设定生成网页的文件格式和编码方式,即MIME 类型和页面宇符集类型,默认的MIME 类型是textlhtml; 默认的字符集为ISO-8859-1 。

 2>   使用include 指令,可以将一个外部文件嵌入到当前JSP 文件中,同时解析这个页面中的JSP 语句(如果有的话)。这是个静态的include 语旬,不会检查所包含JSP 页面的变化。
  include 既可以包含静态的文本,也可以包含动态的JSP 页面。静态的编译指令include ,是将被包含的页面加入进来,生成一个完整的页面。
  include 编译指令的语法:
   <%@  include file="relativeURLSpec" %>
  如果被嵌入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include 语句。

6.
 JSP 动作指令主要有如下7 个。
  jsp:forward: 执行页面转向,将请求的处理转发到下一个页面。
  jsp:param: 用于传递参数,必须与其他支持参数曲标签一起使用。
  jsp:include: 用于动态引入一个JSP 页面。
  jsp:plugin: 用于下载JavaBean 或Applet 到客户端执行。
  jsp:useBean: 使用JavaBean 。
  jsp:setProperty: 修改JavaBean 实例的属性值。
  jsp:getProperty: 获取JavaBean 实例的属性值。
 

7.
 useBean 的语法格式如下:
  <jsp:useBean id="name" class="classname" scope="page|request|session|application" />
        id 属性是JavaBean 的实例名, class 属性确定JavaBean 的实现类。
        其中scope 属性用于确定JavaBean 实例的生存范围,该范围有以下四个值。
   page: 该JavaBean 实例仅在该页面有效。
   request: 该JavaBean 实例在本次请求有效。
   session: 该JavaBean 实例在本次session 内有效。
   application: 该JavaBean 实例在本应用内一直有效。
 setProperty 的语法格式如下:
  <jsp:setProperty name="BeanName" proterty="propertyName" value="value"/>
        其中name 属性确定需要设定JavaBean 的实例名; property 属性确定需要设置的属性名; value 属性则确定需要设置的属性值。
 getProperty 的语法格式如下:
  <jsp:setProperty name="BeanName" proterty="propertyName" />
        其中name'属性确定需要输出的JavaBean 的实例名; property 属性确定需要输出的属性名。

 //将p1放入request 的生存范围
 request. setAttribute ("p1" , p1) ;
 //将p1放入session 的生存范围
 session.setAttribute("p1" , p1); 
 //将p1放入applicatio口的生存范围
 application. setAttribute ("p1" , p1) ;

8.
 plugin 指令主要用于下载服务器端的JavaBean 或Applet 到客户端执行。由于程序在客户端执行,因此客户端必须安装虚拟机。
 plugin 的语法格式如下:
  <jsp:plugin
   type="Bean|applet"
   code="classFileName"
   codebase="classFileDiretoryName"
   [name="instanceName"]
   [archive="URLtoArchive"]
   [align= "bottom|top|middle|left|right"]
   [heigh="displayPixels"]
   [width="displayPixels"]
   [hspace="leftRightPixels"]
   [vspace="topBottomPiexels"]
   [jreversion="JREVersionNumber|1.2"]
   [nspluginurl="URLToPlugin"]
   [iepluginurl="URLToPlugin"]>
   [<jsp:parames>
    [jsp:param name="parameterName"value="parameterValue"I>]
   </jsp:params>]
   [<jsp:fallback>
    text message for user that can no see the plugin
   </jsp:fallback> ]
  </jsp:plugin>
  关于这些属性的说明如下。
   type: 指定被执行的Java 程序的类型。
   code: 指定被执行的文件名,该属性值必须以" .class" 扩展名结尾。
   codebase: 指定被执行文件所在的目录。
   name: 给该程序起一个名字用来标识该程序。
   archive: 指向一些要预先载入的将要使用到的类的路径。
   hspace,vspace: 显示左右,上下的留白。
   jreversion: 能正确运行该程序必需的JRE 版本,默认值是1.2
   nsplugin,ieplugin: Netscape Navigator, Internet Exploer 下载运行所需JRE 的地址。
   <jsp:fallback>指令:当不能正确显示该Applet 时,代替显示的提示信息。

9.
 param 指令用于设置参数值,这个指令本身不能单独使用,因为单独的Param 指令没有实际意义。
 pararn 指令可以与以下三个指令结合使用:
  jsp:include    当与include 指令结合使用时, pararn 指令用于将参数值传入被导入的页面
  jsp:forward    当与forward 指令结合使用时, pararn 指令用于将参数值传入被转向的页面
  jsp:plugin     当与plugin 指令结合使用时,则用于将参数传入页面中的JavaBean 实例或Applet 实例。 
 pararn 指令的语法格式如下:
  <jsp:param name="pararnName" value="paramValue"/>

10.
 JSP 的9 个内置对象
 1> application: javax.servlet. ServletContext 的实例,该实例代表JSP 所属的Web 应用本身,可用于JSP 页面,或者Servlet 之间交换信息。
  常用的方法有
   getAttribute(String attName) , setAttribute(String attName , String attValue) 和getInitParameter(String paramName)等。
 2> config: javax.servlet. ServletConfig 的实例,该实例代表该JSP 的配置信息。
  常用的方法有
   getInitParameter(String paramName) 及getInitParameternames() 等方法。
  事实上, JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在Servlet 中有效。
 3> exception: java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错误处理页面,即编译指令page 的isErrorPage 属性为true 时,该对象才可以使用。
  常用的方法有getMessage()和printStackTrace()等。
 4> out: javax.servlet.jsp.JspWriter 的实例,该实例代表JSP 页面的输出流,用于输出内容,形成HTML 页面。
 5> page: 代表该页面本身,通常没有太大用处。也就是Servlet 中的this ,其类型就是生成的Servlet 。
 6> pageContext: javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文,使用该对象可以访问页面中的共享数据。
   在设置属性时,如果没有指定属性存在的范围,则属性默认在page 范围内,如果指定了属性所在的范围,则属性可以被存放在application, session, request 等范围中。
  常用的方法有
   getServletContext()和getServletConfig()等。
 7> request: javax.servlet.http:HttpServletRequest 的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。
  常用的方法有
   getParameter(String paramName), getParameterValues(String paramName), setAttribute(String atttibuteName,Object attributeValue),
   getAttribute(String attributeName)和setCharacterEncoding(String env)等。
 8> response: javax.servlet.http.HttpServletResponse 的实例,代表服务器对客户端的响应。通常,也很少使用该对象直接响应,输出响应使用out 对象,而response 对象常用于重定向。重定向会丢失所有的请求参数及请求属性。
  常用的方法有
   sendRedirect(java.lang.String location)等。
 9> session: javax.servlet.http.HttpSession 的实例,该对象代表一次会话。从客户端浏览器与站点建立连接起,开始会话,直到关闭浏览器时结束会话。
  session 通常用于跟踪用户的会话信息,如判断用户是否登录系统,或者在购物车应用中,系统是否跟踪用户购买的商品等。       session 里的属性可以在多个页面的跳转之间共享。一旦关闭浏览器,即session 结束, session 里的属性将全部清空。
  常用的方法有:
   getAttribute(String attName)  返回一个session 属性的值, setAttribute(String attName, String attValue)  设置一个session 属性。
11.
 Servlet ,通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求。
 Servlet 是个特殊的Java 类,这个Java 类必须继承HttpServlet 。每个Servlet 可以响应客户端的请求。Servlet 提供不同的方法用于响应客户端请求。
  doGet: 用于响应客户端的get 请求。
  doPost: 用于响应客户端的post 请求。
  doPut: 用于响应客户端的put 请求。
  doDelete: 用于响应客户端的delete 请求。
 HttpServlet 还包含两个方法。
  init(ServletConfig config): 创建Servlet 实例时,调用的初始化方法。
  destroy(): 销毁Servlet 实例时,自动调用的资源回收方法。
   通常无须重写init()和destroy()两个方法,除非需要在初始化Servlet 时,完成某些资源初始化的方法,才考虑重写init 方法。如果重写了init(ServletConfig config)方法,则应在重写该方法的第一行调用super.init(config) 。该方法将调用HttpServlet 的init 方法。
   如果需要在销毁Servlet 之前,先完成某些资源的回收,比如关闭数据库连接等,才需要重写destroy 方法。

12.
 配置Servlet 需要配置两个部分。
  配置Servlet 的名字:对应web.xml 文件中的<servlet/>元素。
  配置Servlet 的URL: 对应web.xrnl 文件中的<servlet-mapping/>元素。
 FirstServlet 的配置如下:
  <!-- 配置Servlet 的名字 -->
  <servlet>
       <!--指定Servlet 的名字-->
       <servlet-name>firstServlet</servlet-name>
       <!-- 指定Servlet 的实现类-->
       <servlet-class>lee.FirstServlet</servlet-class>
  </servlet>
  <!--配置Servlet 的URL-->
  <servlet-mapping>
      <!--指定Servlet 的名字-->
      <servlet-name>firstServlet</servlet-name>
      <!--指定Servlet 映射的URL地址-->
      <url-pattern>/firstServlet</url-pattern>
  </servlet-rnapping>

13.
 Servlet 在容器中运行,其实例的创建及销毁等都不是由程序员决定的,而是由容器进行控制。
 Servlet 的创建有两个选择。
  客户端请求对应的Servlet 时,创建Servlet 实例大部分的Servlet 都是这种Servlet 。
  Web 应用启动时,立即创建Servlet 实例:即load-on-startup Servlet 。
 每个Servlet 的运行都遵循如下生命周期。
  (1)创建Servlet 实例。
  (2) Web 容器调用Servlet 的init 方法,对Servlet 进行初始化。
  (3) Servlet 初始化后,将一直存在于容器中,用于响应客户端请求。如果客户端有get 请求,容器调用Servlet 的doGet 方法处理并响应请求。对于不同的请求,有不同的处理方法,或者统一使用service 方法处理来响应用户请求。
  (4) Web 容器角色销毁Servlet 时,调用Servlet 的destroy 方法,通常在关闭Web容器之时销毁Servlet。
 怎么把servlet设置成load-on-startup servlet
 <servlet>
  <! -- Servlet--〉
  <servlet-name>timerServlet</servlet-name>
  <!-- Servlet 的实现类--〉
  <servlet-class>lee.TimerServlet</servlet-class>
  <!-- 配置应用启动时,创建Servlet 实例-->
  <load-on-startup>1</load-on-startup>
 </servlet>
14.
 实现自定义标签按如下步骤进行:
  (1)开发自定义标签处理类;
   自定义标签类都必须继承一个父类: javax.Servlet.jsp.tagext.TagSupport 。
   如果标签类包含属性,每个属性都有对应的getter()和setter()方法。
   重写doStartTag()或doEndTag()方法,这两个方法生成页面内容。
   如果需要在销毁标签之前完成资源回收,则重写re1ease()方法。
  (2)建立一个*.t1d 文件,每个*.t1d 文件对应一个标签库,每个标签库对应多个标签;
   标签库定义文件的根元素是taglib,它可以有多个tag 子元素,每个tag 子元素都对应一个标签。
   <taglib>
    <!-- 定义标签库版本 -->
    <tlib-version>1.0</tlib-version>
    <!-- 定义jsp版本 -->
    <jsp-version>1.2</jsp-version>
    <!-- 配置第一个标签 -->
    <tag>
     <!-- 配置标签名 -->
     <name>helloworld</name>
     <!-- 确定标签的处理类 -->
     <tag-class>tag.HelloWorldTag</tag-class>
     <!-- 确定标签的标签体,标签体为空 -->
     <body-content>empty</body-content>
    </tag>
   </taglib>
  (3)在web.xm1文件中增加自定义标签的定义;
   在web.xml 文件中定义标签库时使用taglib 元素,该元素包含两个子元素: taglib-uri和taglib-location,前者确定标签库的URI; 后者确定标签库定义文件的位置。
   <jsp-config>
    <taglib>
     <!-- 确定标签库的URI -->
     <taglib-uri>/tags/myTag.tld</taglib-uri>
     <!-- 确定标签库定义文件的位置 -->
     <taglib-location>/WEB-INF/myTag.tld</taglib-location>
    </taglib>
   </jsp-config>
  (4) 在JSP 文件中使用自定义标签;
   使用标签库分成以下两步。
   (1)导入标签库:使用taglib 编译指令导入标签。
   taglib 的语法格式如下:
    <%@ taglib uri= "/tags/myTag.tld" prefix="myTag"%>
   (2) 使用标签:在JSP 页面中使用自定义标签。
    使用标签的语法格式如下:
    <myTag:tagName tagAttribute="tagValue">
     <tagBody/>
    </myTag>
15.
 带标签体的标签,就是允许在标签内嵌套标签,通常可用于完成一些逻辑运算例如判断和循环等。
 带标签体的标签需要继承BodyTagSupport,该类包含一个bodyContent 属性,该属性代表标签体。
 BodyTagSupport 还包含两个方法。
  doAfterBody(): 每次处理完标签体后调用该方法。
  void doInitBody(): 开始调用标签体时调用该方法。
16.
 在处理标签类的各个方法中,不同的返回值对应不同的含义,常用的返回值有如下几个。
  SKIP_BODY: 不处理标签体,直接调用doEndTag()方法。
  SKIP_PAGE: 忽略标签后面的JSP 页面。
  EVAL_PAGE: 处理标签结束,直接处理页面内容。
  EVAL_BODY_BUFFERED: 处理标签体。
  EVAL_BODY_INCLUDE: 处理标签体,但忽略setBodyContent()和doInitBody()方法。
  EVAL_BODY_AGAIN: 对标签体循环处理。

17.
 Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应。主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链。
 Filter 有如下几个用处。
  在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest,根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。
  在HttpServletResponse 到达客户端之前,拦截HttpServletResponse,根据需要检查HttpServletResponse,也可以修改HttpServletResponse 头和数据。
 Filter 有如下几个种类。
  用户授权的Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求。
  日志Filter: 详细记录某些特殊的用户请求。
  负责解码的Filter: 包括对非标准编码的请求解码。
  能改变XML 内容的XSLTFilter 等。
 一个Filter 可负责拦截多个请求或响应:一个请求或响应也可被多个请求拦截。
 创建一个Filter 只需两个步骤:
  (1)创建Filter 处理类,
   创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。
    void init(FilterConfig config): 用于完成Filter 的初始化。
    void destroy(): 用于Filter 销毁前,完成某些资源的回收。
    void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。
  (2) 在web.xml 文件中配置Filter.
   Filter 的配置和Servlet 的配置非常相似,都需要配置两个部分:
    1.配置Filter 名。
    2.配置Filter 拦截URL 模式。
   区别在于, Servlet 通常只配置一个URL ,而Filter 可以同时拦截多个请求的URL。因此,可以配置多个Filter 拦截模式。
  <!-- 定义Filter -->
  <filter>
   <!-- Filter的名字 -->
   <filter-name>log</filter-name>
   <!-- Filter的实现类 -->
   <filter-class>filters.LogFilter</filter-class>
  </filter>
  <!-- 定义Filter拦截地址 -->
  <filter-mapping>
   <!-- Filter的名字 -->
   <filter-name>log</filter-name>
   <!-- Filter负责拦截的URL -->
   <servlet-name>*</servlet-name>
  </filter-mapping>

18.
 Listener 的作用非常类似于load-on-startup Servlet。用于在Web 应用启动时,启动某些后台程序,这些后台程序负责为系统运行提供支持。
 Listener 与load-on-startup Servlet 的区别在于: Listener 的启动时机比load-on-startup Servlet早,只是Listener 是Servlet 2.3 规范之后才出现的。
 使用Listener 只需要两个步骤:
  (1)创建Listener 实现类。
   创建Listener 类必须实现ServletContextListener 接口,该接口包含两个方法。
    contextInitialized(ServletContextEvent see): 启动Web 应用时,系统调用该Filter的方法。
    contextDestroyed(ServletContextEvent see): 关闭Web 应用时候,系统调用Filter的方法。
  (2) 在web.xml 文件中配置Listener。
   正如load-an-startup Servlet 一样, Listener 用于启动Web 应用的后台服务程序,但不负责处理及响应用户请求,因此无须配置URL。
   若将Listener 配置在Web 容器中(如果Web 容器支持Listener),则Listener 将随Web 应用的启动而启动。
   <!-- 配置listener -->
   <listener>
    <!-- 指定listener实现类 -->
    <listener-class>listener.Listener_test</listener-class>
   </listener>

抱歉!评论已关闭.