自学JSP技术(上)

JSP技术

一、JSP入门

(一)JSP简介

 

 

 

 

JSP全称是Java Server pages, 简称Java服务器页面;

它是建立在servlet的规范之上的动态网页技术, jsp文件中, HTML代码和Java代码共存;

其中HTML代码用来展示静态资源内容, Java代码展示动态内容;

为了与传统的HTML页面有所区别, JSP文件的后缀名为.jsp;

(二)创建JSP页面

JSP属于前端资源, 替代HTML页面

所以我们的JSP页面要创建到WebContext

 

 

 

 

 

 

 

 

如何修改编码问题?

 

 

 

 

 

 

 

 

(三)入门案例

 

 

 

 

Jsphtml的区别:

  1. Html只能展示静态资源, 不能写java代码
  2. Jsp页面不仅可以写静态资源代码. 还可以写java代码

JSP=Java+HTML;

(四)JSP的执行原理

一个jsp页面的执行过程需要经历以下三个阶段:

  1. 翻译阶段: 先将jsp页面通过tomcat服务器先翻译成一个.java文件(源文件), servlet文件
  2. 编译阶段: .java文件编译成.class文件
  3. 执行阶段: 执行.class文件

如何响应数据?

 

 

 

 

问题:

每次执行jsp文件, 都需要经过翻译, 编译, 和执行么?

答案: 不是的

Jsp页面只有第一访问时, 才会经历以上三个阶段, 但是没有修改源码的情况下再次进行访问时, 就不会再经历前两个阶段, 只会进行执行.class文件;

一旦更改了jsp文件源码, 就需要重新经历以上三个阶段;

因此, 第一次访问时速度较慢, 后边再访问时速度较快;

(五)JSPServlet的联系与区别(面试题)

联系: jsp文件的本质就是一个servlet

区别:

  1. Jsp动态网页, 它擅长的是视图层, servlet的擅长的是表现层
  2. Jsp有九大内置对象的, servlet没有内置对象
  3. Jsp不是一个完整的servlet, 需要借助于tomcat将文件翻译成.java文件;servlet纯粹就是一个类

二、JSP页面组成

组成部分:

  1. 前端资源: html, css, js
  2. Java代码: 脚本, 表达式, 声明
  3. 指令: page   include   taglib(三大指令)
  4. 注释

(一)JSP页面中的java代码

1. 脚本

语法:<% Java代码 %>

 

 

 

 

翻译后在java文件的位置:  _jspService方法中

 

 

 

 

2. 表达式

语法:<%=java要输出的值 %>

其作用就是在Jsp页面中输出变量的值。

 

 

 

 

翻译后在java文件的位置:  _jspService方法中

 

 

 

 

3. 声明

JSP声明后会将你声明的变量或方法转化java代码后当成成员变量或成员方法

语法:<%! 内容  %>

 

 

 

 

翻译后在java文件的位置:  在成员位置(成员方法或者成员变量)

4. 注释

l Html注释: <!--  html内容  -->

l Java注释: //   或者  /**/

l Jsp注释: <%--  注释内容   --%>

 

 

 

 

注意:

Jsp注释不会在源码中展示, 只会显示html的注释

(二)JSP指令

Jsp指令包含三大指令:

Page指令(描述页面), include指令(页面包含), taglib指令(表达式的引入)

  1. Page指令: 所要设置的页面的基本信息

Language:定义页面的语言

contentType: 定义页面的返回类型

pageEncoding: 定义页面的编码格式

还可以定义错误信息, 错误页面, 导入包(Java代码);

 

 

 

 

 

 

 

案例:

导包案例:

 

 

 

 

错误页面和错误信息的案例:

 

 

 

 

 

 

注意: 本质上不会在jsp页面中写Java代码(不推荐)

  1. Include指令(页面包含属于静态包含)

页面包含: 说的是一个页面中可以包含另外一个页面, 并且胡那可以正常运行并加载;

应用场景:

头部:

 

 

 

尾部:

 

 

 

写法格式:

<%@include  file=”被包含页面名称”%>

案例:

 

 

 

 

 

 

 

 

 

  1. Taglib指令(表达式的引入)

后边使用时详细再说, 配合JSTL表达式一起使用

写法格式:

<%@taglib prefix="前缀" uri="表达式的地址" %>

 

 

 

三、EL表达式

(一)EL简介

