开宗明义:JSP本质上就是一个Servlet


scriplet

JSP 变量和函数的声明

局部变量

<% int a = 3;>

全局变量和函数

<%! int a = 3;> //这里所谓的全局是在service方法之外的声明。
<%! int function();>

在JSP中输出表达式的值或者变量的值

<%= a%>
/*注意前面的小于号和百分号和等号必须紧挨,
否则会发生错误,另外不能加分号。因为转换成Servlet之后,
标记符里面的内容只是out.println()里面的参数而已.*/

JSP中的隐式对象

JSP中的所有隐式对象都会对应到Servlet/JSP API中的某个东西。以下是对应关系:

API										隐式对象

JspWriter -----------------------------  out

HttpServletRequest-----------------------request

HttpServletResponse----------------------response

HttpSession------------------------------session

ServletContext---------------------------application

ServletConfig----------------------------config

Throwable--------------------------------exception

PageContext------------------------------pageContext

Object-----------------------------------page

JSP的初始化

JSP的初始化参数

与常规Servlet配置初始化参数基本上是一样的,唯一的区别就是必须在servlet标记中增加一个元素

意思是:把这个servlet标记中的所有配置应用到由这个JSP页面生成的Servlet中。

覆盖jspInit()

在jspInit()方法中可以调用getServletConfig和getServletContext方法。

JSP中的属性

关于应用、请求、会话三个作用域来设置属性,与Servlet类似,只不过要按照上面的映射,把名字改一改而已。比如:

getServletContext.setAttribute("xxx",object)换成
application.setAttribute("xxx",object)

但是JSP还有一个页面作用域:pageContext。用其设置的属性,只在本页内可见。

JSP的指令

page指令

<%@ page import="xxx.xxx" session="false">
//用来引入包,或者设置本页内的属性。注意引入不同的包时候,要用逗号隔开
//后面的session表示页面内部是否有隐式session对象,true为有,false为无
//contentType定义响应的MIME内容
//pageEncoding定义JSP字符编码

taglib指令

<%@ taglib tagdir="path" prefix="xxx">//定义标记库

include指令

<%@ include file="xxxx"> //定义可重用的JSP代码

EL

EL的使用形式:${xxxx.xxxx}

表达式中第一个命名变量可以是一个隐式对象,也可以是一个属性

EL隐式对象

		pageScope			requestScope

		sessionScope		applicationScope
// 上面四个都是作用域属性的MAP param parmaValues
//上面两个是请求参数的Map header headerValues
//上面两个是请求首部的Map cookie initParam //这个是上下文(应用)初始化参数的Map pageContext //唯一一个不是Map的隐式对象。

使用点号操作符访问性质和映射值

点号左边的变量要么是一个Map,要么是一个bean;点号右边是一个Map键或者一个bean属性。

如:${person.name}

使用方括号访问

方括号与点号相比的优势在于,除了点号上面的适用范围之外,左边还可以是一个List或者数组。

比如:

String[] list = {"aaa","bbb","cccc"};
${list[0]} 输出 aaa
${list["0"]} 还是输出aaa
注意:在数组或者list中的String索引会强制转换为int,如果无法转换,将报错。

除此之外,中括号里面还可以使用嵌套表达式。

作用域隐式对象

要注意:如果requestScope只是请求作用域属性的一个Map,但不是request对象本身。

如果希望在request对象上调用一个获取方法来得到自己想要的东西怎么办?

答:可以使用pageContext对象。

pageContext.request.method

那么requestScope有什么用处呢?

答:如果要区别不同作用域的对象,就能使用它。

以上介绍了EL的特性,关于EL还有很多特性,用到的时候,再查也可以。但是EL不是万能的,比如EL无法实现逻辑控制,如果用到了条件判断,还是得在JSP中插入Java代码。

但JSTL可以做到。请看下一篇博客。

