1、  Servlet的缺陷

  • 一个动态网页中,大部分内容都是HTML代码等固定不变的内容,编写和修改HTML非常不方便,令人厌恶;
  • 部署Servlet是繁琐而且容易出错的任务;(Servlet3.0规范新特性中使用annotation进行部署描述);
  • Web项目开发中,如果一个项目全部用Servlet编写,那么很难区分前端开发和后端开发,而要求开发人员掌握更多的技能,不利于项目开发分工。

2、  为了弥补Servlet的缺陷,sun公司推出了JSP(Java Server Page),本质是一个简化的Servlet设计。它是在传统的网页HTML文件中插入java程序段和JSP标记,从而形成JSP文件,后缀名为.jsp。

3、  JSP生命周期:

  • 由JSP引擎将JSP页面翻译成Java代码(翻译);
  • 将Java代码编译成.class字节码文件(编译);
  • 加载.class字节码文件到Web容器(类装载);
  • JSP页面类实例化,由Web容器实例化创建Servlet(类实例化);
  • JSP页面初始化阶段(Servlet初始化)(初始化);
  • 请求达到调用服务方法(提供服务);
  • 销毁对象实例(销毁);

PS:在JSP生命周期中,整个翻译和编译步骤只发生一次。

4、  JSP通常用于简化创建产生静态页面的Servlet,而Servlet更适合于发送原生字节到客户端或需要Java源代码完全控制源代码的场合。所以应该利用Servlet和JSP技术的各自特色,对二者进行分工。

5、  JSP页面:主要由元素(Element)和模板数据(Template Data)两部分组成。

  • 模板数据是JSP的静态部分(HTML),WEB容器不处理;
  • 元素是以XML做为语法基础,并且大小写要一致,必须经由WEB容器解释。

6、  元素:分为脚本元素、指令、动作。

脚本元素:分为 声明(定义方法和变量)、  Scriptlet(java代码片段直接插入到模板数据)   脚本表达式(将动态页面生成的结果传递给HTTP响应流);

指令:page指令(为当前页面提供处理指令);

include指令(用于把另一个文件包含在JSP中);

taglib指令(指定如何包含和访问自定义标签库)。

动作:include动作、forword动作。

7、声明:格式   <%! 声明 %>

注意:声明的变量和方法翻译成Java代码后变成类成员变量和方法。

8、脚本表达式:输出动态Web生成的结果,与Servlet的out.println()作用相同,

格式<%= 脚本表达式 %>

9、Scriptlet  一个Scriptlet必须是java程序,必须符合java规范,格式<% java代码片段 %>

10、注解:JSP注释有多种情况,有JSP自带的注释规范,也有HTML/XHTML注释规范。

  • HTML/XHTML注释:和HTML中的注释很像,唯一不同的之处就是可以在这个注释中使用脚本表达式;格式:<!--   注释  <%= 脚本表达式 %>   -->
  • 隐藏注释:这种注释写在JSP程序中,但是不发给客户端;格式<%-- 注释  --%>
  • Scriptlet注释:由于Scriptlet包含的是java代码,所以java中的注释规则在Scriptlet中也适用。格式://注释、      /* 注释  */

11、JSP指令:

JSP指令:设定整个JSP页面的属性和相关功能,用于JSP页面在翻译阶段与Web容器通讯。

page指令:用来定义JSP程序中的全局属性。如页面类型、字符集编码方式等,格式为:<%@ page指令  %>   可以放置在JSP页面任何位置,但规范是放置在文件的顶部。

page指令常用属性:contentType;import;is ThreadSafe;errorPage;isErrorPage;

errorPage和isErrorPage要成对使用,前者指定错误页面页,后者表明本身是一个错误页面。

include指令:在JSP编译时插入一个包含文本或代码的文件,把文件中的文本静态地包含到当前JSP页面中。其格式为:<%@ include file=”文件名” %>。由于使用include属性可以把一个复杂的JSP页面分为若干简单的部分,这样大大增加了JSP页面的管理性。当要对页面进行更改时,只需要更改对应部分就可以,在通常的情况下把页面分为多个分区。

taglib指令:该指令用于允许包含和访问自定义标签库。在JSP规范里,标签库得到不断的加强,JSP2.0规范中增加了JSTL标准标签库。

12、JSP动作

作用:用来处理页面与页面或者页面与组件之间的通信。如从一个页面转发到另一个页面。

include动作:格式为<jsp:include>表示包含静态或动态文件。

include指令和include动作的区别:

  • 属性方面:

include指令通过file属性来指定被包含的页面,include指令将file属性看做一个实际存在的文件路径,所以该属性不支持任何表达式。若在file属性中应用JSP表达式,会抛出异常;

include动作通过page属性来指定被包含的页面,该属性支持JSP表达式。

  • 处理方式:

使用include指令,被包含的文件为原封不动的插入到包含页面中使用该指令的位置,然后JSP编译器再对这个合成的 文件进行编译,所以在一个JSP页面中使用include指令包含文件,最终编译后的文件只有一个;

