jsp详解

作者: ezsync小智 | 来源:发表于2016-09-17 11:26 被阅读0次

    什么是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:include>

    • <jsp:forward>

    • <jsp:param>

    • <jsp:plugin>

    • <jsp:useBean>

    • <jsp:setProperty>

    • <jsp:getProperty>

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

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

    • <jsp:param>是传递参数的标签。它是以"名-值"对的形式来表示参数的。格式如下:
      <jsp:param name="参数名" value="参数值">

    • <jsp:include>包含的文件传递参数

    <jsp:include page="page name" flush="false"> 
        <jsp:param name="parameter name" value="parameter value"></jsp:param>
        ...
    </jsp:include>
    
    • <jsp:forward>页面传递参数
    <jsp:forward page="forward target"> 
        <jsp:param name="parameter name" value="parameter value"></jsp:param> 
        ...
    </jsp:forward>
    

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

    • <jsp:plugin>可以将服务器端的javaBean或Applet下载到本地客户端执行。语法格式如下:
    <jsp:plugin type="bean|applet" code="classFileName" codeBase="classFileURL">
    ...
    </jsp:plugin>
    
    • type:指定插件类型。是Bean还是Applet。

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

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

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

    <jsp:useBean id="beanInstanceName" class="className" scope="page|request|session|application"></jsp:useBean>
    
    • id:指定javaBean的实例名。

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

    • scope:指定javaBean的作用域。

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

    • <jsp:getProperty>用于获取bean的属性值。语法格式如下:
      <jsp:getProperty name="beanInstanceName" property="propertyName"></jsp:getProperty>

    PS:bean中可以没有属性的声明,但必须有setter和getter方法,因为<jsp:getProperty><jsp:setProperty>是通过调用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详解

          本文链接:https://www.haomeiwen.com/subject/vhaiettx.html