zoukankan      html  css  js  c++  java
  • 自学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完成删除功能,并刷新显示列表页面数据。

     

     

  • 相关阅读:
    Raspberry Pi + ArchLinux:网络dhcp不稳定,经常无法获取IP地址
    Chromium OS相比Chrome OS缩水的地方
    ssh config配置更新
    ktouch w619: Dump boot.img和system.img,然后做成recovery可用的刷机zip包
    mmap: invalid argument & MAP_PRIVATE
    Ubuntu 12.04 fcitx已经可以aptget,并且默认是是Google拼音的词库
    epoll_create, epoll_ctl和epoll_wait 实例讲解
    VM上安装Redhat无法选包
    关于Segmentation fault (core dumped)几个简单问题的整理
    Linux字符串转换函数汇总
  • 原文地址:https://www.cnblogs.com/masterhxh/p/13711195.html
Copyright © 2011-2022 走看看