序:

  从实现到现在一直是以.net为主,但偶尔也会参与一些其他语言的项目。最近需要对一个Java Web项目进行二次开发,一直没学习过JSP所以买了几本书自学试试。参考资料为《轻量级Java EE企业应用实战(第4版)》。

 开发环境:

  系统版本:win7 x64

  JDK版本:1.8

  IDE版本:Eclipse Java EE IDE for Web Developers(Version: Mars.1 Release (4.5.1))

  Tomcat版本:8.0

 1.1、JSP的基本原理:

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

  由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,这的确让人不胜其烦。JSP的出现弥补了这种不足,JSP通过在标准的HTML页面中嵌入Java代码,其静态的部分无需Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才使用Java脚本控制。

  从上面的介绍可以看出,JSP页面的内容由如下两部分组成。

  (1)静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同。

  (2)动态部分:受Java程序控制的内容,这些内容有Java脚本动态生成。

  注:自己为初学者没有资格总结这些原理性内容,故上文引入为参考书

 1.1.1、经典的入门代码Hello World:

  

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
     pageEncoding="ISO-8859-1"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>Hello World</title>
 </head>
 <body>
     <%
         out.print("Hello World!");
     %>
 </body>
 </html>

  <%和%>中间包裹的就是Java代码,out为JSP的内置对象。out.print为向HTML中输出置顶的内容,审核元素可以发下一下内容:

  

  JSP页面的本质是Servlet(一个特殊的Java类),故每个页面都是一个Servlet实例,JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。

  总结:

    (1)JSP文件必须在JSP服务器内运行。

    (2)JSP文件必须生成Servlet才能执行。

    (3)每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。

    (4)JSP页面的访问者无需安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输出到客户端的是标准的HTML页面。

 1.2、JSP的4种基本语法:

 

 1.2.1、JSP注释:

  JSP的注释是不通过HTML输出到客户端的,也就是说客户端服务通过审核元素查看到JSP注释。JSP注释格式为<%-- JSP注释内容 --%>

  与之对应的为HTML注释,两者相比HTML注释客户端可以通过审核元素查看注释内容。HTML注释格式为<!-- HTML注释内容 --!>

 

 1.2.2、输出JSP表达式:

  

 <%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>输出JSP表达式</title>
 </head>
 <body>
     <%!
         private String sayHello(){
             return "Hello World!";
         }
     %>
     <p>sayHello:<%=sayHello() %></p>
 </body>
 </html>

  通过<%=和%>输出Java表达式的值。需要注意的是上文中定义的sayHello();是通过<%!和%>包裹的。并且输出表达式愈发后不能有分号。

  <%! 声明语句 %>:通常声明全局变量、常量、方法、类

  <% java代码 %>:其中可包含局部变量、java语句

  <%=java代码 %>:输出Java表达式

 1.3、JSP的3个编译指令: 

  page:该指令是针对当前页面的指令

  include:用于置顶包含另一个页面

  taglib:用于定义和访问自定义标签

  使用编译指令的语法格式:<%@ 编译指令名 属性名="属性值" ... %>

 1.3.1、page指令:

  page指令通常位于JSP页面的顶端,一个JSP页面可以使用多条page指令。page指令的属性如下:

  language:声明当前JSP页面使用的脚本语言的种类,因为页面是JSP页面,该属性的值通常都是Java,该属性的默认值也是java,所以通常无须设置。

  extends:指定JSP页面编译所产生的Java类所继承的父类,或所实现的接口。

  import:用来导入包。下面几个包是默认自动导入的,不需要显示导入。默认导入的包有:java.lang.*、javax.servlet.*、javax.serlet.jsp.*、javax.servlet.http.*。

  session:设定这个JSP页面是否需要HTTP Session。

  buffer:置顶输出缓冲区的大小。输出缓冲区的JSP内置对象:out用户缓存JSP页面对客户浏览器的输出,默认值为8KB,可以设置成none,也可以设置为其他的值,单位为KB。

  autoFlush:当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true时为正常输出;如果设置成false,则会在buffer溢出时产生一个异常。

  info:设置该JSP程序的信息,也可以看做其说明,可以通过Servlet.getServletInfo()方法获取该值。如果在JSP页面中,可直接调用getServletInfo()方法获取该值。因为JSP页面的实质就是Servlet。

  errorPage:置顶错误处理页面。如果本页面产生了异常或者错误,而该JSP页面没有对应的处理代码,则会自动调用该属性所制定的JSP页面。

  isErrorPage:设置本JSP页面是否为错误处理程序。如果该页面本身已是错误处理页面,则通常无须置顶errorPage属性。

  contentType:用于设定生成网页的文件格式和编码字符集,即MIME类型和页面字符集类型,默认的MIME类型是text/html;默认的字符集类型为ISO-8859-1。

  pageEncoding:指定生成网页的编码字符集。

 1.3.2、include指令:

  使用include指令,可以将一个外部文件潜入到当前JSP文件中,同时解析这个页面中的JSP语句。这是个静态的include语句,它会把目标页面的其他指令也包含进来,但动态include则不会。include既可以包含静态的文本,也可以包含动态的JSP页面。静态的include编译指令会将被包含的页面加入本页面,融合成一个页面,因此被包含页面甚至不需要是一个完整的页面。include编译指令语法:<%@include file="relativeURLSpec" %>。

  如果被潜入的文件经常需要改变,建议使用<jsp:include>操作指令,因为它是动态的include语句。

  <%include file="a.jsp"%>:是在编译时加入,所谓静态,就是在编译的时候将a.jsp的代码加入进来在编译,之后运行。
  <jsp:include page="a.jsp"/>:是在运行时加入,所谓动态,就是单独编译,在运行时候加入进来,之后显示,这种include,可以传递参数。

  注:静态包含还会将被包含页面的编译指令也包含进来,如果来年哥哥页面的编译指令冲突,那么页面就会出错。

 尾:

  上文叙述性的东西比较多,大部分引自序中提到的参考书。还有部分是通过搜索引擎查询得到的。

