JSP学习笔记
速成
导论
什么是JSP?
用处:创建Web应用程序。
对比Servlet:功能更多,如表达式语言、JSTL
组成:一个JSP页面由HTML和JSP标签组成。JSP页面比Servlet更容易维护,原因是设计与开发分离。
额外的功能:表达式语言、自定义标签。
JSP相对于Servlet的优势
对Servlet的扩展
JSP技术是对Servlet的扩展,在JSP中可以用Servlet的所有功能。
此外,JSP中还可以使用隐含对象、预定义标签、表达式语言和自定义标签等,使JSP开发更加简单
易于维护
JSP业务逻辑和表现逻辑分开,在Servlet技术中,我们将业务逻辑与表现逻辑混合在一起。
快速开发,不需要重新编译和部署
JSP页面修改之后,不需要重新编译和部署。
更少的代码
JSP中的各类标签可以减少代码
JSP的目录结构
JSP页面部署要点:把JSP页面放在WEB-INF文件夹之外的目录


JSP API
JSP API由两个包组成
javax.servlet.jsp
javax.servlet.jsp.tagext
javax.servlet.jsp包有两个接口和类
接口如下
JspPage
HttpJspPage
类如下:
JSP脚本元素
JSP中,可以使用脚本元素在jsp页面编写代码。
脚本元素提供了在jsp中插入java代码的能力。
一共有三种类型的脚本元素
1 | 脚本标签 <% java source code %> |
系统
JSP和JSTL
主要内容

JSP基础语法
简介
JSP:javaServer Page SUN公司提供的动态网页编程技术,是java web 服务器端的动态资源
和html相比:html只能提供静态数据,而jsp技术允许在页面中嵌套java代码,为用户提供动态数据
相比servlet而言,更容易排版
不管是JSP还是servlet都可以用于开发动态web资源,但是由于这两门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用
其实JSP就是一个Servlet,当我们第一次访问jsp的时候,jsp引擎都会将这个jsp翻译成一个servlet,这个问价存在tomcat(源码目录)中的work目录中
注释
在JSP中支持两种注释的语法操作
一种是显示注释,这种注释是允许客户端看见的;另一种是隐式注释,此种注释是客户端无法看见的
1、显示注释语法:从HTML风格继承而来
2、隐藏注释语法:从JAVA风格继承;JSP自己的注释
JSP的三种注释方式
1 | 1、//注释,单行注释/*多行注释*/ |
Scriptlet
在JSP中最重要的部分就是Scriptlet(脚本小程序),所有嵌入HTML代码中的java程序。
在jap中一共有三种Scriptlet代码:都必须使用Scriptlet标记出来
1 | 第一种<% %>: java脚本段,可以定义局部变量、编写语句 |
但是现在不建议这样写(脚本和html写一起),因为这样写会导致页面耦合度非常高。
通过观察解析为java文件的代码jsp代码理解三种小脚本
1 | <%-- |
JSP的指令标签
include静态包含
使用包含操作,可以将一些重复的代码包含进来继续使用,从正常的页面组成来看,有时可能分为几个区域,而其中的一些区域可能是一直不需要改变的,改变的就其中的一个具体内容区域,现在又两种方法可以实现上述功能。
方法一:再每个JSP页面(HTML)都包含工具栏、头部信息、尾部信息、具体内容
方法二:将工具栏、头部信息、尾部信息都分成各个独立的文件,使用的时候直接导入
很明显,第二种方法比第一种更好,第一种会存在很多重复的代码,并且修改很不方便,再JSP中如果想要实现包含操作,有两种做法:静态包含、动态包含,静态包含使用include指令即可,动态包含则需要使用include动作标签。
示例代码
1 | <%-- |
静态包含就是将内容进行了直接的替换,就好比程序中定义的变量一样 是在servlet引擎转译的时,就把此文件内容包含了进去(两个文件的源代码整合到一起,全部放到_jspService方法中),所以只生成了一个servlet,所以两个页面不能有同名的变量。运行效率高一点点。耦合性较高,不够灵活。
include动态包含
1 | <%@ include file = "要包含的文件路径" %> </jsp:include> |
动态包含在代码的编译阶段,包含和被包含部分是两个独立的部分,只有当运行时,才会动态包含进来,
注意:动态包含,中间不要加任何内容,包括空格,除非确认要使用参数,否则报错!
1 | <%-- |
JSP四大域对象
四种属性的范围
在JSP中提供了四种属性的保存范围,所谓的属性保存范围,指的就是一个设置的对象,可以在多少个页面中保存并可以继续使用
就是说属性什么时候失效
1、page范围
pageCountext:只在一个页面中保存属性,跳转之后无效
2、request范围
request:只在一次请求中保存,服务器跳转后依然有效
3、session范围
session:在一次会话范围中,无论何种跳转都可以使用
4、appliction范围
application: 在整个服务器上保存

验证属性范围的特点
1、page
本页面取得,服务器端跳转( < jsp:forward > )后无效
2、request
服务器跳转有效,客户端跳转无效
如果是客户端跳转,则想打能与发出了两次请求,那么第一次的请求将不存在了;如果希望不管是客户端还是服务器跳转,都能保存的话,就需要继续扩大范围。
在自己设计的代码中,尽可能多的使用request比较合理
3、session
无论客户端还是服务器端都可以取得,但是现在重新开启一个新的浏览器,则无法取得之前设置的session了,因为每一个seesion只保存在当前的浏览器中,并在相关的页面取得。
对于服务器而言,每一个连接到它的客户端都是一个session
如果想要让属性设置一次之后,不管是否是新的浏览器打开都能取得则可以使用application
4、application
所有application属性直接保存在服务器上,所有的用户(每一个session)都可以直接访问取得
只要通过application设置的属性,则所有的session都可以取得,表示公共的内容,但是如果此时服务器重启了,则无法取得了,因为关闭服务器后,所有属性都消失了,所以需要重新设置。




