jsp详解

什么是jsp?

很久之前,我们的网页都是静态的,就是我们所看到的页面在编写好之后总是唯一的。后来有人便提出动态页面的概念,相应的就提出了Servlet。Servlet动态网页技术,是可以把Java语言嵌入到HTML页面上。那时候Servlet是个大忙人,它既要处理显示效果,又要处理数据,又要处理页面跳转,耦合度高,不方便代码维护,为了解决这个问题,SUN公司联合其他公司制定了JSP动态网页技术标准。事实上jsp是一个特殊的Servlet实例,它跟其他Servlet一样被Servlet容器执行,在这之前它需要先被jsp容器转换成Servlet,这个过程是在服务器端产生的,在第一次编译之后该Servlet实例便常驻内存。

jsp的运行机制

  1. jsp容器判断URL中对应的Servlet实例是否存在Servlet队列,实则执行第五步,否则执行第二步。
  2. jsp容器将jsp文件转换成Servlet源程序(.java)。
  3. jsp容器将Servlet源程序编译成字节码文件(.class)。
  4. Servlet容器加载字节码,创建该Servlet实例(该实例实际是返回给客户端的显示效果),此时会调用jspInit()进行初始化。
  5. jsp容器将响应返回到到客户端。

jsp基本语法

注释

注释有以下两种:

  • HTML注释:``,这种方法注释在查看HTML源代码时可以被显示
  • jsp注释:<%-- 注释内容 --%>,通过这种方法注释用户是看不到的

jsp指令

jsp指令有以下三种:

  • page指令

  • include指令

  • taglib指令

  • page指令page指令称为页面指令,用来定义jsp页面的全局属性。语法格式如下:
    <%@ page [属性="值" 属性="值"]%>
    比较重要的属性有以下几种:

  • extends:指定jsp继承的父类。

  • import:用于导入jsp需要的Java包。其中Java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*这几个包本身已经被导入,无需再导入。

  • session:指定该jsp页面是否可用session对象。

  • isThreadSafe:指定该jsp页面是否支持多线程。

  • info:设置页面的相关信息。可以用servlet.getServletInfo()获取jsp页面中的文本信息。

  • Errorpage:当jsp页面出错时,会调用该指令指定的错误处理页面。

  • isErrorPage:指定jsp页面能否进行异常处理。

  • contentType:指定页面支持的编码方式和响应的MIMe类型。默认为"text/html; charset = ISO-8859-1".

  • isELIgnored:指定是否支持EL表达式。

PS:导入多个包时用一个import指令,各个包之间用“,”隔开。

  • include指令include指令是加载文件指令,它在jsp被编译前就将文件加载进jsp中合并成一个新的jsp文件,因此当该文件改变时,jsp要重新被编译一次。include指令的格式如下:
    <%@ include file = "path"%>
    该指令只有一个属性file,该指令用于指向要加载的文件的相对地址。

  • taglib指令taglib指令是用来引用标签库并设置标签库前缀,说白了就是自定义自己的jsp标记。格式如下:
    <%@ taglib uri="标签库地址" prefix = "标签库前缀" %>
    使用标记方式如下:
    <标签库前缀:标签名 参数>

jsp脚本元素

jsp脚本元素有以下三种:

  • jsp声明语句

  • jsp表达式

  • jsp Scriptlets

  • jsp声明语句
    jsp声明语句用于声明变量和方法,在jsp声明语句中声明的变量和方法对作为servlet的成员变量,在整个页面都有效。格式如下:
    <%! 声明变量或方法 %>

  • jsp表达式
    jsp表达式要求该表达式存在一个确定的值,该值会被显示在HTML页面上。格式如下:
    <%= 表达式 %>

  • jsp Scriptlets
    jsp Scriptlets是一段java代码段。当需要对页面输出内容进行一些复杂的操作的时候就需要用到jsp Scriptlets,在jsp Scriptlets声明的变量在调用的时候分配内存,调用结束内存释放。jsp Scriptlets格式如下:
    <% java代码片段 %>

