慕课网《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:阶段项目

分别使用表达式和脚本实现打印九九乘法表。

 

 

 

 

需要抛出异常:

 

 

 

 成功。

 

posted on 2019-10-13 19:52  平凡力量  阅读(246)  评论(0编辑  收藏  举报