什么是JSP

Java Server Page的缩写
从用户角度看待,就是一个网页
从程序员角度看待,其实是一个java类,它继承了Servlet,所以可以直接说jsp就是一个Servlet

为什么会有JSP

html多数情况下用来显示静态内容,一成不变的.但是有时候我们需要在网页上显示一些动态数据
比如:查询所有的学生信息,根据姓名去查询某个学生.
这些动作都需要去查询数据库,然后在网页上显示
html不支持写java代码,jsp里面可以写java代码

怎么用JSP

指令的写法

1
<%@ 指令名字 %>

指令详解

page指令

1
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  • language:表明jsp页面中可以写java代码
  • contentType:告诉浏览器我是什么内容类型,以及使用什么编码
  • pageEncoding:jsp内容编码
  • extends:用于指定jsp翻译成java文件后,继承的父类是谁,一般不用改
  • import:导包使用,一般不用手写
  • session:值可选的有true或false,用于控制在这个jsp页面里面,能够直接使用session对象,具体的区别请看翻译后的java文件,如果该值是true,那么在代码里面会有getSession()的调用,如果是false,那么就不会有该方法调用,也就是没有session对象了,在页面也就自然不能使用了
  • errorPage:指的是错误的页面,当当前页面有错误的java代码时,自动跳转到错误页面
  • isErrorPage:上面的errorPage用于指定错误的时候跑到哪一个页面去,而这个isErrorPage,就是声明某一个页面到底是不是错误的页面

include指令

1
<%@ include file="other2.jsp" %>

本质上就是把另外一个页面的所有内容拿过来一起输出,所有的标签元素都包含进来

taglib指令

1
<%@ taglib prefix="" uri="" %>
  • uri:标签库路径
  • prefix:标签库的别名

JSP动作标签

1
2
3
<jsp:include page=""></jsp:include>
<jsp:param value="" name="" />
<jsp:forward page=""></jsp:forward>
  • jsp:include

    包含指定页面,这里是动态包含,也就是不把包含的页面所有元素标签全部拿过来输出,而是把它运行结果拿过来

  • jsp:forward

    前往哪一个页面
    相当于<% request.getRequestDispatcher("other02.jsp").forward(request, response); %>

  • jsp:param

    在包含某个页面的时候,或者在跳转某个页面的时候,带个参数

1
2
3
4
5
6
7
8
other01.jsp页面:

<jsp:forward page="other02.jsp">
<jsp:param value="beijing" name="address" />
</jsp:forward>> ohter02.jsp页面
<%= request.getParameter("address") %>

JSP内置对象

所谓内置对象,就是我们可以直接在jsp页面中使用这些对象,不用创建
内置对象如下

第一类:作用域对象

  • pageContext
  • request
  • session
  • application

第二类:不常用对象

  • exception
  • page
  • config

第三类:常用

  • response
  • out

第一类:作用域对象

作用域定义

表示这个对象可以存值,它们的取值范围有限定

作用范围

  • pageContext[PageContext]:作用于仅限于当前页面,能够存值的同时,还能获取到其他8个对象
  • request[HttpServletRequest]:作用于仅限于一次请求,只要服务器对该请求作出了响应,这个域中的值就没有了
  • session[HttpSession]:作用于仅限于一次会话(多次请求与响应)当中
  • application[ServletContext]:整个工程都可以访问,服务器关闭后就不能访问了

操作

1
2
3
4
5
6
7
8
9
10
//写数据
<% pageContext.setAttribute("name", "zhangsan") %>
<% request.setAttribute("name", "zhangsan") %>
<% session.setAttribute("name", "zhangsan") %>
<% application.setAttribute("name", "zhangsan") %>
//读数据
<%= pageContext.getAttribute("name") %>
<%= request.getAttribute("name") %>
<%= session.getAttribute("name") %>
<%= application.getAttribute("name") %>

第二类:不常用

  • exception => Throwable
  • page => Object => 就是jsp翻译成java类的实例对象,就是在类中的this关键字
  • config => ServletConfig

第三类:常用

  • response => HttpServletResponse
  • out => JspWriter

两者区别

1
2
3
4
5
6
7
8
9
10
11
<% out.write("这是使用out对象输出的内容") %>
<% response.getWriter().write("这是使用response对象输出的内容") %> //得到的结果
这是使用response对象输出的内容
这是使用out对象输出的内容 //背后逻辑
1. 碰到out对象输出,会先将out的内容刷新到response的缓冲中
2. 而response.getWriter会直接输出内容
3. 这样,即使out代码写在前面,response代码写在后面,也会先输出response要输出的内容

EL表达式

为了简化jsp代码,具体一点就是为了简化在jsp里面写的那些java代码
主要用于取值工作

