Head First Servlets & JSP 学习笔记 第七章 —— 作为JSP
<%@ …… %> 这是指令
<%@ 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的更多相关文章
- JVM学习笔记-第七章-虚拟机类加载机制
JVM学习笔记-第七章-虚拟机类加载机制 7.1 概述 Java虚拟机描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- JSP学习笔记(一):JSP语法和指令
一.语法 1.脚本程序的语法格式: 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. <% 代码片段 %> 2.中文编码问题 如果我们要在页面正常显 ...
- o'Reill的SVG精髓(第二版)学习笔记——第七章
第七章:路径 所有描述轮廓的数据都放在<path>元素的d属性中(d是data的缩写).路径数据包括单个字符的命令,比如M表示moveto,L表示lineto.接着是该命令的坐标信息. 7 ...
- Head First Servlets & JSP 学习笔记 第三章 —— MVC迷你教程
临渊羡鱼,不如退而结网!是时候动手搞事情了! 我们的四大步骤: ①分析用户的视图(也就是浏览器要显示的东西),以及高层体系结构: (这个就是所谓的前端吧?用JSP?JSP可以当成Html来用吧?高层体 ...
- Head First Servlets & JSP 学习笔记 第十一章 —— Web应用部署
jar:java archive(java归档) war:web archive(web归档) war文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式(它实际上就是一个jar文件).建立 ...
- Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用
初始化参数:(init-param) 初始化参数写在web.xml文件中:(写在<servlet>标签内部) <servlet> <servlet-name>Bee ...
- Head First Servlets & JSP 学习笔记 第十三章 —— 过滤器的威力
过滤器可能是最强大的Web应用开发工具了! 与Servlet非常类似,过滤器就是Java组件,请求发送到Servlet之前,可以用过滤器截获和处理请求:另外Servlet结束工作之后,但在响应发回给客 ...
- Head First Servlets & JSP 学习笔记 第六章 —— 会话状态
MVC中的M(模型),通常就是一个普通的类,这个类里面的信息就是业务逻辑. 会话(Session) 我们可以使用一个HttpSession对象,来保存横跨多个请求的会话状态. HTTP协议使用的是无状 ...
随机推荐
- How to create an rpm package
转自:https://linuxconfig.org/how-to-create-an-rpm-package Rpm is both the package manager and the pack ...
- c++11模拟boost元占位符placeholder
准备实现meta programming的fold函数,发现自己缺少占位符实现,这样传入fold的transform op类(元函数)都不得不另外写个外覆类,其实我觉得没啥不好,简单直接,说实话干扰什 ...
- vue 项目全局修改element-ui的样式
引入了element-ui,但是和我们自己的样式颜色有很大的不同, 修改例子:在src文件下创建 element-var.scss,代码如下 $--color-primary: yellow; /* ...
- STM32_杂_01_串口代码
#include "stm32f10x.h" #include "serial.h" #include "rtthread.h" #incl ...
- 3076: 神经网络(bfs和拓扑排序)
3076: 神经网络 时间限制: 1 Sec 内存限制: 125 MB提交: 7 解决: 5[提交][状态][讨论版][命题人:外部导入][Edit] [TestData] [同步数据] 题目描述 ...
- storj白皮书v3最全面解读,Docker创始人的加入能否扳倒AWS S3
Storj新发了白皮书v3,地址是:https://storj.io/storjv3.pdf. 这次白皮书一共有90页,看完还真要费不少时间.如果你没有时间看,可以看一下我这篇快速技术解读. 上次St ...
- Redis为什么可以支持那么大的并发访问量?为什么redis没有单点并发瓶颈?
一是redis使用内存 而是redis使用多路复用的IO模型: 现代的UNIX操作系统提供了select/poll/kqueue/epoll这样的系统调用,这些系统调用的功能是:你告知我一批套接字,当 ...
- 长短记忆神经网络LSTM
转载: https://www.jianshu.com/p/dcec3f07d3b5 https://blog.csdn.net/dream_catcher_10/article/details/48 ...
- SYSAUX表空间清理
最近zabbix告警某业务sysaux表空间使用率超过95%,使用sql查看sysaux表空间设置了32G,32G的表空间竟然使用了95%.一般来讲除开业务数据存放的表空间,DBA要着重关注SYSTE ...
- python中定义的颜色
平时学习工作中,我们经常会接触到一些大佬写的Python实用工具,运行起来总会显示出五颜六色的背景,相关的定义在matplotlib模块中,为方便使用,这里给大家展示一下在这个模块中都定义了哪些选颜色 ...