一、JSP概述:

    1、由来:
    • JSP(Java Server Page):为了简化Servlet的工作,新推出的一种新技术,也可以说是Servlet的替代品。1997年由SUN公司推出了Servlet API 以及第一款Java Web服务器。
    2、JSP技术:
    • 1999年Sun公司推出了JSP1.0,作为对Servlet的补充。JSP包含很多技术,如Java Bean,自定义标签(Custom Tags),EL表达式(Expression Language),JSTL标准标签库(Java Standard Tag Library)等。
    3、JSP工作原理:
    • JSP是一种Servlet,但是与HttpServlet的工作方式不太一样,
      • HttpServlet是先由源代码编译为class文件后部署到服务器的,是先编译后部署。
      • JSP则是先部署源代码后编译为class文件的,是先部署后编译。

二、JSP语法:

  • JSP是HTML代码与Java代码的混合体,其中HTML部分遵循HTML语法,Java部分遵循Java语法
    1、JSP脚本:
    • 在JSP页面中写Java代码称为JSP脚本。JSP脚本必须使用 "<%    %>"括起来,Java代码写在其中,并且必须遵循Java语法
    2、JSP输出:
    • JSP中使用 “ <%=    %> ”输出各种类型数据,包括int、double、boolean、String、Object
    3、JSP指令:JSP指令用来声明JSP页面的一些属性等,例如编码方式、文档类型。JSP指令使用符号“  <%@       %>  ”
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    • page指令:
      • page指令是最常用的指令,用来声明JSP页面的属性等。JSP指令的多个属性可以写在一个page指令里,也可以写在多个指令里。
      • 注意:无论在哪个page指令里的属性,任何page允许的属性都只能出现一次,否则会出现编译错误。import可以出现多次
    • include指令:
      • include指令比较简单,只有一种形式:
        1. <%@ include file="relativeURL" %>
        2. <!-- relativeURL 为本应用程序内另一个JSP文件或者HTML文件的路径 -->
      • JSP中还提供了另一种包含文件的行为:
        1. <jsp:include page="relativeURL" />
        2. <!-- 该命令与include指令的使用方法基本一致 -->
    • taglib指令:
      • JSP支持标签技术,使用标签功能能够实现代码重用,很少量的代码就可以实现很复杂的显示效果。
      • 要使用标签功能必须先声明标签库以及标签前缀。
      • taglib指令有两个属性:uri为类库的地址,prefix为标签的前缀。
        1. <!-- 这里使用的是JSTL 需要两个jar包的支持 -->
        2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    4、JSP行为:
  • JSP行为(JSP  Action)是一组JSP内置的标签。JSP行为是对常用的JSP功能的抽象与封装,包括两种:自定义JSP行为和标准JSP行为。
    • <jsp:include /> 行为:用于运行时包含某个文件。若被包含的文件为JSP程序,则先会执行JSP程序,然后将执行的结果保健进来。
    • 语法:<jsp:include page="relativeURL" flush="true">
      • 属性page是必需的,表示被包含的文件相对路径
      • 属性flush可选,,取值有true或false,默认为false,设置读入被保存文件前是否清空缓存。
    • <jsp:forward />行为:它是对forward()方法的一个封装
      • Servlet中使用以下方式跳转(转发)到另外一个Servlet或者另一个文件
        1. //getRequestDispatcher(String str)方法中传入的是目标地址
        2. request.getRequestDispatcher("index.jsp").forward(request, response);
      • JSP中使用如下方式:
        1. <jsp:forward page="index.jsp"/>

三、JSP隐藏对象

  • JSP中内置了 9 个隐藏对象:out、request、response、config、session、application、page、pageContext、exception。
    1、out输出流对象:
    • 隐藏对象out是  javax.servlet.jsp.JspWriter类的实例。服务器向客户端输出的字符类内容可以通过out对象输出。
    • out对象的常用方法:
      • void  append(CharSequence  cs):向out缓存中扩展字符类输出。当缓存满或者执行out.flush()操作时,这些内容会输出到客户端浏览器
      • void  clear():清空要输出的内容
      • void  flush():将缓存内容flush到客户端浏览器
      • void  println(String  str):向客户端输出内容
      • boolean  isAutoFlush():返回缓存满时 是否自动flush,如果为false,缓存满时会抛出异常
      • int  getBufferSize():返回缓存大小,单位/KB
      • int  getRemaining():返回缓存剩余大小,单位/KB
    2、request请求对象:
    • 隐藏对象 request是 javax.servlet.ServletRequest 类的实例,代表着客户端的请求
    • request 包含客户端信息以及请求信息,如:请求哪个文件,附带的地址栏参数等
    • 客户端每次请求都会产生一个request实例
    • request对象的常用方法:
      • void  setAttribute(String  name,Object  value):在request中保存一个对象。本页面或者forward之后的页面中可以通过getAttribute(String  name)方法获取该对象
      • Object  getAttribute(String  name):从request中获取name对应的对象
      • String  getMethod():返回提交方式,一般为GET或者POST
      • String  getParameter(String  key):返回提交的参数
      • String[]  getParameterValues(String  key):返回提交的多个同名参数值,以数组的形式返回
      • Enumeration  getParameterNames():返回所提交的参数名称
      • Cookie[]   getCookies():返回所有的Cookie
      • String  getContextPath():返回应用程序的路径
      • String  getRequestURI():返回请求的URI路径
      • void  setCharacterEncoding(String  encoding):设置request的编码方式
      • String  getHeader(String  name):获取request头信息
      • Enumeration  getHeaderNames():返回所有的request头名称
      • Dispatcher  getRequestDispatcher():返回 Dispatcher对象。 Dispatcher  对象可以执行forward操作
      • HttpSession  getSession():返回HttpSession对象
    3、response响应对象:
    •  隐藏对象response是  javax.servlet.ServletResponse 类的实例,代表着客户端的响应
    • 服务器的任何输出都通过response对象发送对客户端浏览器,每次服务器都会响应一个response实例
    • response对象的常用方法:
      • void  clear():清空暂存在缓冲区的输出
      • void  addCookie(Cookie  cookie):设置Cookie
      • OutputStream  getOutputStream():返回服务器输出流,可以通过该输出流输出二进制信息
      • void  sendRedirect(String  url):使本页面 redirect 到另一个页面
      • void  setContextType(String  contextType):设置文档类型,HTML的文档类型为 text/html
      • PrintWriter  getOut():返回out对象
      • void  setHeader(String  name, String  value):设置 response 头信息
      • void  setStatus(int  status):设置 response 状态码
    4、config配置对象:
    • 隐藏对象 config 是  javax.servlet.ServletConfig 类的实例,ServletConfig 封装了配置在 web.xml 中初始化JSP参数
    • JSP中通过 config 获取这些参数,每个JSP文件共有一个config对象
    • config对象的常用方法:
      • String  getInitParameter(String  name):返回配置在web.xml中的初始化参数
      • Enumeration  getInitParameterNames():返回所有的初始化参数名称
      • ServletContext  getServletContext():返回ServletContext 对象
      • String  getServletName():返回Servlet的名称
    5、session会话对象:
    • 隐藏对象session是 javax.servlet.http.HttpSession 类的实例
    • session 与 cookie 是记录客户访问信息的两种机制
      • session 用于在服务器端保存用户信息
      • cookie用于在客户端保存用户信息
    • Servlet中需要通过 request.getSession() 来获取 session 对象,而JSP中可以直接使用,如果JSP中配置了 <%@ page  session="false" %>,则隐藏对象session不可用
    • 每一个用户对应一个session对象
    • session对象的常用方法:
      • String  getId():返回session的ID
      • Object  getAttribute(String  name):返回session中属性名为name的对象
      • Enumeration   getAttributeNames():返回 session 的所有属性名
      • long   getCreationTime():返回该session创建的时间
      • long  getLastAccessedTime():返回该session最后一次访问的时间
      • int  getMaxInactiveInterval():返回session的最大允许的间隔时间,单位:秒
      • void   setAttribute(String  name, Object  value):设置 session
      • void   setMaxInactiveInterval(long  second):设置对打允许的时间间隔
    6、application应用程序对象:
    • 隐藏对象 application 是 javax.servlet.ServletContext 类的对象。 application封装了JSP所在的 Web 应用程序的信息,eg: web.xml 中配置的全局的初始化信息
    • Servlet中 application 对象需要通过ServletConfig.getServletContext() 来获取,整个 Web 应用程序对应一个 application对象
    • application 对象的常用方法:
      • Object  getAttribute(String   name): 返回application中属性名为 name的对象
      • Enumeration  getAttributeNames(): 返回application中的所有属性名
      • void  setAttribute(String  name, Object  value): 设置 application 属性
      • void  removeAttribute(String  name): 移除 application 属性
      • String  getInitParameter(String  name): 返回全局初始化参数
      • Enumeration  getInitParameterNmaes(): 返回所有的全局初始化参数
      • String  getMimeType(String  filename): 返回文件的文档类型。eg: getMimeType("index.html") 将返回 "text/html"
      • String  getRealPath(String  relativePath): 返回 web 应用程序内相对网址对应的绝对路径
    7、page 页面对象:
    • 隐藏对象 page 为 javax.servlet.jsp.HttpJspPage 类的实例。
    • page 对象代表当前JSP页面,是当前JSP编译后的Servlet类的对象
    • page 相当于普通 Java类中的关键字 this
    8、pageContext 页面上下文对象:
    • 隐藏对象 pageContext 为 javax.servlet.jsp.PageContext 类的实例
    • pageContext 对象代表当前JSP页面编译后的内容,通过pageContext能获取到JSP中的资源
    • pageContext对象的常用方法:
      • Object  findAttribute(String  name): 在JSP页面中查找变量
      • void  forward(String  url): forward 到另一个页面
      • Object  getAttribute(String  name): 返回属性
      • Object  getAttribute(String  name, int  scope): 返回指定范围内的属性,范围包括(PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE)
      • JspWriter  getOut(): 返回 out 对象
      • Object  getPage(): 返回 page 对象
      • ServletRequest  getRequest(): 返回 request 对象
      • ServletResponse   getResponse(): 返回response 对象
      • HttpSession  getSession(): 返回 session 对象
    9、exception 异常对象:
    • 隐藏对象 exception 为 java.lang.Exception 类的对象
    • exception 封装了JSP中抛出的异常信息,要想使用 exception 隐藏对象,需要设置 <%@  page  isErrorPage="true"%>
    • 隐藏对象 exception 通常被用来处理错误页面

