jsp网页 JSP 执行
jsp网页 JSP 执行
jsp网页 JSP 执行
jsp网页 JSP 执行
jsp网页 JSP 执行
jsp网页 JSP 执行
jsp网页 JSP 执行

目录

JSP概述 JSP 介绍

由SUN公司提供的动态web资源的研发科技,看起来非常像html懂球帝APP,但是可以在JSP页面中写java代码。

所以JSP是一种动态web资源研发科技。

JSP本质上就是一个Servlet。

思考:JSP技术造成的缘由?(了解)

JSP的发生是为了缓解Servlet在响应时不合适向外输出完整页面、以及解决html无法展现动态数据的问题

(1)Servlet本质上是一段java代码懂球帝,非常合适处理逻辑,但是处理的结果不太适合由Servlet向外输出(不合适输出完整的html页面)。

(2)HTML是用于研发网页的一门技术jsp网页,可以拿来展示数据。但是HTML开发起来的页面本质上就是一个文档(静态资源),无法展现动态的数据。

(3)JSP非常适合编写HTML代码,适合作为响应页面向外输出,同时JSP里可以写java代码,也可以展现动态的数据。所以JSP的发生又可以缓解Servlet不适宜向外响应一个完整的页面又可以解决html无法展现动态数据的问题。

JSP 执行过程

通过浏览器访问一个JSP文件,很多人会误以为,服务器是直接将JSP文件响应给浏览器,浏览器直接解读JSP从而显示网站内容。

这个理解的出错的! 因为JSP中包括JSP特有的元素,并且其中可能会包含Java代码,这些内容浏览器是能够解读的。

JSP的执行过程图解:JSP在第一次访问时jsp网页,会被翻译成一个Servlet懂球帝,对JSP访问后发现的网站内容懂球帝懂球帝,其实就是翻译后的Servlet在向外输出!

jsp网页

JSP语法 模版元素

直接写在jsp页面中的html内容称之为jsp页面中的模板元素

除了JSP特有的内容之外的其它内容都是模板元素

模版元素在翻译过来的Servlet中被out.write()原样输出到浏览器中

jsp网页

模版元素在JSP翻译后的Servlet中直接被out.write原样输出. 如下:

jsp网页

JSP表达式

格式: 其中可以书写常量、变量、表达式。

作用: 执行表达式, 将结果再原样发送给浏览器

JSP表达式在翻译后的Servlet中是执行表达式的值再原样输出到浏览器,例如

(1)在JSP页面编写内容如下:

<%= request.getContextPath() %> 
<%= "Hello...JSP..." %>

(2)在翻译后的Servlet中翻译如下:

JSP脚本片段

格式:

在翻译过来的servlet中,脚本片段中的Java代码被复制粘贴至对应的位置执行

翻译前:

<% for(int i=0; i<5; i++){ %>
	Hello JSP~~~~~
<% } %>

翻译后:

