分分钟搞定 JSP 技术
一.JSP的语法
1.模版元素
写在JSP中的html内容
在翻译后的Servlet中, 直接被out.write原样输出
2.JSP脚本表达式
格式: <%= %>
在翻译后的Servlet中, 计算表达式的值在原样输出
3.JSP脚本片段
格式: <% 若干条java语句 %>
在翻译后的Servlet中, 直接复制粘贴到对应的位置执行
多个片段之间的变量可以互相访问
一个片段中的java代码可以不完整, 但是在翻译后的Servlet, 多个片段组成的java代码必须完整符合java语法
片段中不能包含其他的jsp元素
~~4.JSP声明
<%! %>
写在jsp声明中的内容, 会和类中的方法平级成为类的成员
5.JSP注释
<%-- 注释内容 --%>
被jsp注释注释的内容在jsp翻译过程中会被丢弃
6.JSP的指令
(1) page指令
<%@page 若干属性声明...%>
session="true", 默认为true, 表示翻译后的Servlet会创建session对象
如果不想创建session, 可以改为false
import 导包
pageEncoding 指定jsp解析引擎使用哪一个编码来翻译jsp
(2) include指令
<%@include file="/xxx" %>
实现请求包含效果, 是静态包含
(3) taglib指令
用来导入tld文件
二.JSP的九大隐式对象
page-------------Servlet
request----------request
response--------response
config-----------ServletConfig
application-----ServletContext
session---------session
exception------exception
out
pageContext
1.pageContext
代表JSP运行环境的对象
(1)入口对象, 可以用来获取其他八大隐式对象
getPage()方法----------------返回page隐式对象
getRequest()方法-------------返回request隐式对象
getResponse()方法------------返回response隐式对象
getServletConfig()方法-------返回config隐式对象
getServletContext()方法------返回application隐式对象
getSession()方法-------------返回session隐式对象
getException()方法-----------返回exception隐式对象
getOut方法()-----------------返回out隐式对象
(2)本身是一个域对象, 并且提供了入口来操作其他三大域对象
setAttribute(String name, Object value);
setAttribute(String name, Object value, int scope);
getAttribute(String name);
getAttribute(String name, int Scope);
removeAttribute(String name);
removeAttribute(String name, int Scope);
getAttributeNames();
findAttribute();//按照从小到大的顺序去四大域中寻找指定名称属性, 找到就返回, 找不到就返回null
(3) 提供了便捷方法实现请求包含和转发
pageContext.forward("xxx");
pageContext.include("xxx");
三.JSP标签技术
1.JSP标签(SUN公司提供)
<jsp:forward></jsp:forward>
<jsp:include></jsp:include>
<jsp:param></jsp:param>
2.EL表达式
只能获取不能遍历和设置
( 在开发使用时,若表达式有值时会直接在所在位置显示该值,若没有值则直接显示一个空不是null )
(1) 获取数据
获取常量/变量 -->${ "aaa" }...
获取数组中的数据-->${ username }... -->它会自动寻找与之对应的值并输出。这种el表达式在底层是用findAttribute()方法来实现的。
获取map中的数据-->${ attr[0] }...
获取集合中的数据-->${ list[0] }...
获取javaBean中的数据-->${ map.key },${ map["key"] }...-->需要获取哪个属性值时不是由JavaBean内部定义的属性名来决定而是由get和set方法名来决定的。将方法名的get或set和方法后面的括号去掉以及首字母小写后这就是通过el表达式获取时需要的属性名。
注意: 变量/集合/数组/map/JavaBean必须放在域中才可以通过el获取
(2) 执行运算
算术运行
+号在el中只能做运算符, 不能作为拼接符
逻辑运算
关系运算
三元表达式
empty运算
为空返回true,反之返回false
(3) 获取常用的开发对象
!!!pageContext:唯一可在el表达式中直接获取域对象中的值
!!!pageScope:代表pageContext域
!!!requestScope:代表request域
!!!sessionScope:代表session域
!!!applicationScope:代表ServletContext域
!!!param:代表所有参数的Map集合,可通过键获来获取值; Map<String, String>
paramValues: 代表获取一个键对应的多个值; Map<String, String[]>
header:代表请求头组成的map; Map<String, String>
headerValues:Map<String, String[]>
!!!cookie:代表Cookie信息组成的map; Map<String, Cookie>
注意:通过cookie获取得到的是Cookie对象,需要进一步通过Cookie名来获取指定的Cookie值 ${ cookie.username.value} //获取Cookie中的的username值
<%
Cookie c = new Cookie("cook","222");
//pageContext.setAttribute("c",c);
response.addCookie(c);
%>
Cookie的值为:${ cookie.cook.value }
initParam:代表所有web应用初始化信息组成的map; Map<String, String>
3.JSTL标签库:
导库:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> prefix:设置缩写成c
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" session="true|false"%>
---pageEncoding:可以指定 jsp文件保存的编码格式、传到浏览器时的编码格式、servlet响应到jsp参数的编码格式
---session:默认true ;为true表示一旦访问jsp时就会自动创建session对象,值为false则反之。
<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>

