第6章 JSP

1. JSP基础理论

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的
一种用于开发动态web资源的技术。
JSP技术的特点:

  • JSP是一种服务器端脚本语言,其出现降低了Servlet编写页面的难度。JSP本质上就是Servlet,实际上JSP是首先被翻译成Servlet后才编译运行的,因此JSP能够实现Servlet所能够实现的所有功能。
  • 相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。

第一次访问JSP

第一次访问JSP

后续访问JSP

后续访问JSP

2. JSP的组成元素

2.1 DHTML静态内容

包含HTML静态网页,CSS样式表,Javascript客户端脚本等静态资源


2.2 JSP脚本
2.2.1 Java脚本

在JSP页面上以<% %>表现,在其中编写Java代码,实现动态效果。其中包含了9个隐式对象,不用声明即可直接使用

<%
  Object o = request.getAttribute("key");
%>

9个隐式对象分别如下:

  • pageContext page作用域
  • request request作用域和请求对象
  • session session作用域
  • application application作用域
  • response 响应对象
  • page 相当于JSP翻译成Java文件中的this
  • config web服务器配置对象
  • out Java文件中输出动态网页的out对象
  • exception JSP中的异常对象,仅限于JSP定义为isErrorPage=true时使用
2.2.2 输出脚本

在JSP页面上以<%= %>表现,用于将变量或者表达式的值显示在网页上

<%
  int a = 3;
  int b = 4;
%>
值:<%= a+b %>
2.2.3 声明脚本

在JSP页面上以<%! %>表现,用于声明类级别的属性或者方法

<%
   x = 3;
   int x = 5;    //jsp_service方法中声明的局部变量
%>
<%!
    int x = 10; //JSP翻译成Java文件中声明属性变量
%>
<%= x %> //5
<%= this.x %> //3

翻译成Java代码

public class XXX_jsp{
  int x = 10;
  public void jsp_service(){
    x = 3;  //相当于this.x = 3;
    int x = 5;  //局部变量
    out.println(x);   //局部变量的优先级高 5
    out.println(this.x);   //属性变量  3
  }
}
2.2.4 注释脚本

在JSP页面上以<%-- --%>表现为JSP的注释。
在JSP页面上,常见有3中注释方式

  • <%-- --%> JSP注释
    JSP注释在JSP翻译成Java过程中被忽略
  • <% // %> Java注释
    Java注释在Java文件编译成class文件过程中被忽略
  • <!-- -- > HTML注释
    始终不会被忽略,会被响应给客户端

在实际工作中尽量不要使用HTML注释,这部分实际上会响应给客户端,它会占用网络资源,同时如果客户端的使用者了解原理,可以通过“查看源”方式获取这部分被注释掉的代码,如果其中包含了敏感链接信息等内容,可能会造成一些商业风险。


2.3 JSP指令

在JSP页面上以<%@ %>表现。

2.3.1 page指令

page指令可以出现多次(仅限在引入Java文件时),用于表示JSP页面的一些基本设置信息,

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>

常用的属性

常用属性 用途 取值 必要项
language 服务器脚本语言的类型 只能是java
contentType 静态资源的响应类型 text/html; charset=UTF-8
pageEncoding JSP的字符集 各种字符集,比如UTF-8
import Java语言的引包 相当于Java代码中的import,可以出现多次
errorPage JSP的错误页指向 其他JSP页面(必须是isErrorPage=true)
isErrorPage 声明JSP自身是否为一个错误页,允许该JSP使用exception隐式对象 true或false
2.3.2 taglib指令

taglib指令可以出现多次,用于引入第三方的标签库,比如JSTL标签库和自定义标签库

<%@ taglib prefix="" uri="" %>   

常用的属性

常用属性 用途 取值 必要项
prefix 被引入标签库在JSP页面上使用的前缀名 字符串
uri 被引入标签库声明的uri 表示url的字符串
tagdir 用于指定tag文件目录 绝对路径
2.3.3 include指令

include指令可以出现多次,在页面上引入另一个JSP的内容。比如菜单这种在很多JSP页面都出现的内容就可以使用include指令来引入,一次修改处处生效。

<%@ include file="" %>   
常用属性 用途 取值 必要项
file 引入JSP文件的站内地址 表示站内地址的url的字符串

2.4 JSP动作
2.4.1 include动作

与JSP指令的功能实际效果是一致的,在页面上引入另一个JSP的内容。

