<%@ …… %> 这是指令

<%@ page ……import="java.util.Date" %> 这是page指令,import是page指令的一个属性

<% …… %> 这是Scriptlet,里面是纯Java代码,需要分号结尾

<% = …… %> 这是表达式,表达式不用分号结尾;绝对不能把一个返回类型为void的方法用作表达式

JSP经过Web容器的转换,生成了Servlet:

JSP中的Scriptlet和表达式的内容都会放在Servlet的service()方法中,因此都是局部变量。

那么,怎么声明Servlet类的成员变量和方法呢?答案就是:JSP声明

<% ! …… %> 这就是JSP声明。例如<%! int count = 0; %>

JSP声明使用感叹号,后面需要分号结尾。

为JSP配置Servlet初始化参数:

 <web-app>
<servlet>
<servlet-name>MyTestInit</servlet-name>
<jsp-file>/TestInit.jsp</jsp-file> //这个与常规的Servlet不同
<init-param>
<param-name>email</param-name>
<param-value>1234@qq.com</param-value>
</init-param>
</servlet> <servlet-mapping>  //为一个JSP定义Servlet时,还必须为JSP页面定义一个Servlet映射
<servlet-name>MyTestInit</servlet-name>
<url-pattern>/TestInit.jsp</url-pattern>
</servlet-mapping>
</web-app>

覆盖jspInit()方法:(这个方法由Servlet的init()方法来调用)

 <%! public void jspInit(){  //使用JSP声明来覆盖jspInit()方法
ServletConfig scg = getServletConfig();
String emailAddr = scg.getInitParameter("email"); ServletContext sct = getServletContext();
sct.setAttribute("mail", emailAddr);
}

JSP增加了一个作用域,页面作用域:

标准的Servlet作用域有三个:请求、会话、应用(上下文)作用域;

JSP增加了页面作用域(pageContext)

在JSP中,使用4个隐式对象来得到和设置属性:

  Servlet中 JSP中(隐式对象) JSP中(隐式对象)
请求作用域(request) request.setAttribute("foo", Object); request.setAttribute("foo", Object); request.getAttribute("foo");
会话作用域(session) request.getSession().setAttribute("foo", Object);  session.setAttribute("foo", Object); session.getAttribute("foo");
应用作用域(context) getServletContext().setAttribute("foo", Object); application.setAttribute("foo", Object); application.getAttribute("foo");
页面作用域(pageContext)  不适用 pageContext.setAttribute("foo", Object); pageContext.getAttribute("foo");

JSP还可以通过pageContext引用来得到任意作用域的属性,以及设置任意作用域的属性:

1.设置一个会话作用域属性:<% pageContext.setAttribute("foo", Object, PageContext.SESSION_SCOPE); %>

2.设置一个应用作用域属性:<% pageContext.setAttribute("foo", Object, PageContext.APPLICATION_SCOPE); %>

3.得到一个应用作用域属性:<% pageContext.getAttribute("foo", PageContext.APPLICATION_SCOPE); %>

指令有三种:

page指令、taglib指令、include指令

在JSP中禁用脚本元素:(只有这一种方法)

 <web-app>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>   //这个标记让JSP禁止使用脚本元素
true
</scripting-invalid>
</jsp-property-group>
</jsp-config>
</web-app>

在JSP中忽略EL:

方法一:在web.xml中指明:

 <web-app>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>   //这个标记表示忽略EL
true
</el-ignored>
</jsp-property-group>
</jsp-config>
</web-app>

方法二:或者通过page指令:

<%@ page isELIgnored="true" %>

动作 —— 标准动作和非标准动作:

 <jsp:include page="wickedFooter.jsp" />    //标准动作
<c:set var="rate" value="32" />    //非标准动作

