JSP学习思维导图一、什么是JSP? JSP(java Server Pages)是一种跨平台的动态网页技术,在静态网页中嵌入JAVA代码和JSP标记(tag),由Web服务器中的JSP引擎来进行编译并执行嵌入的JAVA代码,生成页面信息返回给客户端。二、JSP的优势(1) JSP开发的Web应用是跨平台的,即能在linux下运行,也能在其他操作系统上运行。(2) JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。(3)JSP支持服务器端组件。JSP可以使用成熟的JAVA BEANS 组件来实现复杂商务功能。(4)JSP具有强大的可伸缩性。从只有一个小的.Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台application进行事务处理,消息处理。(5)JSP标签可扩充性。JSP技术允许开发者扩展JSP标签,定制JSP标签库,所以网页制作者充分利用与xml兼容的标签技术强大的功能,大大减少对脚本语言的依赖.由于定制标签技术,使网页制作者降低了制作网页的复杂度。三、JSP的劣势(1)正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。(2)java的高效率运行需要占用大量的内存和硬盘空间. 一方面,java的高速运行是通过 .class文件常驻内存来实现的.另一方面,还需要硬盘空间来存储一系列的.java 文件和.class文件以及对应的版本文件。四、JSP与PHP的比较| 项目 | PHP | JAVA |
| 可复用性 | 低 | 高 |
| 开发速度 | 快 | 慢 |
| 易维护性 | 差 | 优 |
| 可移植性 | 优-Linux | Windows、Unix |
| Unix安全性 | 低 | 高 |
| 开发费用 | 低 | 高 |
| 多层架构 | 差 | 优 |
| 数据库访问 | 接口不统一 | 接口统一 |
| 可扩展性 | 差 | 优 |
| 面向对象 | 差 | 优 |

JSP工作原理
JSP执行过程 WEB容器(Servlet引擎)接收到以.jsp为扩展名的URL的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面,具体工作流程如下:(1) 每个JSP页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,在转换过程中如果发现JSP文件有语法错误,转换过程将中断,并向服务端和客户端输出出错信息;(2) 如果转换成功,JSP引擎用javac把该Java源文件编译成相应的.class文件并将该.class文件加载到内存中。(3)创建一个该Servlet的实例,并执行该实例的jspInit()方法(jspInit()方法在Servlet的生命周期中只被执行一次)。(4)创建并启动一个新的线程,新线程调用实例的jspService()方法,Servlet容器会把浏览器的请求和对浏览器的回应封装成HttpServletRequest和HttpServletResponse对象作为参数传递到jspService()方法中。(对于每一个请求,JSP引擎会创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程,每个客户端请求对应一个线程)。(5)jspService()方法执行后会将HTML内容返回给客户端。
(6) 如果JSP文件被修改了,服务器将对该文件进行重新编译。如果需要重新编译,则将编译结果取代内存中的Servlet,并继续上述处理过程。 如果在任何时候由于系统资源不足,JSP引擎将以某种不确定的方式将Servlet从内存中移去。当这种情况发生时,先调用jspDestroy()方法, 然后Servlet实例便被标记加入“垃圾收集”处理。
六、JSP的九大内置对象(1) 内置对象特点
| 分类 | 对象 |
| 输出输入对象 | request、response、out |
| 通信控制对象 | pageContext、session、application |
| Servlet对象 | page、config |
| 错误处理对象 | exception |
| 作用域 | 对象 |
| request | request |
| session | session |
| page | response、out、pageContext、config、page、exception |
| application | application、 |
JSP编译指令是通知JSP引擎的消息,在将JSP编译成 Servlet 时起作用,处理指令通常可替换成 Java脚本,是 JSP脚本的标准化写法。它不直接生成输出。编译指令都有默认值。
语法格式:<%@ 编译指令名 属性名="属性值"...%>
(1) page指令:该指令是针对当前页面的指令,对整个页面有效,主要用来设定一些参数,比如contentType,language等。
(2) include指令:用于指定包含另一个页面(静态包含),在进行jsp向servlet转换之前,首先是将inclue file里面的内容执行,然后再进行转换,最终只会转换成为一个单一的servlet。
(3) taglib指令:用于定义和访问自定义标签。
八、JSP的七个动作指令动作指令与编译指令不间,编译指令是通知 Servlet 引擎的处理消息,而动作指令只是运行时的脚本动作。
(1)forward指令:用于将页面响应转发给另外的页面。既可以转发给静态的HTML页面,也可以转发到动态的JSP页面,或者转发到容器中的Servlet。
执行forward指令转发请求时,客户端的请求参数不会丢失。
执行forward指令转发请求时,用户请求的地址没有发生变化,但页面内容完全变为被forward目标页的内容。
(2)include指令:是一个动态include指令,也用于导入某个页面,它不会导入被include页面的编译指令,仅仅将被导入页面的body内容插入本页面。
静态include和动态include的区别:静态include是把父页面和包含进来的页面,代码合并后,才一起翻译成servlet,反馈到前台,形成一个HTML页面(编译是发生)。动态include是把父页面和包含进来的页面单独编译,单独翻译成servlet后,在前台拼成一个HTML页面(请求时发生)。
(3) useBean指令:表示用来在JSP页面中创建一个BEAN实例并指定它的名字以及作用范围。
(4) getPRoperty指令:表示获取BEAN的属性的值并将之转化为一个字符串,然后将其插入到输出的页面中。
(5) setProperty指令:表示用来设置Bean中的属性值。
(6) plugin指令:表示执行一个applet或Bean,有可能的话还要下载一个Java插件用于执行它。
(7)param指令:用于设置参数值。
九、JSP标准标签库:JSTLJSP的标签函数库主要分为五大类:
JSTL | 前置名称 | URI | 范例 |
核心标签库 | c | http://java.sun.com/jsp/jstl/core | <c:out> |
I18N格式标签库 | fmt | http://java.sun.com/jsp/jstl/fmt | <fmt:formatDate> |
SQL标签库 | sql | http://java.sun.com/jsp/jstl/sql | <sql:query> |
XML标签库 | Xml | http://java.sun.com/jsp/jstl/xml | <x:forEach> |
函数标签库 | fn | http://java.sun.com/jsp/jstl/functions | <fn:split> |
核心标签库:
功能分类 | 标签名称 |
表达式操作 | out、set、remove、catch |
流程控制 | if、choose、when、otherwise |
迭代操作 | forEach、forTokens |
URL操作 | import、param、url、redirect |
所有EL都是以${为起始、以}为结尾的。
EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:${sessionScope.user.sex}等于${sessionScope.user["sex"]}
. 和 [ ] 也可以同时混合使用:${sessionScope.shoppingCart[0].price}
新闻热点
疑难解答