写法格式

1
$( 表达式 )

具体使用

取值方式

如果是有下标的,使用[]的方式

1
2
3
4
5
6
<%
String[] a = {"aa", "bb", "cc", "dd"};
pageContext.setAttribute("arr", a);
%>
<h3>使用EL表达式取出作用域中数组的值</h3>
${arr[0]},${arr[1]},${arr[2]},${arr[3]}

如果没有下标,使用.的方式

1
2
3
4
5
<%
pageContext.getAttribute("name");
%>
<h3>使用EL表达式取出作用域中的值</h3>
${pageScope.name}

取出4个作用域中存放的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<body>
<%
pageContext.setAttribute("name", "page1");
request.setAttribute("name", "page2");
session.setAttribute("name", "page3");
application.setAttribute("name", "page4");
%>
<h3>按普通手段取值</h3>
<%
pageContext.getAttribute("name");
request.getAttribute("name");
session.getAttribute("name");
application.getAttribute("name");
%>
<h3>使用EL表达式取出作用域中的值</h3>
${pageScope. 大专栏  JSP和EL和JSTLname}
${requestScope.name}
${sessionScope.name}
${applicationScope.name} <%
String[] a = {"aa", "bb", "cc", "dd"};
pageContext.setAttribute("arr", a);
%>
<h3>使用EL表达式取出作用域中数组的值</h3>
${arr[0]},${arr[1]},${arr[2]},${arr[3]} <%
ArrayList list = new ArrayList();
list.add("11");
list.add("22");
list.add("33");
list.add("44");
pageContext.setAttribute("li", list);
%>
<h3>使用EL表达式取出作用域中集合的值</h3>
${li[0]},${li[2]},${li[3]},${li[4]} <%
HashMap map = new HashMap();
map.put("name", "zhangsan");
map.put("page", 18);
map.put("address", "beijing");
pageContext.setAttribute("map", map);
%>
<h3>使用EL表达式取出作用域中集合的值</h3>
${map.name},${map.age},${map.address}
</body>

