java补完——JSP(声明&脚本&指令&动作元素)和代码简化(EL表达式、JSTL标签)

文章说明:黑色字体-已知,蓝色字体-所见即所得,红色字体-还需要再找资料弄明白的,黄色背景-提炼关键信息
参考资料:很多参考资料,段落下有原文链接到原作者
声明:JSP简介和JSP发展史写的太过复杂,都是废话,JSP就是一个可以写HTTP标签和JAVA代码的JSP文件,运行时被tomcat转换成一个继承HttpServlet的类,看JSP之前看下sevlet,然后看JSP动作&指令&内置对象,内置对象结合HTML协议看。EL和JSTL是为了简化JSP的JAVA代码。
JSP体系结构图:https://blog.csdn.net/qq_41933149/article/details/99666675

JSP简介

  • HTTP:静态页面
    固定不变的页面。(直接从服务器发送给用户写好的页面。)
    用来描述网页,是标记语言,而非编程语言。
    直接运行。可直接打开。

  • JSP(Java Server Pages):动态页面。与ASP(微软的动态页面技术)类似。
    显示内容因人而异。(通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。)
    是网页编程语言。
    运行时转换成servlet。需要发布到服务器。需要JDK编译。
    表头<%@ page language=”java” import=”java.util.*” pageEncoding=”gbk”%>在表头中有编码格式和倒入包等。

  • JSP使用
    servlet也是动态页面实现技术,JSP解决了servlet的缺陷(需要配置,向网页输出HTML页面内容困难),本质也是一个servlet。
    在标签<%和%>之间插入java代码。
    JSP在后台通过服务器解析为相应的html,然后在供浏览器识别显示。
    JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。

JSP发展史

  • JSP的出现为了解决Servlet在响应时不适合向外输出页面的问题
    Servlet适合处理逻辑,处理的结果太适合由Servlet向外输出(不适合输出完整的html页面)。
    Html展示数据。本质是一个文档(静态资源),无法展示动态的数据。
    jsp适合编写html代码、作为响应页面向外输出,同时可以写java代码、展示动态的数据。
    jsp在第一次访问时,被翻译成Servlet,访问jsp后看到的页面,是翻译后的Servlet在向外输出。
  • JSP的第1代开发技术:纯JSP技术
  • JSP的第2代开发技术:JSP+EJB
  • JSP的第3.1代开发技术(MVC):JSP+servlet+EJB(Model1)
  • JSP的第3.2代开发技术(MVC):JSP+servlet+JavaBean+service(Model2)
  • 各版本详细实现代码:https://blog.csdn.net/qq_34928644/article/details/82556284

JSP应用

JSP生命周期

1、由JspServlet(JSP引擎)翻译成java源文件
2、由容器编译成class文件
3、创建对象
4、jspInit()方法初始化
5、jspService()方法提供服务
6、jspDestroy()方法销毁
7、卸载

JSP脚本元素

会被编译到JSP生成java的类中,其他的会放到_jspService方法中。

  • JSP声明语句:声明变量和方法,内容转换成Servlet类中的成员变量,在整个JSP页面有效。<%! 变量或方法定义 %>
  • JSP表达式:表达式必须能够求值,且计算结果会以字符串形式显示在客户端。
    <%= 表达式 %>
  • JSP Scriptlets:变量、方法、表达式等内容。<% java代码 %>

JSP注释

<!-- -->:注释HTML代码片段。页面显示。
<%-- --%>:注释所有代码片段。页面不显示。

JSP指令

作用:用于配置JSP页面,导入资源文件。
格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 … %>
page:用于定义JSP文件的全局属性。在一个JSP页面中Page指令可以出现多次,但每个属性只能出现一次,重复的属性会覆盖先前的设置。

  • contenType:等同于response.setContentType()。
    设置响应体的mime类型以及字符集
    设置当前JSP页面的编码(高级IDE,如果是低级编译器,需要设置 pageEncoding 属性来设置字符集)
<%@ page contentType="MIME类型"; charset=字符编码%>
//一般情况下使用为:
<%@ page contentType="test/html"; charset=gb2312%>
  • import:导包。
<%@ page import = "包名.类名" %>
<%@ page import = "包名.* " %>
<%@ page import = "包名.类名,包名2.类名" %>
  • pageEnCoding:属性设定字符集。
    语法:<%@ page pageEncoding = “编码类型”%>
    示例:<%@ page pageEncoding = “GBK”%>
  • errorPage:当前页面发生异常后,会自动跳转到指定的错误提示页面。
    isErrorPage:标识当前页面是否为错误页面。
    true:是,可以使用内置对象 exception
    false:否,默认值,不可以使用内置对象 exception
<%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="pageTest2_error.jsp" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>

include:在JSP编译时插入一些包含文件(JSP、HTML、文本、Java程序),包含的过程为静态的。包含的文件会被解析为JSP文本,因此包含的文件必须符合JSP语法。
语法:<%@ include file=“文件名”%>
include指令只有唯一的一个file属性,它是指被包含的文件,文件使用相对路径,
相对路径以斜杠/开头,是相对于Web应用程序文档根目录的路径,假如不用斜杠/开头,则相对于当前JSP文件的路径。
注意:
当外部引入的页面与本页面有相同的变量时,由于include等价于代码复制,所以会报错
被包含的页面与主页面共享所有的隐含变量 所以它们可以相互访问数据。
被包含页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>include测试页面</title>
</head>
<body>
<hr>
<center>
公司电话:010-89574895,欢迎来电!
</center>
</body>
</html>