El表达式: 是表达式语言, 目的: 就是为了使用jsp写起来更加简单, jsp代码更加简化;

写法格式: ${el表达式  }

其中: el表达式有很多形式: 变量  对象的属性  集合等

注意: el表达式只能在作用域对象中来获取数据

回顾下:

Servlet三大作用域对象: request   session   servletContext

Jsp的四大作用域对象: pageContext  request  session  application

(二)EL的入门案例

 

 

 

(三)EL中的运算符

 

 

 

  1. 算术型(+ - * /div %mod

 

 

 

  1. 逻辑型和关系型(&& || !  > >= < <= !=

 

 

 

  1. 条件型(?:)相当于三元运算符

 

 

 

  1. (empty)用来判断EL表达式是否为空,如果返回值为true表示为空,如果为false表示非空。

 

 

 

(四)EL表达式的使用

1. 取变量的值

 

 

 

  1. String[]数组

 

 

 

  1. List集合

 

 

 

  1. map集合

 

 

 

  1. 取对象属性的值

 

 

 

四、完善项目功能-查询

案例需求:

学生信息管理系统项目的基础上,继续完善查询学员列表功能,修改项目业务逻辑,当登录成功时跳转到index.jsp页面,并在显示列表页面中添加新增学员链接,当点击“添加新学员”时跳转到insert.jsp页面(将原来的HTML页面都改成JSP页面),如下图所示:

 

 

 

 

五、反射

反射是一个框架的灵魂。在程序运行过程中,可以对任意类型进行任意的操作。

例如:加载任意类型、调用类型的任意方法、获取任意的成员变量、构造方法,可以创建该类型的对象。这种动态获取信息以及动态访问成员的方式称为反射

(一)获取类的字节码对象

要想获取和操作类中的成员(属性、方法),首先要获取类的字节码对象(也称为.class对象),都是Class类型的对象。

获取类的字节码对象有三种方式:

1、对象名.getClass():返回的是某个引用指向的具体对象所属的运行类的字节码对象。获取到的是那个真正用来创建对象的子类的字节码对象。

2、类名.class:如果已经有了类名,可以通过.class的方式获取这个类的字节码对象。

3、通过Class.forName(String className)Class类中一个静态方法forName,传入一个类的全类名,将类名描述的字节码文件,加载到内存中,形成一个字节码对象。例如:Class.forName("com.mysql.cj.jdbc.Driver")加载JDBC驱动,实质就是通过Driver类的全类名,将该类加载到内存中,并形成该类的字节码对象。

 

 

 

注意:

无论通过哪种方式获取到字节码对象, 都是指向的是同一个引用;

以上三方式哪种使用最多(推荐使用class.forName())

(二)Class类中的方法

一旦获取了类的字节码对象,就可以使用这个对象的所有方法,这些方法都定义在Class类型中。

通过这些方法可以获取类的所有信息:成员变量、成员方法、构造方法、内部类、类所在的包、类的修饰符等。这些内容获取后,又是一些对象,有专门的数据类型,描述这些对象

1、获取类中的成员变量

1)通过Class类中的:getField(String propertyName)

  参数列表:属性的名称

  返回值类型:Field,表示一个成员变量对象所属的类型

2Field类型:表示一个成员变量类型,每个对象都是一个具体的成员变量

  作用:获取成员变量的各种信息(修饰符、名称等)

  赋值:set(Object obj, Object value),给obj对象赋value

 

 

 

 

 

 

2、获取类中的成员方法

1)通过Class类中:getMethod(String methodName,  Class...paramTypes)

  参数列表:methodName表示方法名称,paramTypes表示参数列表的数据类型

  返回值类型:Method,表示一个成员方法对象所属的类型

2Method类型:表示成员方法的类型,该类型的每个对象,都是一个具体的成员方法

  作用:获取成员方法信息(方法的修饰符、方法的返回值类型、方法的名称、方法的参数等)

  其中,最重要的一个方法,就是该方法的执行:invoke(Object obj, Object...values)

 

 

 

六、使用反射改造项目多方法请求

 

 

 

七、完善项目功能-删除

index.jsp页面中操作“删除”链接,当单击删除链接时,跳转到后台的Servlet完成删除功能,并刷新显示列表页面数据。

 

 

 

posted @ 2020-09-22 11:49  master_hxh  阅读(256)  评论(0编辑  收藏  举报