- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章版本历史&代码示例之:Servelt、JSP、EL表达式由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Servlet是一种基于Java的动态Web资源动态Web资源技术,类似的技术还有ASP、PHP等.
Servlet规范由Sun Microsystems公司创建,1.0版于1997年6月完成。从2.3版开始,该规范是在JCP下开发.
版本 | 发布日期 | 隶属于 | JSR版本 | 焦点说明 |
---|---|---|---|---|
1.0 | 1997.06 | - | - | 首个版本,由Sun公司发布 |
2.0 | 1997.08 | - | - | |
2.1 | 1998.11 | - | - | 新增了RequestDispatcher, ServletContext等 |
2.2 | 1999.08 | J2EE 1.2 | - | 成为J2EE的一部分。在.war文件中引入了self-contained Web applications的概念 |
2.3 | 2001.08 | J2EE 1.3 | JSR 53 | 增加了Filter,增加了关于Session的Listener(如HttpSessionListener) |
2.4 | 2003.08 | J2EE 1.4 | JSR 154 | 没增加大的新内容,对不严格的地方加了些校验,如:对web.xml使用XML Schema |
2.5 | 2005.09 | Java EE 5 | JSR 154 | 最低要求JDK 5。注解支持(如@WebService、@WebMethod等,注意不是@WebServlet这种哦) |
3.0 | 2009.12 | Java EE 6 | JSR 315 | 史上最大变革。动态链接库和插件能力(Spring MVC利用此能力通过ServletContainerInitializer 进行全注解驱动开发)、模块化开发、异步Servlet、安全性、新的文件上传API、支持WebSocket,新的注解(@WebServlet、@WebFilter、@WebListener),可脱离web.xml全注解驱动,此版本功能已经很完整了,应用的主流 |
3.1 | 2013.5 | Java EE 7 | JSR 340 | 新增非阻塞式IO。Spring的Web Flux若要运行在Servlet容器,至少需要此版本,因为从此版本起才有非阻断输入输出的支持 |
4.0 | 2017.09 | Java EE 8 | JSR 369 | 支持Http/2。从而支持服务器推技术,新的映射发现接口HttpServletMapping可用来提高内部的运行效率 |
5.0 | 2020.11 | Jakarta EE 9 | JSR 369 | 同Servlet 4.0(只是命名空间从javax.* 变为了jakarta.* 而已) |
Spring Boot相关:
说明:Spring Boot 2.6和2.7都还会基于Spring Framework 5.3.x内核。Spring Framework 6.0版本在2021年9月正式拉开序幕,将基于全新的Jakarta EE 9(命名空间为jakarta.*,不向下兼容)平台开发,相应的Spring Boot 3也会基于此内核 。
随着Spring 5的发布推出WebFlux,Servlet技术从之前的必选项变为可选项.
但考虑到业务开发使用WebFlux收益甚微但开发调试成本均增加,因此实际情况是基于Servlet的Spring MVC技术依旧是主流,暂时地位不可撼动,依旧非常活跃.
由于Servlet由Web容器负责创建并调用,因此只要实现了Servlet规范的Web容器均可作为它的实现(框架),如Tomcat、Jetty、Undertow、JBoss、Glassfish等.
导入依赖包:
scope一般provided即可,因为Web容器里会自带此Jar 。
Spring Boot场景下无需显示导入,因为Tomcat已内嵌(相关API) 。
继承HttpServlet写一个用于处理Http请求的Servlet处理器 。
IDEA添加(外置)Tomcat 9.x版本,以war包形式部署到Tomcat(小提示: war ),并启动Tomcat 。
浏览器http://localhost:8080/hello即可完成正常访问.
说明:自Servlet 3.0之后,web.xml部署描述符并非必须(全注解即可搞定) 。
工程源代码:https://github.com/yourbatman/BATutopia-java-ee 。
Java Server Page的简称。那么,有了Servlet为何还需要JSP?其实它俩都属于动态Web技术,只是Servlet它用于输出页面简直太繁琐了(每一句html都需要用resp.getWriter()逐字逐句的输出),所以才出现了JSP技术来弥补其不足.
它使用JSP标签在HTML网页中插入Java代码。语法格式为:<% Java代码 %>。它有九大内置对象这么一说:
除了Servlet。与JSP 强相关 的技术还有EL表达式和JSP标签(JSTL),下面会接着介绍.
由于JSP的本质就是Servlet,它的的版本号需要与Servlet对应看待.
版本 | 发布日期 | JSR版本 | 对应Servlet版本 |
---|---|---|---|
JSP 1.1 | 2000.07 | JSR 906 | Servlet 2.2 |
JSP 1.2 | 2002.06 | JSR 53 | Servlet 2.3 |
JSP 2.0 | 2003.11 | JSR 152 | Servlet 2.4 |
JSP 2.1 | 2005.09 | JSR 245 | Servlet 2.5 |
JSP 2.2 | 2009.12 | JSR 245(升级版) | Servlet 3.0 |
JSP 2.3 | 2013.05 | JSR 372(升级版) | Servlet 3.1 |
JSP 3.0 | 2020.11 | ----(Jakarta旗下) | Servlet 5.x |
Spring Boot相关:Spring Boot从1.x版本开始就一直没有“带”JSP一起玩,若要Spring Boot支持JSP需要特殊开启.
JSP 2.0是个重要版本,最重要的特性就是开始支持EL表达式了,可以用它来访问应用程序数据。JSP 2.3版本可断定是最后一个版本,因为JSP已走到尽头,成为历史.
JSP诞生之后,程序员写页面写得确实很爽了。但是,它带来了坏处:很多程序员同学将业务逻辑、页面展示逻辑都往JSP塞,耦合在一起,导致JSP扛不住了,更重要的是程序员扛不住了,非常凌乱.
虽然后面出现了EL表达式和JSTL标签来帮助程序员不要在JSP里写Java代码,但只要不是强制的你能限制住自由的程序员么?然后呢,后来出现了Freemarker和Velocity这种模板引擎,使得程序员没有办法在页面上写Java代码了,达到了分离的效果.
模板引擎出现后,JSP的地位已经岌岌可危了。但真正杀死它的还是前端的崛起,从而进入前后端完全分离的状态,至此基本可以宣布JSP(甚至包括模板引擎)的死亡.
所以JSP目前的生存状态是:基本死亡状态。你看,这不Spring Boot(默认)都不带他玩了嘛~ 。
与Servlet相同的Web容器.
导包。由于我们不可能直接使用JSP的API,因此99.9999%情况下无需导包.
创建webapp内容文件夹。这点很重要,因为是要创建一个web文件夹,以IDEA为例:在jsp-demo工程下添加web模块图片图片完成后工程目录结构如下:
完成后工程目录结构如下:
值得一提的是:web目录名称叫什么无所谓(只是很多喜欢叫webapp、webroot等),重要的是要有这个小圆点。不乏听见不少小伙伴说这个目录名必须叫webapp,其实它名字叫什么、甚至位置放在哪都无所谓,重要是找得到就行。掌握原理,一通百通.
这里附上HelloJsp的内容:
以war包形式部署至Tomcat图片浏览器访问下面两个路径均可得到响应结果:
页面响应:图片 。
再强调一遍:自Servlet 3.0之后,web.xml部署描述符并非必须。即使有jsp页面也是一样~~~ 。
工程源代码:https://github.com/yourbatman/BATutopia-java-ee 。
Expression Language表达式语言。EL表达式语言的灵感来自于ECMAScript和XPath表达式语言(表达式语言当然还有比较著名的Spring的SpEL,以及OGNL),它提供了在 JSP 中简化表达式的方法,目的是替代掉在Jsp里写Java代码,让Jsp的代码更加简化.
基本语法为:${EL表达式 },只能读取数据不能设置数据(设置数据用JSP内或者Servlet里的Java代码均可) 。
请务必注意,基本语法中右边的}的前面有个空格,使用时请务必注意 。
在EL中有四大域对象和11大内置对象这么一说:
值得注意的是,EL并非Web独享而是可独立使用,因此它的scope用默认的即可。另外,这只是API,并非Impl实现,是不能直接运行的,否则会遇到类似如下异常:
EL从JSP 2.0版本开始引入,用于在JSP页面获取数据的简单方式。因此它是随着JSP的发展而出现的,只是可独立使用而已.
版本 | 发布日期 | JSR版本 | 对应JSP版本 | 对应Servlet版本 |
---|---|---|---|---|
EL 2.0 | 2003.11 | JSR 152 | JSP 2.0 | Servlet 2.4 |
EL 2.2 | 2009.12 | JSR 245 | JSP 2.2 | Servlet 2.5 |
EL 3.0 | 2013.05 | JSR 341 | JSP 2.3 | Servlet 3.1 |
EL 4.0 | 2020.10 | 纳入Jakarta | JSP 3.0 | Servlet 5.0 |
EL表达式3.0于2013年4月份发布(可认为是最后一次功能升级),它的新特性包括:字符串拼接操作符、赋值(以前只能读取,现在可以赋值啦)、分号操作符、对象方法调用(以前只能用JavaBean属性导航)、Lambda表达式、静态字段/方法调用、构造器调用、Java8集合操作。具体就不一一举例了,详细情况可阅读我收录的JSR文档.
随着JSP的消亡,EL的存在感越来越弱.
好在它可以作为单独的表达式语言使用,有Hibernate Validator对它是强依赖,所以生命力还行。但由于Hibernate Validator里使用得简单,所以EL并没有必要再更新(动力不足).
EL大部分情况下伴随着JSP一起使用,所以交由Web容器去解析实现.
另外,EL作为一种表达式语言,也可以作为”工具“供以使用,比如著名的Hibernate Validator内部就依赖于EL表达式语言来书写校验规则(所以它在编译期就强依赖于EL的API).
在JSP中使用EL是由org.apache.tomcat:tomcat-jasper-el或者org.apache.tomcat.embed:tomcat-embed-jasper完成和JSP的整合,以及解析支持的。在JSP页面里使用方式由于已经过时(主要是使用示例一搜一大把),这里为了节约篇幅,就略了哈.
如果把EL当做工具使用的话(比如Hibernate Validator用来错误消息里插值用),需要了解一些API和常见用法,演示一下:
导包:
直接使用API书写Demo 。
工程源代码:https://github.com/yourbatman/BATutopia-java-ee 。
现在越来越卷的IT行业,衡量一个求职者的专业能力,深度往往比广度更为重要.
正所谓这辈子听过很多大道理,却依旧过不好这一生;技术也一样,听过/知道过/使用过很多技术,但依旧写不出好的代码。究其原因,就是理解不深刻.
自上而下的用,自底向上的学,这是我个人一直秉承的一个观念。知道一门技术、使用一门技术一般几个小时or几天就能大概搞定(毕竟如果一门技术入门很难的话也几乎不太可能大众化的流行起来),而理解一门技术的单位可能就是月、甚至是年了,这需要静下心来学习和研究.
原文链接:https://mp.weixin.qq.com/s/j14hlm5qk2wf0Pi3fNUvFA 。
最后此篇关于版本历史&代码示例之:Servelt、JSP、EL表达式的文章就讲到这里了,如果你想了解更多关于版本历史&代码示例之:Servelt、JSP、EL表达式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否可以让标准 Java EE servlet 容器将文件解释并呈现为 JSP,即使该文件没有 .jsp 扩展名? 假设我的 WAR 根目录中有一个名为 foo.xyz 的文件。该文件包含一些 jST
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我有几个通用元素(组件),它们会生成一些 html。似乎我的选择是创建一个 taglib,或者只是将该逻辑放入一个 jsp 页面并包含 jsp。 有什么不同?积极与消极? 最佳答案 Taglibs 允
我是 Ejb-JSP 的新手,对它知之甚少。我已经创建了一个 JSP 页面,它调用 Controller Servlet,而 servlet 调用 EJB。结构就像 JSP -> Servlet ->
我想编写一个自定义 JSP 标签,其输出包括其他 JSP 标签,这些标签本身也应该被动态评估。但显然我的一切TagSupport子类写入 pageContext.getOut()无需任何进一步评估,直
我有一个包含页面顶部内容的 JSP,我们称它为 header.jsp。出于性能原因,我想呈现此 JSP 并将其刷新给用户,然后再构建页面的其余部分。 (有关性能优势的解释,请参阅 here。) 我能想
我发现自己在处理一些旧的 JSP,想做一些简单的事情,比如以 dd/mm/yyyy 格式显示今天的日期 好像没那么简单, 到目前为止,我已经导入了 java.util.* 我试过很多东西 String
关于 JSP 标签字符集的简单问题。 mytag很简单。 tag文件位于 WEB-INF/tags .这个文件在 Eclipse 中的字符集是 UTF-8。出于某种原因,UTF-8 符号无法
这让我很吃惊!我的 JSP 中有以下代码。 在我重构 SlideShow 类并公开所有属性并删除 getter/setter 之前,这段代码一直有效。所以在我看来,EL 只适用于 getter 而不
现有的一组 JSP,用英文字段标签、javascript 错误/信息消息、图像“alt”消息等硬编码,需要多语言化。 将这些 JSP 转换为使用标准 Java 多语言功能(资源包、语言环境等)的最佳方
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题
我已经在 Tomcat 6.0 下部署了我们的 War 到 Linux 服务器。在那个 Linux 机器上,我们没有打开浏览器的权限。 是否可以从命令行执行 JSP? 最佳答案 您可以使用其中 wge
有没有人建议为 JSP 设置最佳缓冲区大小?您可以使用以下页面指令在 JSP 中设置缓冲区大小 我的问题如下 我的理解是,您使用的缓冲区大小越小,客户端浏览器的性能就越好。我的假设正确吗?如
我们正在使用 JBoss 7.1.3.Final 和 Java 6。我想将 UTF-8 页面编码应用于我们网站上提供的所有 JSP 页面,因此我将其添加到我们的 web.xml 文件中
学过jsp native,想包含动态文件。我想使用 include 调用动态页面 这段代码 如果我输入 dashboard.jsp?p=about 页面打开“pages/a
在我的 JSP 页面中,我希望链接转发到另一个 JSP 页面。当用户在 home.jsp 上时,我希望他们转到 login.jsp 等。我遇到的问题是无法找到 JSP,除非我将页面放在项目文件夹中(在
我正在尝试在新的grails应用程序中使用index.jsp切换index.gsp。我将默认的index.gsp重命名为not_index.gsp,并添加了index.jsp。现在,我收到以下错误。
是否可以从服务器端 jsf 代码将资源打开到新的浏览器选项卡(如命令按钮的 target="_newtab")? 以下代码在同一选项卡中打开资源: FacesContext.getCurrentIns
我想问一个关于 .jsp 的问题。使用 jsp 语法(例如 )和 XML 语法(例如 ... )有什么不同。使用其中一种语法是否有维护或某种 advs?谢谢。 最佳答案 原始的 语法更加紧凑,但如
JSP 文件是否有行业标准命名约定? 我遇到过来自不同来源的三种约定: 全部小写 (thisismyfile.jsp) 首字母小写的驼峰式大小写 (thisIsMyFile.jsp) 首字母大写的驼峰
我是一名优秀的程序员,十分优秀!