<jsp:include page="/x.jsp"></jsp:include>

include指令与include动作的区别
include指令:将两个JSP的代码融合至一起。
include动作:两个JSP有各自独立的编译和输出

2.4.2 forward动作

相当于在JSP页面上进行请求转发,当JSP执行到这句代码时,立即进行请求转发

<jsp:forward page="站内路径"></jsp:forward>
2.4.3 param动作

在请求转发的过程中传递数据,通过getParameter可以取得这些数据

<jsp:forward page="站内路径">
  <jsp:param value="abc" name="haha"/>
  <jsp:param value="123" name="xixi"/>
</jsp:forward>
2.4.4 useBean动作

从某个作用域中取得数据

<jsp:useBean id="online" class="com.neuedu.po.EmployeesPO" scope="session"></jsp:useBean>
常用属性 用途 取值 必要项
id 作用域中的key和变量名 字符串
class 取出变量的类型 表示类路径的字符串
scope 作用域 page,request,session,application

在JSP页面中声明某个变量


3. EL表达式

3.1 在作用域中取值

取得的是某个属性的值,要求该属性必须有相应的set和get方法

${sessionScope.online}  //取得session作用域中key是online的对象的值
${sessionScope.online.ename} //取得session作用域中key是online的对象的ename属性的值
${haha} //取得request作用域中key是haha的对象的值
${requestScope.haha} //取得request作用域中key是haha的对象的值

EL表达式中作用域的隐式对象

EL表达式隐式对象 作用域
pageScope page作用域
requestScope(默认) request作用域
sessionScope session作用域
applicationScope application作用域
3.2 基础的运算

EL表达式可以进行基础的运算,比如:四则运算和比较运算

${sessionScope.online.sex == 1}  //显示sex属性的值是否为1
${2+3}  //计算2+3的结果并显示
${2+3 > 4} //显示2+3>4的比较结果
3.3 web的基础信息
${pageContext.request.contextPath}  //系统的root的名字

4. JSTL标签

在工程中导入jstl的jar包,在JSP页面上使用taglib指令引入标签库

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

着重介绍下面三种常用的标签,其他的略过

4.1 迭代标签(core库)

for...each

<c:forEach var="po" items="${elist}">
</c:forEach>

相当于

for(EmployeesPO po : (List<EmployeesPO>)request.getAttribute("elist")){
}

for

<c:forEach begin="0" end="5" step="1">
</c:forEach>

相当于

for(int i = 0; i < 5; i++){
}
4.2 条件标签(core库)

单独if

<c:if test="${5 > 2}">
</c:if>

相当于

if(5 > 2){
}

多重分支

<c:choose>
    <c:when test="${po.sex == 1}">
        男
    </c:when>
    <c:when test="${po.sex == 2}">
        女
    </c:when>
    <c:otherwise>
        保密
    </c:otherwise>
</c:choose>

相当于

if(po.getSex() == 1){
  男
}else if(po.getSex() == 2){
  女
}else{
  保密
}
4.3 日期格式标签(fmt库)

用于日期格式化的显示
将po.getBirthday()表示的date对象,按照yyyy年MM月dd日的格式进行显示

<fmt:formatDate value="${po.birthday}" pattern="yyyy年MM月dd日"/>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 228,345评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,494评论 3 416
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 176,283评论 0 374
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,953评论 1 309
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,714评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,186评论 1 324
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,255评论 3 441
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,410评论 0 288
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,940评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,776评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,976评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,518评论 5 359
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,210评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,642评论 0 26
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,878评论 1 286
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,654评论 3 391
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,958评论 2 373

推荐阅读更多精彩内容

  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,488评论 0 13
  • 其他更多java基础文章:java基础学习(目录) 本章内容较多,全部认真看完可能需要一小时以上,建议边看边做笔记...
    Hiwayz阅读 1,318评论 0 10
  • 一、jsp介绍 jsp作用jsp全称java server pages(java服务器页面),本质是一个servl...
    圣贤与无赖阅读 1,260评论 0 14
  • 1.学习内容 JSP技术入门和常用指令 JSP的内置对象&标签介绍 EL表达式&EL的内置对象 2.JSP技术入门...
    WendyVIV阅读 2,159评论 1 18
  • Jsp技术总结 1. 什么是JSP JSP即Java Server Pages,它和servlet技术一样...
    java日记阅读 1,674评论 0 18