【JSP】JSP基础学习记录(一)—— 基础介绍以及3个编译指令的更多相关文章

  1. 学习记录-java基础部分(一)

    学习记录-java基础部分(一) 参考:GitHub上的知名项目:javaGuide : https://github.com/Snailclimb/JavaGuide/blob/master/doc ...

  2. MVC+Ext.net零基础学习记录(五)

    继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...

  3. MVC+Ext.net零基础学习记录(四)

    在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...

  4. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  5. 【JSP】JSP基础学习记录(二)—— JSP的7个动作指令

    2.JSP的7个动作指令: 动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作.编译指令在将JSP编译成Servlet时起作用:而处理指令通常可替换成JSP ...

  6. 【JSP】JSP基础学习记录(三)—— JSP的9个内置对象

    本节说一下JSP中的9个内置对象.这9个内置对象都是Servlet API接口的实例,只是JSP规范对他们进行了默认初始化(由JSP页面对应Servlet的_jspService()方法来创建这些实例 ...

  7. python核心编程学习记录之基础知识

    虽然对python的基础知识有所了解,但是为了更深入的学习,要对python的各种经典书籍进行学习 第一章介绍python的优缺点,略过 第二章介绍python起步,第三章介绍python基础,仅记录 ...

  8. [Django]模型学习记录篇--基础

    模型学习记录篇,仅仅自己学习时做的记录!!! 实现模型变更的三个步骤: 修改你的模型(在models.py文件中). 运行python manage.py makemigrations ,为这些修改创 ...

  9. Springboot学习记录1--概念介绍以及环境搭建

    摘要:springboot学习记录,环境搭建: 官方文档地址:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/ht ...

随机推荐

  1. Delphi Mac App 名称支持国际化多语显示

    作用:在 OSX 图标下方显示 App 中文繁体或简体的名称(系统自动选取) 适用:XE7, XE8 for OSX 操作: 创建一个新工程. 在工程目录下创建二个文件夹(zh_??.lproj)文件 ...

  2. Centos压缩与打包

    这个虽然是基础知识,但是有些东西就是这样,久了没用,就会忘记,而且之前有一个坏习惯就是不喜欢做笔记,以后学习了行东西一定要记录在博客,这样以后自己也能时不时的查看一下. 言归正传,在计算机的世界中,数 ...

  3. 《高可用MySQL》1 – Windows环境下压缩版MySQL安装

    近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天 ...

  4. Java继承和接口

    接口最关键的作用,也是使用接口最重要的一个原因:能上溯造型至多个基础类.使用接口的第二个原因与使用抽象基础类的原因是一样的:防止客户程序员制作这个类的一个对象,以及规定它仅仅是一个接口.这样便带来了一 ...

  5. Node.JS文件系统解析

    1.Node.js 文件系统 var fs = require("fs") 2.异步和同步 读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFile ...

  6. 在腾讯云上面搭建WordPress博客网站

    一.准备工作 我们使用腾讯云服务器来运行WordPress,腾讯云会给新用户七天的产品体验时间还有一些代金券,做为新手尝试成本是比较小的. 腾讯云长期举办 "云+校园" 活动,学生 ...

  7. Oracle - ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 解决

    java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:list ...

  8. MetricGraphics.js – 时间序列数据的可视化

    MetricsGraphics.js 是建立在D3的基础上,被用于可视化和布局的时间序列数据进行了优化.它提供以产生一个原则性的,一致的和响应式的方式的图形常见类型的简单方法.该库目前支持折线图,散点 ...

  9. 记录一下dotnetcore.1.0.0-VS2015Tools.preview2安装不上的问题

    错误提示:未指定错误 解决方案: 从这里下载:https://visualstudiogallery.msdn.microsoft.com/32f1fa1b-cdd5-4bd3-8f51-cd8f09 ...

  10. 什么是REST?

    云计算的时代越来越多的提到一个词REST,那么什么是REST?如果你还不清楚,可以看这个视频和系列教程: http://www.restapitutorial.com/lessons/whatisre ...