没有指定作用域,此时取值顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<body>
<%
pageContext.setAttribute("name", "page1");
request.setAttribute("name", "page2");
session.setAttribute("name", "page3");
application.setAttribute("name", "page4");
%>
<h3>有指定作用域,就到对应作用域里找</h3>
${pageScope.name}
${requestScope.name}
${sessionScope.name}
${applicationScope.name <h3>没有指定作用域</h3>
<h4>先从pageContext里面找,不会在request里找,然后去session里面找,最后去application里面找</h4>
${ name }
</body>

EL表达式的11个内置对象

JSP

  • pageContext

作用域

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

请求头

  • header
  • headerValues

请求参数

  • param
  • paramValues

Cookie

  • cookie

初始化参数

  • initParam

JSTL

定义和作用

JSP标准标签库,全称:JSP Standard Tag Library
简化jsp的代码编写,替换<% %>的写法,配合EL使用

项目中引入JSTL

  1. 复制jstl.jarstandard.jar文件到工程的WebContent/WEB-INF/lib目录下
  2. 在jsp页面上,使用taglib指令来引入标签库
  3. 注意:如果想支持EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持EL表达式
    1
    2
    3
    <!-- 其中,prefix="c"中的c可以任意值,但是有一定的习惯 -->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

常用标签

常用的标签

  • <c:set>>
  • <c:if>
  • <c:forEach>>

举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<body>
<h1>--------------------赋值操作-----------------------------</h1>
<!-- 声明一个对象name,对象的值为zhangsan,存储到session 如果没有执行scop则默认是page作用域 -->
<c:set var="name" value="zhangsan" scope="session"></c:set>
${sessionScope.name } <h1>--------------------条件语句-----------------------------</h1>
<c:if test=""></c:if>
<c:set var="age" value="18" scope="session"></c:set>
<!-- test用以写判断条件,var用以存判断结果,scope用以设定作用域 -->
<!-- 没有else -->
<c:if test="${ age >= 6 }" var="flag" scope="page">
年龄大于5岁
</c:if> <h1>--------------------循环语句-----------------------------</h1>
<!-- 从1开始遍历到10,步长为2,得到的结果复制给i,并且会存储到page域中 -->
<c:forEach begin="1" end="10" var="i" setp="2">
${i }
</c:forEach> <h1>--------------------循环语句,遍历list--------------------</h1>
<!-- items:表示遍历哪一个对象,注意这里必须写EL表达式 -->
<!-- var:遍历出来的每一个元素用user去接受 -->
<%
ArrayList list = new ArrayList();
list.add(new User("zhangsan", 18));
list.add(new User("lisi", 28));
list.add(new User("wangwu", 38));
list.add(new User("maliu", 48));
list.add(new User("qianqi", 58));
%>
<!-- items:表示遍历哪一个对象,注意这里必须写EL表达式 -->
<!-- var:遍历出来的每一个元素用user去接受 -->
<c:forEach var="user" items="${list }">
${user.name } ---- ${user.age }
</c:forEach>
</body>

JSP和EL和JSTL的更多相关文章

  1. jsp与El,jstl知识点总结归纳

    jsp与El,jstl知识点总结归纳 jsp部分 一.jsp的三大指令 page ,include,taglib 1.jsp中的page指令 <% page %>-设置jsp 例如: &l ...

  2. 第75节:Java的中的JSP,EL和JSTL

    第75节:Java中的JSP,EL和JSTL 哭吧看不完的!!! Cookie和`Session 请求转发和重定向的区别: 地址不一样 请求次数也不一样 数据无法传递 4.跳转范围有限制 效率 请求转 ...

  3. [Java] JSP笔记 - EL、JSTL 常用标签

    一. 什么是 EL 语言 表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言. 二.EL 语言的作用 为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMASc ...

  4. JSP、EL、JSTL

    JSP(Java Server Pages) 什么是JSP Java Server Pages(Java服务器端的页面) 使用JSP:SP = HTML + Java代码 + JSP自身的东西.执行J ...

  5. Jsp应用EL和JSTL实例对比。

    普通方式: register.jsp <%@ page language="java" import="java.util.*" pageEncoding ...

  6. Cookie、Session、jsp、EL、JSTL

      会话技术 Cookie Session 从访问一个站点,到关闭不继续访问 称为一次会话过程.会话技术就是记录本次会话中客户端的状态与数据的. 会话技术分为cookie.session. cooki ...

  7. JSP(7)—EL和JSTL

    一.EL表达式: 1.简介:EL全称为Expression Language,原本是JSTL1.0为方便存储数据所定义的语言,当时只能在JSTL标签中 使用,到了JSTL2.0之后,EL已经成为正式纳 ...

  8. JSP的EL和JSTL解析

    1. EL 简介EL 全名为Expression Language,所有EL都是以${ 为起始.以} 为结尾的.EL 语法很简单,它最大的特点就是使用上很方便. 接下来介绍EL 主要的语法结构: ${ ...

  9. jsp之el表达式jstl标签

    不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码 el表达式的出现是为了简化jsp中读取数据并写入页面的操作. el表达式的功能不多,也很好记 ...

随机推荐

  1. spring boot 环境配置(profile)切换

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  2. python yield 使用示例

    1.yield由于创建迭代器 def deal(): tmp = [] for i in range(20): tmp.append(i) if i % 4 == 0: yield tmp tmp = ...

  3. POJ - 3279 Fliptile(反转---开关问题)

    题意:有一个M*N的网格,有黑有白,反转使全部变为白色,求最小反转步数情况下的每个格子的反转次数,若最小步数有多个,则输出字典序最小的情况.解不存在,输出IMPOSSIBLE. 分析: 1.枚举第一行 ...

  4. 18 12 24 html 表单学习

    html表单 表单用于搜集不同类型的用户输入,表单由不同类型的标签组成,相关标签及属性用法如下: 1.<form>标签 定义整体的表单区域 action属性 定义表单数据提交地址 meth ...

  5. BZOJ 4033: [HAOI2015]树上染色

    题解: 树形DP 思路,考虑每条边的贡献,即这条边两边的黑点数量相乘+白点数量相乘再成边长 #include<iostream> #include<cstdio> #inclu ...

  6. vscode-wechat 小程序开发提示工具 vscode 安装

    vscode 安装 vscode-wechat vscode-wechat 小程序开发提示工具 ---- 有了小程序开发提示,开发很方便 https://segmentfault.com/a/1190 ...

  7. Springboot 2.x 如何解决重复提交 (本地锁的实践)

    有没有遇到过这种情况:网页响应很慢,提交一次表单后发现没反应,然后你就疯狂点击提交按钮(12306就经常被这样怒怼),如果做过防重复提交还好,否则那是什么级别的灾难就不好说了... 本文主要是应用 自 ...

  8. iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码

    iOS精选源码 iOS 精美过度动画源码 iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路 自定义cell的列表视图实现:置顶.拖拽.多选.删除 SSSearcher仿微信搜索联系人,高亮搜索 ...

  9. 浅谈tcp协议

    tcp协议     三次握手四次挥手                 优点: 稳定,可靠   应用:发邮件                 缺点: 有延迟 占用系统资源多               ...

  10. 100道Java面试题整理(助力2020面试!)

    1.您对微服务有何了解? 微服务,又称微服务 架 构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合 . 通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物.他 ...