!!!<c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="<string>" />

!!!<c:if test="<boolean>" var="<string>" scope="<string>">
...//为真时才会执行
</c:if>

!!!<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>"
>
底层封装了Java中的for,while,do-while循环。

forEeach中的varStatus属性:

!!!<c:choose><c:when><c:otherwise>

分分钟搞定 JSP 技术的更多相关文章
- 【原型实战】分分钟搞定Unsplash网站原型设计
网站原型设计是我们在设计网页过程中必不可少的一步,激烈的市场竞争让我们不得不对产品进行快速迭代,如何高速有效的进行原型设计成为了设计师头疼的问题.本文将以unsplash网站为实例,教大家快速搞定we ...
- 分分钟搞定IOS远程消息推送
一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...
- Mockplus教程:分分钟搞定APP首页原型设计
Mockplus是一款快速原型设计工具,支持包括APP原型在内的多种原型与线框图设计.除了快速,Mockplus广受欢迎更因为它极低的上手门槛.今天小编就为大家展示如何用Mockplus在3分钟内完成 ...
- 分分钟搞定redis
随着科技不断的发展,使用到的技术也是更新换代,大家都知道当一个程序用户量上来之后,必然是要做数据缓存的,那么如何去实现的呢,在之前我们一直使用memcache去做数据缓存,现在众所周知主流的缓存技术已 ...
- “摆地摊“都找不到全栈工程师?JNPF帮你分分钟搞定!
大街上捕捉野生程序员 都这样了还找不到全栈工程师 全栈工程师(Full-Stack Engineer)图鉴: 全栈工程师,也叫全端工程师(同时具备前端和后台能力),英文Full Stack deve ...
- 转载:教你分分钟搞定Docker私有仓库Registry
一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...
- 教你分分钟搞定Docker私有仓库Registry
一.什么是Docker私有仓库Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候我们的服务器无法 ...
- 教你分分钟搞定Python之Flask框架
用最短的时间开发一个数据操作接口,Python是王道! 一.安装pip .首先检查linux有没有安装python-pip包,终端执行 pip -V [root@ network-scripts]# ...
- 分分钟搞定Python之排序与列表
排序时程序中用得比较多的方法了.在Python中,最简单的排序方法摸过与使用内置的sorted(list)这个函数了,该函数一一个列表作为参数返回一个新的列表,只不过是把旧列表中的元素排过序了.原列表 ...
随机推荐
- 【EasyNetQ】- 多态发布和订阅
您可以订阅接口,然后发布该接口的实现. 我们来看一个例子.我有一个接口IAnimal和两个实现Cat和Dog: public interface IAnimal { string Name { get ...
- 机器学习基础知识笔记(一)-- 极大似然估计、高斯混合模型与EM算法
似然函数 常说的概率是指给定参数后,预测即将发生的事件的可能性.拿硬币这个例子来说,我们已知一枚均匀硬币的正反面概率分别是0.5,要预测抛两次硬币,硬币都朝上的概率: H代表Head,表示头朝上 p( ...
- BZOJ4551 Tjoi2016&Heoi2016树(离线+并查集)
似乎是弱化的qtree3.树剖什么的非常无脑.考虑离线.并查集维护每个点的最近打标记祖先,倒序处理,删除标记时将其与父亲合并即可. #include<iostream> #include& ...
- Luogu2662 牛场围栏(最短路)
小凯的疑惑升级版的升级版.答案若存在不会超过30002-3000,暴力dp似乎勉强可以过.当然这不优美. 注意到如果能拼出长度为l的围栏,就一定能拼出长度为l+kx的围栏,其中x为最短的(或任意一个) ...
- 【题解】SCOI2010幸运数字
最近在学习容斥相关,于是就看到了这个题.一开始以为是补集转化,但是观察一下马上发现不可行,好像直接做会比较容易一些.一个数满足要求的充要条件即为是一个幸运数字的倍数,那么容斥可以轻松搞定,只要枚举是一 ...
- [CF107D]Crime Management
题目大意:有一种长度为$n(n\leqslant 10^{18})$的字符串,给定$m(m\leqslant10^3)$种限制,即字符$c$出现的次数为$cnt$,若一个字符有多种限制,则满足任意一个 ...
- [洛谷P1317]低洼地
题目大意:一组数,分别表示地平线的高度变化.高度值为整数,相邻高度用直线连接.找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的位置,即为答 ...
- git clone 出错 fatal: pack has bad object at offset 26060927: inflate returned -3
$ git clone http://xxx.xxx.cn/liyafei/developer.gitCloning into 'developer'...remote: Counting objec ...
- Leetcode 45. Jump Game II(贪心)
45. Jump Game II 题目链接:https://leetcode.com/problems/jump-game-ii/ Description: Given an array of non ...
- 迅雷Bolt的ClipSubBindBitmap函数特别说明
因为在工作中基于迅雷Bolt开发的是IM产品,需要实现自定义用户头像的功能. 但Bolt中对图像的默认拉伸锯齿效果非常明显,所以自己实现了图像拉伸函数,代码已共享,具体可查看:<迅雷Bolt图像 ...