四、EL表达式

  • JSP中可以使用 EL(Expression Language)表达式,EL表达式是使用 “${ }”括起来的脚本,用来更方便的读取对象。
  • EL表达式写在JSP的HTML代码中,而不能写在 “<%    %>” 括起来的脚本中
    1、EL表达式运算:
    • EL表达式支持简单的运算,包括:加(+)、减(-)、乘(*)、除(/ 或者 div)、取余(% 或者 mod)、三目运算符(exp ? val1 : val2)等
      1. 10 + 20 = ${10 + 20} <br>
      2. 10 - 20 = ${10 - 20} <br>
      3. 10 * 20 = ${10 * 20} <br>
      4. 10 / 20 = ${10 / 20} <br>
      5. 10 div 20 = ${10 div 20} <br>
      6. 10 % 20 = ${10 % 20} <br>
      7. 10 mod 20 = ${10 mod 20} <br>
      8. 10 与 20 谁大:${10 > 20 ? 10 : 20} <br>
      9. 10 与 20 谁小:${10 <= 20 ? 10 : 20} <br>
    •  EL表达式也支持简单的比较运算,包括:大于(> 或者 gt)、小于(< 或者 lt)、等于(==  或者 eq)、不等于(!= 或者 ne)、大于等于(>= 或者 ge)、小于等于(<= 或者 le)等
      1. 10 大于 20 ?:${10 > 20} <br>
      2. 10 大于 20 ?:${10 gt 20} <br>
      3. 10 小于 20 ?:${10 < 20} <br>
      4. 10 小于 20 ?:${10 lt 20} <br>
      5. 10 等于 20 ?:${10 == 20} <br>
      6. 10 等于 20 ?:${10 eq 20} <br>
      7. 10 不等于 20 ?:${10 != 20} <br>
      8. 10 不等于 20 ?:${10 ne 20} <br>
      9. 10 大于等于 20 ?:${10 >= 20} <br>
      10. 10 大于等于 20 ?:${10 ge 20} <br>
      11. 10 小于等于 20 ?:${10 <= 20} <br>
      12. 10 小于等于 20 ?:${10 le 20} <br>
    • EL表达式的逻辑运算符,包括:与(&&  或者  and)、或(||  或者  or)、非(!  或者  not)等
      1. 10 大于 20 并且 10 小于 20 ?:${10 > 20 && 10 < 20} <br>
      2. 10 大于 20 并且 10 小于 20 ?:${10 > 20 and 10 < 20} <br>
      3. 10 大于 20 或者 10 小于 20 ?:${10 > 20 || 10 < 20} <br>
      4. 10 大于 20 或者 10 小于 20 ?:${10 > 20 or 10 < 20} <br>
      5. 非 10 大于 20 ?:${! (10 > 20)} <br>
      6. 非 10 大于 20 ?:${not (10 > 20)} <br>


附件列表

     

    posted on 2017-09-07 01:01  Diviner_Sun  阅读(388)  评论(0编辑  收藏  举报