JSP(介绍,语法,指令)

时间:2021-11-29 18:54:11

什么是JSP

  JSP全名为Java Server Pages,java服务器页面。JSP是一种基于文本的程序,其特点就是HTML和Java代码共同存在!

JSP的工作原理

其实JSP在第一次被访问的时候会被编译为HttpJspPage类(该类是HttpServlet的一个子类)
编译过程是这样子的:浏览器第一次请求1.jsp时,Tomcat会将1.jsp转化成1_jsp.java这么一个类,并将该文件编译成class文件。编译完毕后再运行class文件来响应浏览器的请求。
以后访问1.jsp就不再重新编译jsp文件了,直接调用class文件来响应浏览器。当然了,如果Tomcat检测到JSP页面改动了的话,会重新编译的。

  • 既然JSP是一个Servlet,那JSP页面中的HTML排版标签是怎么样被发送到浏览器的?我们来看下上面1_jsp.java的源码就知道了。原来就是用write()出去的罢了。说到底,JSP就是封装了Servlet的java程序罢了。
  • JSP页面的代码服务器是怎么执行的?再看回1_jsp.java文件,java代码就直接在类中的service()中。

JSP比Servlet更方便更简单的一个重要原因就是:内置了9个对象!内置对象有:out、session、response、request、config、page、application、pageContext、exception

JSP生命周期

  JSP也是Servlet,运行时只有一个实例,JSP初始化和销毁时也会调用Servlet的init()和destroy()方法。另外,JSP还有自己初始化和销毁的方法

public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
} public void _jspDestroy() {
}

JSP的语法

JSP代码可以分为两部分:
   模板数据:就是HTML代码
   元素:JSP页面中的java代码、JSP指令、JSP标签

JSP脚本

JSP的脚本就是JSP页面中的java代码,也叫做scriptlet。JSP的脚本必须使用<%%>括起来,不然会被当成是模板数据的!
JSP脚本有三种方式
  <%%>【定义局部变量,编写语句】---------------<jsp:scriptlet>行为代替(好像用不了,需要考虑版本?)
  <%!%>【定义类或方法,但是没人这样用!】
  <%=%>(也称之为表达式输出)【输出各种类型的变量,int、double、String、Object等】

JSP注释

<%--这是JSP注释--%>
<%--%>

JSP指令

JSP指令用来声明JSP页面的相关属性,例如编码方式、文档类型等等
JSP指令的语法
  <%@指令 属性名="值" %>
    page指令
    page指令常见属性

      • language="java"
      • extends="package.class"
      • import="{package.class | package.*}, …"
      • session="true | false"
      • buffer="none | 8kb | sizekb"
      • autoFlush="true | false"
      • isThreadSafe="true | false"
      • info="text"
      • errorPage="relative_url"
        • 错误跳转友好页面,属于服务器跳转
        • 可以在web.xml文件中全局设置错误页,只要发生了404错误或者空指针异常的错误都会跳转到error.jsp页面上
        • <error-page>
          <error-code>404</error-code>
          <location>/error.jsp</location>
          </error-page> <error-page>
          <exception-type>java.lang.NullPointerException</exception-type>
          <location>/error.jsp</location>
          </error-page>
      • isErrorPage="true | false"
        • 错误页面本误
      • contentType="mimeType ;charset=characterSet " | "text/html ; charset=ISO-8859-1"
        • contentType 不仅仅可以指定以text/html的方式显示,还可以使用其他的形式显示出来。在conf/web.xml文件中可以查询出来
      • pageEncoding="characterSet | ISO-8859-1"
      • isELIgnored="true | false"

  include指令
    include指令是静态包含。静态包含的意思就是:把文件的代码内容都包含进来,再编译!,看一下jsp的源代码就知道了!
    <%@include file="head.jsp" %>
  taglib指令
    JSP支持标签技术,要使用标签技术就先得声明标签库和标签前缀。taglib指令就是用来指明JSP页面内使用标签库技术。