使用include动作包含文件时,当该动作做执行时,程序会请求转发到被包含的页面,并将执行结果输出到包含页面,然后继续执行包含页面中的代码,因为服务器执行的是多个文件,所以JSP编译器会分别对多个文件进行编译。

forward 指令:格式<jsp:forward>将请求转发给另一个JSP页面或者servlet处理或者静态资源文件。

13、隐式(内建)对象

JSP为简化页面的开发提供了9个隐式对象(内部对象),这些对象不需要JSP编写者实例化,由web容器维护和管理,在所有的JSP页面中都可以使用这些隐式对象,所有的隐式对象只有对Scriptlet或者脚本表达式有效,在jsp声明中不可用。

作用域为request的隐式对象: request

作用域为application的隐式对象:application

作用域为Session的隐式对象:session

作用域为page的隐式对象:page,pageContext,config,out,exception,response

14、JSP的缺点:

页面严重缺乏可读性;

没有将页面表现和业务逻辑实现分开,维护难度增加。

JavaWeb chapter9 JSP基础的更多相关文章

  1. JavaWeb之 JSP基础

    什么是JSP JSP的全称是java server page, java服务页面.是提供java服务的页面~ 那么和Servlet有什么区别呢?JSP的页面既可以写java代码~也可以写html代码哦 ...

  2. JAVAWeb入门之JSP基础知识

    也是到了考试周,很多课都结了,准备去学点新东西.随后就开始自学JAVAWeb. 要学习JAVAWeb,首先需下面的知识: a)      HTML/CSS/JS(前端页面),XML,JSON,vue ...

  3. JavaWeb基础-Jsp基础语法

    jsp基础语法 JSP的组成 静态内容.指令.表达式.小脚本.声明.注释 JSP的生命周期 用户发出index.jsp ,服务端判断是否是第一次请求,若是第一次请求,则tomcat中的JSP引擎中的文 ...

  4. Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识

    JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...

  5. JavaEE系列之(一)JSP基础知识详解

    一.JSP基础语法     1.JSP简介        JSP(Java Server Pages),其根本是一个简化的Servlet设计,它实现了在Java中使用HTML标签.JSP是一种动态网页 ...

  6. JSP基础笔记

    主要内容:1. JSP基础2. Cookie3. HttpSession ================================ JSP基础 1. jsp的作用: * Servlet: &g ...

  7. JavaWeb开发技术基础概念回顾篇

    JavaWeb开发技术基础概念回顾篇 第一章 动态网页开发技术概述 1.JSP技术:JSP是Java Server Page的缩写,指的是基于Java服务器端动态网页. 2.JSP的运行原理:当用户第 ...

  8. Java匹马行天下之JavaWeb核心技术——JSP

    JSP动态网页技术 一.JavaWeb简介 一.什么是JavaWeb? JavaWeb是用Java技术来解决相关web互联网领域的技术总称. 需要在特定的web服务器上运行,分为web服务器和web客 ...

  9. Servlet&jsp基础:第五部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. 单用户模式下连接被占用定位spid

    报错The database is in single-user mode, and a user is currently connected to it. 通过 select * from sys ...

  2. SVN和Git的异同

    其实Git和SVN还是挺像的,都有提交,合并等操作,看来这是源码管理工具的基本操作. 1. Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后 ...

  3. VIM 中鼠标选择不选中行号

    VIM 中鼠标选择不选中行号 在Vim中,我们一般会使用 :set nu 打开行号开关. 但是打开行号后,有个弊端,那就是在用鼠标进行选择的时候,会将前面的行号也一起进行拷贝了.但是在gVim中进行选 ...

  4. C#属性和变量的区别学习

    参考一   昨天看三层架构 (具体没怎么弄懂) 发现一般有一页代码专门用户存放字段的 而且都用用属性封装..令我诧异的是 很多字段属性都存在 get{}和set{} 和普通的变量没什么区别(可读可写) ...

  5. Linux之保留yum安装软件后的RPM包

    yum安装软件很方便,但是下载下来的rpm包在安装后默认会被删除掉: 如果希望保留yum安装的软件包该如何做呢? 设置方法: 将/etc/yum.conf里对应的keepcache参数改为1即可,然后 ...

  6. eclipse 设置jsp页面为HTML5

    window-preferences-web-jspFiles-Editor-Templates-jsp with html... 然后修改为<!DOCTYPE html>就行了

  7. ajax用法流程

    这里是用javascript做的一个ajax的一个用法以及总结概括.供友友们进行参考. 1 window.onload=function() { var oBtn=document.getElemen ...

  8. Android中插件开发篇之----类加载器

    关于插件,已经在各大平台上出现过很多,eclipse插件.chrome插件.3dmax插件,所有这些插件大概都为了在一个主程序中实现比较通用的功能,把业务相关或者让可以让用户自定义扩展的功能不附加在主 ...

  9. 从零开始学习jQuery(转)

    本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...

  10. 计算城市间的球面距离(C++实现)

    #include<iostream> #include<string> #include<cmath> #include<iomanip> using ...