for(int i=0; i<5; i++){ 
	out.write("\r\n");
	out.write("\t\tHello JSP~~~~~
\r\n"); out.write("\t"); }

需要注意的是: 在某一个类库片段中的java代码可以是不完整的,但是要求在翻译过来的servlet中整体的代码需要是完整符合java语法的.

<%  //可以书写若干条Java语句
	for(int i=0;i<5;i++){
		out.write("Hello JSP
"); } //out相当于response.getWriter() %> <%-- 之所以可以按照下面的方式书写, 是因为在JSP翻译 后的Servlet中, 就没有脚本片段的区分了, 所以在JSP中 多个脚本片段之间的内容可以互相访问 --%> <% for(int i=0;i<5;i++){ %> Hello JSP
<% } %>

JSP 注释

格式:

例如: 被JSP注释注释的内容jsp网页,在翻译的过程中被放弃,不会被翻译。

注意: 注释不能交叉嵌套!!

<% String name = "刘德华"; %>
<%= name %>                 ---> 输出刘德华
<%--
<% name = "马德华"; %>
 --%>
<%= name %>                 ---> 输出刘德华

提示:在JSP中最好还是使用JSP注释,使用html注释可能会出现注释不了的状况:

<% String name1 = "刘德华"; %>
<%= name1 %>             ---> 输出刘德华
<%= name1 %>             ---> 输出马德华

JSP指令

JSP指令格式:

JSP指令的作用:不会直接造成输出,JSP指令是用来指挥JSP解析引擎如何来翻译当前JSP页面中其它个别的内容(除指令意外的其它内容,例如模版元素、jsp表达式等)

-- 用来声明当前JSP页面的基本属性的,page指令可以写在JSP页面的任意位置,但是为了可读性考虑,一般状况下最好放在JSP页面的最前面

格式:

(1) -- 用来通知JSP解析引擎使用选定的编码来翻译JSP。如果想避免JSP乱码,应该应确保JSP文件储存时的编码和pageEncoding指定的编码保持一致。

(2) -- 为JSP翻译后的Servlet指定所依赖的jar包.例如:

<%@page import="java.util.Date"%>
<%@page import="java.io.File" %>
<%@page import="java.sql.DriverManager"%>

-- 可以实现页面包括的效果,即页面的合并效果

格式:

在使用JSTL标签库中的标签时, 在当前JSP中要启用JSTL标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

prefix值可以为任意,但使用JSTL标签库时应用该值作为标签名

需要注意: 在启用之前还必须导入JSTL相关的jar包

JSP 标签技术

在JSP页面中读取大量的java代码会导致JSP页面中html代码和java代码混杂在一起,会导致页面比较的错乱,难于维护。

于是在JSP的2.0版本中,sun提出了JSP标签技术,推荐使用标签来替代JSP页面中java代码,并且推荐,JSP2.0之后不要在JSP页面中出现任何一行java代码。

EL表达式

格式: ${常量、表达式、变量}变量应该得事先存入域中

作用:主要作用是从域中获得数据,并输出

(1)获取常量、表达式或函数的值(变量应该的现存入域中)

${ "Hello EL" }   Hello EL   
${ 100+123 } ${ (23*54) > 1250 ? 23*54 : 1250 }
<% //声明一个变量name, 并将变量存入域中 String name = "张三"; request.setAttribute("name1", name); %> ${ name1 } 在EL中书写变量, 会通过变量名(name1)到四个域中去 寻找指定名称(name1)属性值, 如果找到就返回属性值, 如果找不到, 就什么也不输出。 寻找时按照域的范围大小, 按照从小到大的顺序去寻找, 找到就输出,找不到就接着往后查找,最终还找不到,就 什么也不输出! pageContext

(2)获取域中的字段或集合中的数据

<%
    //声明一个数组,并将数组存入到域中
    String[] names = {"刘德华","郭富城","张学友","黎明"};
    request.setAttribute( "ns", names );
    //下面通过EL获取域中数组中的元素
%>
${ ns[0] } 
${ ns[1] }
${ ns[2] }
${ ns[3] }

(3)获取域中的map集合中的数据

<%
    //声明一个Map集合,并将map集合存入到域中
    Map map = new HashMap();
    map.put("name", "阿凡达");
    map.put("age", 20);
    map.put("addr", "北京");
    request.setAttribute( "map1", map );
%>
${ map1.name } 
${ map1.age }
${ map1.addr }

(4)获取域中的JavaBean/POJO中的数据

<%
    //创建一个Account对象, 并存入域中
    Account acc = new Account(1, "john", 3000);
    request.setAttribute("account",  acc );
%>
${ account.getId() }
${ account.getName() }
${ account.getMoney() }     
<%-- 在EL中 对象.getXxx() 可以简化为 对象.xxx --%> ${ account.id } ${ account.name } ${ account.money }

在EL中借助对象.xxx,例如:

${ account.id }底层代码虽然调用的是account.getId()方法

${ account.name }底层代码虽然调用的是account.getName()方法

JSTL标签库

STL标签库是为JavaWeb开发人员提供的一套标准通用的标签库;

JSTL标签库和EL配合使用替代JSP中大部分的Java代码;

在使用JSTL标签库之前,需要进行下面操作:

(1)需要在项目中导入JSTL的jar包

(2)需要在使用JSTL标签库的jsp中借助taglib指令引入JSTL标签库

其中常用的标签如下:

1、--往四大作用域中添加域属性,或者更改四大作用域中已有的属性

(1)往四大作用域中添加一个域属性

<%--  request.setAttribute("name", "张三"); --%>

${ name }

(2)修改四大作用域中已有的属性

如果重复添加同样的属性,值会出现覆盖,相当于修改.


${ name }

(3) 修改作用域中Map集合中的属性(了解)

jsp网页

c_set标签属性总结:

(1)var --指定存入作用域中的属性名称

(2)value --指定存入作用域中属性的值

(3)scope --指定将属性存入哪一个作用域中

可取值: a)page表示pageContext域b)request表示request域

c)session表示session域d)application表示ServletContext域

2、 --构造if…else…语句

yes
no

test属性用于指定判断的条件,注意:JSTL中没有提供else对应的标签

3、 --对集合或变量等中元素进行循环遍历或者是执行指定数量的循环.

(1)遍历域中字符或集合中的元素

<%
    //声明一个数组, 并将数组存入域中
    String[] names = {"王海涛","齐雷","陈子枢"};
    request.setAttribute("names", names);
%>

    ${ name }

(2)遍历域中map集合中的元素

<%
	//声明一个Map, 并将Map存入域中
	Map map = new HashMap();
	map.put("name", "关羽");
	map.put("age", "38");
	map.put("addr", "中鼎大厦B座");
	request.setAttribute("map", map);
%>

	${ entry.key } : ${ entry.value } 

(3)遍历0~100之间的整数,将是3的倍数的数值输出到浏览器中

  
		${ i%3==0? i : "" }
 

c_forEach标签属性总结:

(1)items:指定需要枚举的集合或变量

(2)var:指定用于接收遍历过程中的元素

(3)begin:指定循环从哪儿开始

(4)end:指定循环至哪儿结束

(5)step:指定循环时的步长,默认值是1

Copyright © 2012-2018 懂球帝APP 版权所有

琼ICP备xxxxxxxx号