JSP(一)的更多相关文章

  1. myeclipse学习总结一(在MyEclipse中设置生成jsp页面时默认编码为utf-8编码)

    1.每次我们在MyEclispe中创建Jsp页面,生成的Jsp页面的默认编码是"ISO-8859-1".在这种情况下,当我们在页面中编写的内容存在中文的时候,就无法进行保存.如下图 ...

  2. jsp前端实现分页代码

    前端需要订一page类包装,其参数为 private Integer pageSize=10; //每页记录条数=10 private Integer totalCount; //总记录条数 priv ...

  3. jsp中出现onclick函数提示Cannot return from outside a function or method

    在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...

  4. jsp页面无法识别el表达式的解决方案

    今天在写一个springmvc的小demo时,碰到一个问题,在jsp页面中书写为${user.username}的表达式语言,在浏览器页面中仍然显示为${user.username},说明jsp根本不 ...

  5. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  6. 浅谈JSP注释

    HTML注释 JSP文件是由HTML尿急和嵌入的Java程序片段组成的,所以在HTML中的注释同样可以在JSP文件中使用.注释格式:<!--注释内容--> <!-- 欢迎提示信息! ...

  7. JSP 标准标签库(JSTL)

    JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...

  8. Nginx服务器之Nginx与tomcat结合访问jsp

    本文使用linux centos系统 本文概述: JSP是一种动态网页技术标准.使用的方式是在HTML文件中插入程序段和JSP标记,而形成JSP文件.使用JSP开发WEB应用可以跨平台开发.但jsp需 ...

  9. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  10. JSP页面跳转的几种实现方法

    使用href超链接标记      客户端跳转 使用JavaScript               客户端跳转 提交表单                        客户端跳转 使用response ...

随机推荐

  1. canvas模糊事件处理

    不知道大家项目中有没有用到canvas时还有时候会出现模糊的情况: 具体推测可能是屏幕改变了,然而canvas的渲染对象并没有跟着一起变: 这里简单介绍个对象,window.devicePixelRa ...

  2. MySql优化-你的SQL命中索引了吗

    在项目开发中SQL是必不可少的,表索也一样.这些SQL的运行性能不知道吗?有多少是命中了索引的?命中哪个索引?索引中有哪个是无效索引?这些无效索引是否会影响系统的性能?带着这些问题我们一起来学习一下. ...

  3. HDU 5740 - Glorious Brilliance

    题意: 给出已0 1染色的无向图(不一定联通),一次操作为一对相邻点颜色互换. 问使任意相邻点颜色不同,最少需要多少次操作 分析: 交换两点的代价即为两点间最短路. 故用BFS找出所有点到任意点的最短 ...

  4. 菜鸟的jQuery源码学习笔记(一)

    整个jQuery是一个自调用的匿名函数: (function(global, factory) { if (typeof module === "object" && ...

  5. JVM的体系结构——JVM之三

    JVM的内部体系结构分为四部分, (1)类装载器(ClassLoader)子系统 作用: 用来装载.class文件 (2)执行引擎 作用:执行字节码,或者执行本地方法 (3)垃圾回收子系统 作用:垃圾 ...

  6. 跨域(cross-domain)访问 cookie (读取和设置)

    Passport 一方面意味着用一个帐号可以在不同服务里登录,另一方面就是在一个服务里面登录后可以无障碍的漫游到其他服务里面去.坦白说,目前 sohu passport 在这一点实现的很烂(不过俺的工 ...

  7. 实用的PHP正则表达式

    正则表达式是程序开发中一个重要的元素,它提供用来描述或匹配文本的字符串,如特定的字符.词或算式等.但在某些情况下,用正则表达式去验证一个字符串比较复杂和费时.本文为你介绍10种常见的实用PHP正则表达 ...

  8. sa命令从/var/account/pacct原始记账数据文件读取信息并汇总

    sa命令从/var/account/pacct原始记账数据文件读取信息并汇总

  9. 2014第7周三初识CouchBase

    今天主要还是完善需求,然后提交评审流程,尽可能不纠结一些细节问题后发现自己速度更快了,或许这才是最好的顺序,其它可能的问题就留在后续发现并解决吧.今天第一次听到并重视下couchbase.上午看到同事 ...

  10. C# 多线程 异步加载 窗体

    C# 多线程 异步加载 窗体 分类: C#2014-05-28 16:57 1286人阅读 评论(0) 收藏 举报 异步加载 我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗 ...