慕课网《JAVA遇见HTML——JSP篇 第二章 JSP基础语法》学习笔记
备注:课程网址:https://www.imooc.com/learn/166
2-1:JSP简介
JSP全名为Java Server Pages,Java 服务器端 页面,其根本是一个简化了的Servlet设计,他实现了在Java中使用HTML标签。JSP是一种动态网页技术标准,也是JavaEE的标准。JSP与Servlet一样,是在服务器端执行的。
2-3:JSP页面元素简介及page指令
JSP页面元素构成:指令、表达式、小脚本、声明、注释、静态内容。
JSP指令,共3种。
(1)page指令,通常位于JSP页面的顶端,同一个页面可以有多个page指令。
(2)include指令,将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句。
(3)taglib指令,使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
page指令语法:
<%@ page 属性1=“属性值” 属性2=“属性值1,属性值2”... 属性n="属性值n" %> 备注:@和page之间需要有一个空格。
属性 | 描述 | 默认值 |
language | 指定JSP页面使用的脚本语言 | Java |
import | 通过该属性来引用脚本语言中使用到的类文件 | 无 |
contentType | 用来指定文件类型和JSP页面所采用的编码方式 | text/html,ISO-8859-1 |
text/html,表明它是一个文本文件,并且是一个网页。默认字符集是一个纯英文的字符集,ISO-8859-1。
2-5:JSP注释
HTML注释:<!--HTML注释--> //客户端可见(可以通过客户端浏览器的查看源代码,来查看到)
JSP注释:<%--JSP注释--%> //客户端不可见
JSP脚本注释:在JSP脚本中使用Java的注释方式,//单行注释 /*多行注释*/ 客户端不可见
2-7:JSP脚本
JSP脚本元素,就是指,在JSP页面中能够执行的Java代码,我们把这些代码写在JSP标签里,称为JSP脚本。
语法:
<% Java代码 %>
out.println("大家好,欢迎大家学习JavaEE开发。");通过JSP的一个内置对象out对象,给浏览器输出一句话。
2-8:JSP声明
JSP声明元素,是指在JSP页面中定义变量或者方法。
语法:
<%! Java代码 %>
百分号后面加上感叹号!,表示这是一个声明语句,后面加上一些Java代码。这些Java代码可以是定义一个变量,也可以是定义一个方法,以方便页面以后的JSP脚本来调用前面声明的变量或者方法。
<%!
String s = "张三"; //声明了一个字符串变量
int add(int x, int y){ //声明了一个函数
return x+y;
}
%>
2-9:JSP表达式
JSP表达式:在JSP页面中执行的表达式。
语法:
<%=表达式 %> //注意:表达式不以分号结束
你好,<%=s %><br>
x+y=<%=add(10, 5) %><br>
2-10:JSP页面生命周期
这是本章《JSP语法》的重点:JSP页面的生命周期。
JSP页面的声明周期大体上分为几个步骤。
首先我们假设用户使用客户端浏览器向服务器发送一个请求,比方说他要访问我们服务器Web项目的首页index.jsp。我们把这称为用户向服务器发送了一个请求,请求访问index.jsp这个网页资源。
服务器接收到用户的请求之后,首先要判断用户所访问的这个资源是否是第一次请求。
如果是第一次请求,那么我们的Tomcat的JSP引擎把该JSP文件转换成为一个Servlet,一个Servlet从本质上而言,他也是一个Java类。这个Java类就要经过编译,生成一个字节码文件,然后执行这个类中的jspInit()这么一个初始化方法。特别要注意,这个初始化方法,只是在编译生成对应的字节码文件时,才执行。也就是说在整个这个声明周期中,他只执行一次。
如果不是第一次请求,那么他就直接去访问所生成的字节码文件。
然后去解析执行这个类当中的一个叫做jspService()这个方法。jspService()方法,是用来处理用户请求的。
详细解释:
jspService()方法被调用用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。是一种基于多线程的处理方式。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步问题,比如会引发的像一些临界资源的共享和保护问题。由于该Servlet始终驻于内存,所以响应是非常快的。
实例学习:
新建项目JspLifeCycleDemo,并新建index1.jsp。并添加到tomcat服务器,启动服务器。
连按两下ctrl键,用listary软件搜索index1_jsp。(若编译生成字节码文件,名字会是index1_jsp.java和index1_jsp.class)
没有。原因是,服务器还没有接收到用户的请求,即从来没有被访问过。不会有JSP页面index1.jsp经过编译生成的Servlet字节码文件。
访问JspLifeCycleDemo项目中的index1.jsp资源:
再次全电脑搜索index1_jsp,可以看到,被编译成字节码文件了:
tomcat目录结构,其中非常重要的一个目录是work,里面保存的是编译生成的字节码文件。
打开index1_jsp.java。
里面有_jspInit(),初始化方法,只在jsp页面初次被请求时,才执行。
然后,servlet常驻于内存。再针对用户每一个请求,再创建一个线程。由每一个线程再去执行它的一个叫做_jspService()的方法。对于用户而言,就是用户的每一个请求,都去调用_jspService()方法来处理用户的请求。
上述是JSP页面的生命周期。
当JSP页面内容发生变化后,JSP引擎需要重新编译页面。
实例验证:
修改index1.jsp:
刷新网页:
然后可以看到,index1_jsp.java和index1_jsp.class两个文件的修改日期变成了现在的时间。
说明这个类被重新编译过了。打开index1_jsp.java,可以看到里面包含了我们最新的代码:
2-11:阶段项目
分别使用表达式和脚本实现打印九九乘法表。
需要抛出异常:
成功。