JSP基础
JSP入门
(一)JSP简介:
JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
- 总结: jsp是使用java作为脚本语言的动态网页技术,jsp的本质是一个Servlet,但是jsp需要依赖tomcat服务器来动态的生成对应的html。
(二)创建JSP页面
- jsp页面编码的改变:
(三)JSP的执行原理
- 第一次访问
- 原理图:
- 执行原理:
- 1、将jsp文件翻译为java源文件,并将其命名为jsp文件名_jsp的java文件。
- 2、将生成的java文件编译成.class字节码文件
- 3、将字节码文件放入JVM进行运行
- 4、通过和Servlet一样的service方法将数据响应到客户端。
- 原理图:
- 第二到n次访问
- 原理图:
- 1、将翻译好的文件放入jvm进行运行
- 2、将需要呈现的页面数据响应到客户端
- 原理图:
- 查看jsp编译后的文件的方式:
- 1、找到部署项目的tomcat
- 2、找到tomcat虚拟工作空间work,找到对应的项目。
(四)JSP和Servlet的联系与区别
- 联系: servlet直接继承自HttpServlet,而jsp编译后的java文件也是一个servlet,也继承HttpServlet。
- JSP的本质就是一个Servlet
- 区别:
- 1、JSP主要作为视图层负责数据的呈现,而Servlet主要负责控制层,负责数据的获取和页面的跳转关系。
- 2、JSP中包含九大内置对象,而servlet中没有内置对象的概念。
- 3、jsp在创建时,是以html作为模板的,可以直接包含前端内容,但是运行时需要依赖tomcat服务器翻译成java文件,而Servlet就是java类。
- 4、jsp是一个简易的servlet,是动态页面技术,而servlet是一个完整的servlet类,包含servlet所有的功能。
JSP页面的组成
前端部分: html、css、js
Java代码
- java声明
- 语法: <%! 声明的java代码 %>
- 特点:jsp中java的声明存在于生成java文件的service方法的外面,类的成员变量的位置,不能直接使用,需要依赖java脚本或者表达式来使用。
- 主要用于定义全局变量或者是方法。
- 实例:
- java脚本
- 语法: <% java脚本; %>
- 特点:java脚本的位置相当于在servlet中的service方法中的代码片段;
- 可以定义局部变量。方法调用等代码片段。
- 实例:
- java表达式
- 语法: <%=输出内容 %>
- 特点: 对于jsp中的java表达式主要用于输出到客户端显示的内容,相当于 out.print(内容); 调用方法括号中的参数。
- 实例:
- 注意:表达式参数的末尾不能加分号;等号前后也不要加空格
JSP指令
- JSP页面有三大指令,每个指令负责不同页面的信息,主要包括Page指令、include指令、taglib指令。
- 语法:<%@ 指令名称 属性名1=“属性值1” 属性名2=“属性值2” %>
- Page
- 作用: 主要用于设置jsp页面的信息,包括页面编码,支持的脚本语言、导包等等。
- 语法: <%@ page import=“包名” errorPage=“错误页面地址” %>
- 实例:
- 常见page指令即作用:
- import: 导包
- contentType: 设置响应头响应数据MIME类型
- pageEncoding: 设置当前jsp页面编码
- errorPage:指定当前页面发生异常显示错误信息的页面
- 实例:
- 实例:
- isErroePaage: 设置当前jsp是否为错误,如果是true则可以接受错误信息,否则不接收错误信息。
- 实例:
- 实例:
- include
- 用于将其他页面包含在一个jsp页面中,即将多个页面整合为一个页面,好处减少编码,提高页面重复部分的复用率。
- 语法: <%@ include file=“包含的文件地址” %>
- 实例:
- 对于包含,是将多个页面使用include指令将多个页面整合在一起,然后在翻译成一个java文件。
- taglib
- 主要用于引入第三方标签库,如jstl
- 语法: <%@ taglib uri=“引入标签的地址” prefix=“前缀” %>
EL表达式
(一)EL简介:EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
语法格式: ${输出内容的名字 }
EL 主要从四大作用域中来获取数据。
(二)EL中的运算符
- 算术运算符:
- 可以参与运算的主要整数字和浮点型
- 逻辑运算:
- boolean型可以参与逻辑运算
- 条件运算符:
- 条件运算:对于大于等于、小于等于、大于、小于这些运算符只能是数字类型,而其他的条件运算符可以是任何类型。
- 空值的判断:
- 三目运算符:
- 数字类型
EL 表达式支持的类型:
(三)EL表达式的使用
-
1.el表达式来获取简单数据的值
-
2、对于javabean对象中数据获取:
-
3、数组中取值:
-
4、Map集合中取值:
-
[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:
u s e r . M y − N a m e 应 当 改 为 { user. My-Name}应当改为 user.My−Name应当改为{user[“My-Name”]}
如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
完善项目功能-查询
前端页面:
反射
概念:在程序运行过程中,通过类的字节码对象,可以获取该类的所有信息,通过字节码对象可以创建该类的对象,动态的调用类的方法和属性,这种动态的获取类的信息和调用方法的机制,称为java的反射机制。
作用:是框架的灵魂,主要用于在java运行时动态的创建对象和调用方法等。
类的字节码对象(类对象)
- 1、方法1》 Class<?> cla = Class.forName(“类的全类名”);
- 2、通过的类的通用属性class来获取类的类对象:
Class<? extends 类名> clas = 类名.class;
- 3、通过对象提供的通用方法getClass() 来创建类对象: Class<对象的类名> cla = 对象.getClass();
- 说明:三种方法获取同一个类的类对象,最后都指向同一个类的字节码文件创建的对象。即一个类只有一个类对象。
反射获取类的属性:
- 获取单个public修饰的属性的方法: Field filed =类对象.getField(“方法名”);
- 实例:
- 实例:
- 获取所有public修饰的属性: Field[] fields = 类对象.getFields();
- 非public修饰的属性的获取: Field filed = 类对象.getDeclaredField(“属性名”)
- 实例:
- 实例:
反射来操作类中的方法:
- public修饰的方法的操作
- 实例:
- 实例:
- 非public修饰的方法的操作:
- 实例:
- 实例:
使用反射改造项目多方法请求
步骤
- 1、获取接收请求servlet的类的类对象
- 2、通过反射获取请求进入servlet中需要执行的方法,通过请求中先获取要执行方法的名字
- 3、通过反射来调用方法
BaseServlet的创建:
UserServlet的创建:
完善项目功能-删除
步骤:
- 1、在主页面通过a标签设置删除的入口
- 2、点击删除实现删除的请求时,携带删除用户的编号。
- 3、进入Servlet实现删除,删除继续跳转到主页面。