包含的页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>include包含其他页面进来</title>
</head>
<body>
<%
    out.print("欢迎来到本系统!");
%>
<br>
<%@ include file="info.jsp"%>
</body>
</html>

转换单元
在JSP页面使用<%@ include file=“info.jsp”%>指令将另外的页面的内容包含到本页面时,容器会将被包含的页面的内容插入到产生的页面实现类中,这些被转换成单个页面实现类 的页面集合称为转换单元。
注意:
page指令影响整个转换单元
在一个转换单元中一个变量不能多次声明
taglib:JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
语法:<%@ taglib uri=“uri” prefix=“prefixOfTag” %>
uri属性确定标签库的位置,prefix属性指定自定义标签的前缀。

JSP动作元素

在请求处理阶段起作用,由XML语法写成。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
动作元素只有一种语法,它符合XML标准:<jsp:动作 属性=“value” />
JSP基本动作包括
1、<jsp:include>:在页面请求时引入一个文件
<jsp:include page=”relative URL” flush=”true|false”/>
Page属性:被包含文件地址
Flush属性:缓冲区满时是否清空,默认false.
2、<jsp:forward>:把请求转到一个新的页面。
<jsp:forward page=”转向页面的URL地址”/>
3、<jsp:param>
<jsp:param name=”参数名字” value=”指定给param的参数值”/>
4、<jsp:plugin>:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
可将服务器端的JavaBean或Applet下载到客户端执行
5、<jsp:useBean>:寻找或者实例化一个JavaBean。
<jsp:useBean id=”beanInstanceName”class=”classsname” scope=”page|request|session|application”/>
Id:指定JavaBean的实例名;
Class: 指定JavaBean的全限定类名;
Scope:
Page:实例在当前页面有效;
Request:实例在本次请求有效;
Session:实例在本次session内有效;
Application:实例在本应用内一直有效
该动作元素中常包含有<jsp:setProperty>动作元素,用来设置Bean属性值
6、<jsp:setProperty>:设置JavaBean的属性。
<jsp:setPropertyname=”beanInstanceName” property=”propertyName” value=”value” />
Name:JavaBean实例名
Property:实例中属性名
Value:为属性设置的值
7、<jsp:getProperty>:输出某个JavaBean的属性。
<jsp:getProperty name=”beanInstanceName” property=”propertyName”/>
Name:JavaBean实例名
Property:实例中属性名

EL表达式

定义:Expression Language(表达式语言),主要替换和简化JSP页面中的java代码。
语法:${表达式}
忽略JSP中所有EL表达式的指令:isElignored=“true”
忽略当前的EL表达式:\${表达式}
EL使用
1、运算符

  • 算数运算符:+ - * /(div) %(mod)
  • 比较运算符:> < >= <= == !=
  • 逻辑运算符:&&(and)||(or)!(not)
  • 空运算符:empty
    ${empty str}:判断字符串,集合数组对象是否为null或者长度是否为 0
    ${not empty str}:判断字符串、集合、数组对象是否不为null且长度大于 0

2、获取值

  • EL 表达式只能从域对象中获取值。
  • 格式:
${域名称.键名}<!--从指定的域中获取指定的键值。-->

域——对应的域名称
pageContext——pageScope
request——requestScope
session——sessionScope
application——applicationScope

${键名}<!--表示依次从最小的域中查找是否有该键对应的值-->
  • 获取对象:${域名称.键名.属性名}
    本质上是调用Javabean中的getter方法
  • 获取 List 集合:${域名称.键名[索引]}
    获取 Map 集合
    ${域名称.键名.key名称}
    ${域名称.键名[“key名称”]}

3、隐式对想
EL表达式中有11个隐式对象,主要说pageContext。
pageContext主要功能有:
获取 JSP 其他八个内置对象

JSTL标签

JSTL 标签(JavaServer Pages Tag Library),即JSP标准标签库,是由 Apache 组织提供的开源免费的JSP标签,主要是用来简化和替换JSP页面上的Java代码,具体使用步骤如下:
导入jstl相关jar包
引入标签库:taglib指令引入:<%@ taglib %>
使用标签
1、if 标签
属性:test 属性,为必须属性,接受 boolean 表达式
一般情况下,test属性值会结合 EL 表达式一起使用
if 标签没有else情况,如果想要else效果,可以定义多个 if 标签
2、choose 标签
choose 标签就相当于switch 语句,switch 需要配合 case、default 来使用,而choose则需要配合when、otherwise 来使用
使用choose标签声明:相当于 switch 声明
使用 when 标签做判断:相当于 case
使用 otherwise 标签做其他情况的声明:相当于default
3、 foreach 标签
【1】完成重复操作
属性
begin:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
index:容器中元素的索引,从 0 开始
count:循环次数,从 1 开始
【2】遍历容器
属性
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从 0 开始、
count:循环次数,从 1 开始

原文链接:https://blog.csdn.net/yangdan1025/article/details/82153426
原文链接:https://blog.csdn.net/weixin_41704733/article/details/79980487
原文链接:https://blog.csdn.net/One_L_Star/article/details/100520438
原文链接:https://blog.csdn.net/super_longyu/article/details/48844937
原文链接:https://blog.csdn.net/j174zhp/article/details/103604271
原文链接:https://blog.csdn.net/weixin_42452726/article/details/101033694
原文链接:https://blog.csdn.net/qq_39588003/article/details/103682384

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值