jsp动作元素

jsp动作元素有以下几种:

  • 是包含标签,它跟包含指令不一样。包含指令是将包含页面整合进jsp页面中再编译。而包含元素包含的文件和jsp文件是两个独立的文件,在运行时单独对包含文件进行编译,把结果发送到客户端。只有在运行jsp页面的时候才会加载这些包含文件。格式如下:

    • page:是被包含的文件的相对地址。
    • flush:指定当缓冲区满时,是否将其清空。默认值为false。
  • 是重定向标签,当代码运行到该标签会想客户端发出响应,让客户端重新链接到指定的地址,之后的代码不被执行。格式如下:

  • 是传递参数的标签。它是以"名-值"对的形式来表示参数的。格式如下:

  • 包含的文件传递参数

 
    
    ...

  • 页面传递参数
 
     
    ...

PS:传递的参数就会以“名-值”对的形式传递到调用它的页面中,参数的调用方法跟调用成员变量一样直接通过变量名调用。

  • 可以将服务器端的javaBean或Applet下载到本地客户端执行。语法格式如下:

...

  • type:指定插件类型。是Bean还是Applet。

  • code:指定执行的类名。必须以扩展名".class"结尾。

  • codeBase:指定被执行的java类所在目录。此外
    相关的参数还有很多,这里只是举例必不可少的三个。

  • 用来装载一个将在jsp页面中使用额javaBean。语法格式如下:


  • id:指定javaBean的实例名。

  • class:指定javaBean的全限类名。

  • scope:指定javaBean的作用域。

    • page:指定javaBean实例只在本页面有限。
    • request:指定JavaBean实例仅在本次请求有效。
    • session:指定javaBean实例在本次会话有效。
    • application:指定javaBean实例在本应用内一直有效。
  • 用于设置Bean内属性的值,它通过调用Bean的setter方法设置属性值。语法格式如下:

  • 用于获取bean的属性值。语法格式如下:

PS:bean中可以没有属性的声明,但必须有setter和getter方法,因为是通过调用bean实例中的setter方法和getter方法实现取值和赋值工作的。

jsp内置对象

jsp内置对象由jsp规范进行初始化,主要有以下几种:

  • request

  • response

  • pageContext

  • session

  • application

  • out

  • config

  • page

  • exception

  • request对象用于封装请求数据。一般用户在表单填写的数据会被封装成request对象,通过post方法传递给目标页面。request还相应提供了一些方法用于访问这些数据。主要方法有以下几个:

    • void setAttribute(attributeName, attributeValue):用于设置属性值。
    • Object getAttribute(attributeName, attributeValue):用于获取属性值。
    • String getParameter("parameterName"):获取参数值。
    • Enumeration getParameterNames():获取所有的参数名的集合。
    • String[] getParameterValues("parameterName"):获取parameterName的所有属性值的数组。
    • Map getParameterMap():获取所有属性名和属性值的Map对象。
    • void setCharacterEncoding():设置编码格式。

