zoukankan      html  css  js  c++  java
  • JSP


    JSP概述

    JSP是在HTML页面中嵌入Java代码片段,或使用JSP标签。包括用户自己定义标签。动态地提供页面内容。

    JSP本质上是Servlet,当用户向指定Servlet发送请求时,Servlet利用输出流动态地生成HTML页面,包括每一个静态的HTML页面中出现的内容。



    JSP页面内容主要包括两部分:

    • 静态部分:标准的HTML标签、静态的页面内容。这些内容与静态HTML页面同样;
    • 动态部分:受Java程序控制的内容,这些内容由Java脚本动态生成。

    代码演示样例

    <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
    <html>
    <head>
    <title>欢迎</title>
    </head>
    <body>
    欢迎学习Java Web知识。如今时间是:
    <%out.println(new java.util.Date());%>
    </body>
    </html>

    当中放在<%和%>之间的代码便是Java脚本,动态部分,这样就把Java代码嵌入HTML页面中,构成一个动态的JSP页面。



    JSP页面看书去好像不须要Java类,让人感觉好像全然脱离了Java面向对象的特征。实际上。JSP的本质依旧是Servlet(一个特殊的Java类),每一个JSP页面就是一个Servlet实例——JSP页面由系统编译成Servlet,Servlet在负责响应用户请求。Web应用中的每一个JSP页面都会由Servlet容器生成相应Servlet。在tomcat中。JSP页面生成的Servlet放在work路径下相应的Web应用下。如一个test.jsp页面会生成相应的test_jsp.java和test_jsp.class。这两个页面都是由Web容器(如Tomcat)生成的。对照test.jsp和test_jsp.java文件,易知JSP页面全部内容都由test_jsp.java文件的页面流来生成

    这里写图片描写叙述

    由此,我们能够得到例如以下结论:

    • JSP文件必须在JSPserver内运行;
    • JSP文件必须生成Servlet才干运行;
    • 每一个JSP 页面的第一个訪问者速度非常慢,由于要等待JSP编译成Servlet;
    • JSP页面的訪问者无需安装不论什么client。甚至不须要能够运行Java的运行环境,由于JSP页面输送到client的是标准HTML页面。

    运行流程

    WEB容器JSP页面的訪问请求时,它将把该訪问请求交给JSP引擎去处理。

    Tomcat中的JSP引擎就是一个Servlet程序。它负责解释和运行JSP页面。


    每一个JSP页面在第一次被訪问时,JSP引擎先将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件。然后再由WEB容器像调用普通Servlet程序一样的方式来装载和解释运行这个由JSP页面翻译成的Servlet程序。



    这里写图片描写叙述

    这里写图片描写叙述

    JSP的四种基本的语法

    1. JSP凝视
    JSP凝视用于标注在程序开发过程中的开发提示。不会输出到client。格式为
    <%-- 凝视内容 -->
    不同于HTML凝视格式
    <!-- 凝视内容 -->
    JSP凝视无法通过源码查看到,而HTML凝视能够通过源码查看到。这表明JSP凝视不会被发送到client。

    2. JSP声明
    JSP声明用于声明变量和方法,JSP声明方法看似不须要定义类就能够直接定义方法,方法好像能够脱离类独立存在。实际上。JSP声明将会转换成相应Servet的成员变量或成员方法,这样JSP声明依旧符合Java语法。


    声明演示样例:

    <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
    <html>
    <head>
    <title>声明演示样例</title>
    </head>
    <!-- 以下是JSP声明部分 -->
    <%!
    //声明一个整型变量
    public int count;
    //声明一个方法
    public String info()
    {
      return "Hello";
    }
    %>
    <body>
    <%
    //将count的值输出后在加1
    out.println(count++);
    %>
    <br/>
    <%
    //输出info()方法的返回值
    out.println(info());
    %>
    </body>
    </html>


    表面上看。这段代码部分证明了一个整型变量和一个普通方法,变量和方法好像不属于不论什么类。似乎能够独立存在,这是假象。打开Tomcat的work里面找到相应的java文件,会看到一段与JSP页面声明变量和方法全然相应的的代码,这表明JSP页面的声明部分转换成相应Servlet的成员变量或成员方法。因此JSP声明部分的变量和方法能够使用private、public等訪问控制符修饰、也能够使用static修饰。将其变成类属性和类方法,但不能用abstract修饰声明部分的方法,由于抽象方法将导致JSP相应的Servlet变成抽象类。从而导致无法实例化。

    打开不同浏览器測试代码。会发现不同机器不同client訪问的count值是连续的。全部client共享同一个count变量。由于JSP页面会编译成一个Servlet类。每一个Servlet的容器仅仅有一个实例。在JSP中声明的变量时成员变量,成员变量仅仅在创建实例时初始化,该变量的值将一直被保存,直到实例被销毁。



    info()方法的值以能够正常输出,JSP中声明的方法是在JSP声明中生成的Servlet的实例方法,Java的方法是不能独立存在的。即使在JSP中也不行。



    3. JSP输出表达式
    JSP提供一种输出表达式值的简单方法,输出表达值的语法格式
    <%= 表达式 %>
    演示样例

    <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
    <html>
    <head>
    <title>声明演示样例</title>
    </head>
    <!-- 以下是JSP声明部分 -->
    <%!
    //声明一个整型变量
    public int count;
    //声明一个方法
    public String info()
    {
      return "Hello";
    }
    %>
    <body>
    <!-- 使用表达式输出变量 -->
    <%=count++%>
    <br/>
    <!-- 使用表达式输出方法返回值 -->
    <%=info()%>
    </body>
    </html>

    输出表达式语法后不能有分号。

    4. JSP脚本

    JSP脚本里能够包括不论什么可运行的Java代码,JSP脚本能够控制JSP页面的全部静态内容。JSP脚本编译后将被转换成Servlet里_jspService方法的可运行性代码,由于Java语法不同意在方法里定义方法,所以JSP脚本里不能定义方法。JSP脚本部分也能够声明变量,但在JSP脚本本分声明的变量时局部变量,但不能用public、private、static等訪问控制符等修饰符。



    JSP的3个编译指令

    JSP的编译指令是通知JSP引擎的消息。不直接生成输出,而是告诉引擎怎样处理JSP页面中的其余部分。编译指令都有默认值。程序猿无需为每一个指令设置值

    • page: 针对当前页面的指令。用于定义JSP页面的各种属性,不管page指令出如今JSP页面的什么地方。它都作用于整个JSP页面。通常我们将page指令房在JSP页面的開始位置。

      这里写图片描写叙述

    • include:用于指定包括还有一个 。

      用于通知JSP引擎在翻译当前JSP页面时将其它文件里的内容合并进当前JSP页面转换成的Servlet源文件里,这样的在源文件进行引入的方式称为静态引入,当前JSP页面与静态引入的页面紧密结合成一个Servlet。

    • taglib: 用于定义和訪问自己定义标签。


    JSP的7个动作指令

    编译指令是通知Servlet引擎的处理消息,而动作指令仅仅是运行时的动作。编译指令在将JSP编译成Ser略同一时候起作用;而处理指令可替换成JSP脚本,它是JSP脚本的标准化写法

    • jsp:forward:运行页面转向,将请求的处理转发发到下一个页面。
    • jsp:param:用于传递參数,必须与其它支持參数的标签一起使用;
    • jsp:include:动态引入一个JSP页面;
    • jsp:plugin:用于下载JavaBean或Applet到client进行运行。
    • jsp:useBean:创建一个JavaBean实例;
    • jsp:setProperty:设置JavaBean实例的属性值;
    • jsp:getProperty:输出JavaBean实例的属性值。


    JSP脚本中的9个内置对象

    JSP中包括9个内置对象,都是Servlet API接口的实例,JSP规范对它们进行了默认初始化(由JSP页面相应Servlet的_jspService()方法来创建这些实例)。即它们已经是对象了。能够直接使用。

    • application:java.servlet.ServleContext的实例。该实例代表JSP所属的Web应用本身。可用于JSP页面,或者在Servlet之间交换信息。经常用法有getAttribute(String arrName)、setAttribute(String attName, String attValue)和getInitParameter(String paramName)等;
    • config: javax.servlet.ServletConfig的实例,该实例代表该JSP的配置信息。经常用法有getInitParameter(String paraName)和getInitParameternames()等方法。JSP页面通常无需配置,也就不存在配置信息。

      该对象很多其它在Servlet中有效。

    • Exception:java.lang.Throwable的实例。该实例代表其它页面中的异常错误。仅仅有当页面是错误处理页面即编译指令page的isErrorPage属性为true时,该对象才干够使用。

      经常用法有getMessage()和printStackTrace()等。

    • out:javax.servlet.jsp.JspWriter的实例。该对象代表JSP中的输出流,用于内天的输出形成HTML页面。
    • page: 代表该页面本身,通常没有太大用处。也就是Servlet的this,其类型就是生成的Servlet类。能用于page的地方就能够用this。
    • pageContext: javax.servlet.jsp.PageContext的实例。该对象代表该JSP页面上下文。使用该对象能够訪问页面中的共享数据。经常使用的方法有getServletContext()和getServletConfig()等。

    • request: javax.servlet.http.HttpServletRequest的实例。该对象封装了一次请求,client的请求參数都被封装在该对象里。

      这是一个经常使用的对象。局偶去client请求參数必须使用该对象。经常使用的方法有getParameter(String paraName)、getAttrbute(String attrName)和setCharacterEncoding(String attrName,Object attrValue)、getAttribute(String attrName)等。

    • response: javax.servlet.http.HttpServletResponse的实例,该对象代表server对client的响应。通常非常少使用该对象直接响应,而是使用out对象,除非须要生成非字符串响应。

      而response对象经常使用于重定向。经常使用的方法有getOutputString()、sendRedirect(java.lang.String.locaton)等。

    • session: javax.servlet.http.HttpSession的实例,该对象代表一次会话。当client浏览器与网站建立连接时,会话開始;当client关闭浏览器时,会话结束。经常使用的方法有:getAttribute(String attrName)、setAttribute(StringName,Object attrValue)等。
  • 相关阅读:
    swing加载图片
    能有效解决问题的提问方法
    资源在线汇总
    如何赢得别人的尊重
    算法总结
    软件工程概述
    java语言基础汇总
    DEBUG技巧汇总
    web技术发展历程
    java中BufferedImage类的用法
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7251531.html
Copyright © 2011-2022 走看看