Head First Servlets & JSP 学习笔记 第七章 —— 作为JSP的更多相关文章

  1. JVM学习笔记-第七章-虚拟机类加载机制

    JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...

  2. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  3. JSP学习笔记(一):JSP语法和指令

    一.语法 1.脚本程序的语法格式: 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. <% 代码片段 %> 2.中文编码问题 如果我们要在页面正常显 ...

  4. o'Reill的SVG精髓(第二版)学习笔记——第七章

    第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...

  5. Head First Servlets & JSP 学习笔记 第三章 —— MVC迷你教程

    临渊羡鱼,不如退而结网!是时候动手搞事情了! 我们的四大步骤: ①分析用户的视图(也就是浏览器要显示的东西),以及高层体系结构: (这个就是所谓的前端吧?用JSP?JSP可以当成Html来用吧?高层体 ...

  6. Head First Servlets & JSP 学习笔记 第十一章 —— Web应用部署

    jar:java archive(java归档) war:web archive(web归档) war文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式(它实际上就是一个jar文件).建立 ...

  7. Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用

    初始化参数:(init-param) 初始化参数写在web.xml文件中:(写在<servlet>标签内部) <servlet> <servlet-name>Bee ...

  8. Head First Servlets & JSP 学习笔记 第十三章 —— 过滤器的威力

    过滤器可能是最强大的Web应用开发工具了! 与Servlet非常类似,过滤器就是Java组件,请求发送到Servlet之前,可以用过滤器截获和处理请求:另外Servlet结束工作之后,但在响应发回给客 ...

  9. Head First Servlets & JSP 学习笔记 第六章 —— 会话状态

    MVC中的M(模型),通常就是一个普通的类,这个类里面的信息就是业务逻辑. 会话(Session) 我们可以使用一个HttpSession对象,来保存横跨多个请求的会话状态. HTTP协议使用的是无状 ...

随机推荐

  1. Excel转datatable

    如果想支持 .xls,.xlsx 两种格式 则必须安装一个exe文件,下载路径https://www.microsoft.com/zh-CN/download/details.aspx?id=1325 ...

  2. 使用deb 打包开发的postgres extension 另外一种方法

    已经写过一个deb 包打包的方法,我们同时也可以使用dpkg-deb 命令 安装依赖工具包 推荐安装全点的 sudo apt-get install build-essential autoconf ...

  3. Netty学习记录

    一.Netty简介 Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞.基于事件驱动.高性能.高可靠性和高可定制性. Netty 是一个 NIO client-s ...

  4. phpStudy2018 在win7下切换php7不成功解决办法

    phpstudy 由2016升级到2018后,在切换版本时,php5.6及以下版本可以正常切换,切换7.0以上的版本时访问页面报 0xc000007b 错误,网上找了很多方法都没能解决,最后发现是没装 ...

  5. Azure SQL 数据库仓库Data Warehouse (4) 2018 TechSummit 动手实验营

    <Windows Azure Platform 系列文章目录> 上传一下之前在2018 TechSummit的动手实验营:Azure数据仓库PaaS项目架构规划与实战入门 包含PPT和Wo ...

  6. Python 语言之 map/reduce

    1.相关文献 大名鼎鼎的Google论文<MapReduce: Simplified Data Processing on Large Clusters> 对应的中文翻译<MapRe ...

  7. UEFI和GPT下硬盘克隆后的BCD引导修复

    UEFI和GPT下硬盘克隆后的BCD引导修复-Storm_Center http://www.stormcn.cn/post/1901.html 当硬盘引导换成GPT,系统启动也变成UEFI后,如果直 ...

  8. 【ELK】之Centos6.9_x64安装elasticsearch6.2.1

    1.下载elasticsearch6.2.1 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.1 ...

  9. Python递归调用

    递归调用:在调用一个函数过程中,直接或间接又调用该函数本身,称之为递归调用 递归必备的2个阶段  1递推 2回溯 当递推结束后就可以进行回溯了 Python默认设置递归层数为1000 递归示例: de ...

  10. 使用虚拟化KVM安装RHEL7系统

    使用虚拟化KVM安装RHEL7系统 作者:Eric 微信:loveoracle11g 检查真实物理机是否支持虚拟化功能 [root@server ~]# grep vmx /proc/cpuinfo ...