PS:setAttribute和getAttribute方法在转发时使用,当转发一个页面并传递参数时使用该方法设置和接受参数;其他方法主要用于获取表单数据。

  • response对象用于封装响应数据,其作用域是本页面。相关方法如下:

    • void addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定信息。
    • void addHeader(name, value):添加一个HTTP头信息,该头信息会被发送到客户端。
    • void containsHeader(name):判断是否含有名为"name"的头信息。
    • void sendError(int):向客户端发送错误的状态码。
    • void sendRedirect(url):向客户端发送重定向的url链接,让客户端跳转到该链接。
    • void setContentType(contentType):设置MIME类型和编码方式。
    • pageContext对象不仅可以设置page范围的属性,还可以设置其他范围内的属性。通过pageContext可以访问request、response、out等对象。
  • session对象是会话对象,用来记录每个客户端的访问状态。session对象主要方法如下:

    • Object getAttribute(name):获取session范围内名为name的属性值。
    • void setAttribute(name, value):设置session范围内的属性。
    • void removeAttribute(name):删除session范围内名为name的属性。
    • Enumeration getAttributeNames():获取session中保存的所有属性名。
    • long getCreationTime():返回session被创建的时间。
    • String getId():返回session被创建时jsp容器分配的唯一标识。
    • long getLastAccessedTime():返回最后一次通过session发送请求的时间。
    • int getMaxInactiveInterval():返回session的失效时间,即两次请求间隔多长时间该session被取消,单位为秒。
    • boolean isNew():判断是否是新的session。
    • void invalidate():清空session内容。
  • application对象用于获取和设置servlet相关信息,application的生命周期是从服务器启动直到服务器关闭。主要方法如下:

  • void setAttribute(name, value):以"键-值"对的形式将一个对象的值存入application对象中。

  • Object getAttribute(name):获取application中保存的属性的值。

  • out对象是一个缓冲的输出流,用来向客户端返回信息。由于向客户端输出信息总是要连接,所以向客户端输出总是采用缓冲的形式。主要方法有以下几个:

    • public abstract void clear() throws java.io.IOException:清除缓冲区的内容,但不将缓冲区的内容输出到客户端。
    • public abstract void clearBuffer() throws java.io.IOException:清除缓冲区的内容,且将缓冲区的内容输出到客户端。
    • public abstract void close() throws java.io.IOException:关闭输出流并输出缓冲区的数据。 - public abstract void flush() throws java.io.IOException:输出缓冲区的数据。
    • public int getBufferSize():获取缓冲区大小。
    • public abstract int getRemaining():获取剩余缓冲区大小。
    • public boolean isAutoFlush():缓冲区是否进行自动清除。
    • public abstract void newLine() throws java.io.IOException:输出一个换行符。
    • public abstract void print(String) throws java.io.IOException:打印信息。
    • public abstract void println(String) throws java.io.IOException:打印信息并换行。
  • config对象是ServletConfig类的一个实例,在servlet初始化时可以通过config对象想servlet传递信息。config常用的方法如下:

    • String getServletName():获得servlet名称。
    • ServletContext getServletContext():获得一个包含服务器相关信息的ServletContext对象。
    • String getInitParameter(name):获得servlet初始化参数。 - Enumeration getInitParameterNames():获得servlet初始化时所有参数的名字的枚举对象。
  • page对象是指当前的jsp页面本身,他是java.lang.Object类的对象,通过page对象可以很方便地调用servlet中定义的方法。常用方法如下:

    • class getClass():返回当前的类名。
    • int getHashCode():返回当前类的哈希码。
    • String toString():将此对象转换成字符串。
    • boolean equals(object):比较两个对象是否是相等。
    • void copy(object):将该对象复制到指定的object对象中。
  • exception对象java.lang.Throwable类的对象,用来处理页面错误和异常。常用方法如下:

    • String getMessage():返回异常对象的异常信息。
    • String getLocalizedMessage():返回本地化语言的异常信息。
    • void printStackTrace():打印异常的栈反向追踪痕迹。
    • String toString():返回异常的简单描述。

PS:使用异常对象时,应将page的isErrorPage属性设置为"true"。

javaBean的使用

javaBean是java语言描述的软件组件模型,其实际是一个java对象,通过将业务逻辑和对数据库的相关操作封装成javaBean对象,实现了java代码的复用,节省了程序员大量的宝贵时间。

javaBean的语法特征

  • JavaBean是一个public类。
  • JavaBean应当包含一个无参的构造函数。
  • JavaBean获取或设置参数的方式都必须用标准的getter或setter函数,对于布尔型的属性可以用isXxx()方法。

你可能感兴趣的:(jsp详解)