java ee jsp_EE JSP:Servlet的反向外套

java ee jsp

仅当页面数量少或需要对生成的内容(二进制PDF等)进行精细控制时,才可以从Servlet生成HTML。 对于大多数应用程序,输出将是HTML,我们需要一种更好的方法来完成此操作。 这就是JSP(Java服务器页面)出现的地方。

使用JSP,您可以编写并关注文件中HTML内容。 只有在内容之间需要动态或条件逻辑时,才插入Java代码,称为Scriptlet。 当应用程序服务器处理JSP页面时,它将自动生成一个Servlet类,将这些JSP文件的内容写出(就像您以前用PrintWriter编程编写它一样)。 无论JSP中的Scriptlet在哪里,它都会内联在生成的Servlet类中。 生成的jsp servlet类全部由应用程序中的应用程序服务器自动管理,编译和部署。 简而言之,JSP只不过是Servlet的反向外壳。

这是一个简单的JSP示例,可以打印Hello World和服务器时间戳。

<!DOCTYPE html>
<html><body><p>Hello World!</p><p>Page served on <%= new java.util.Date()%></p></body>
</html>

只需将其另存为基于src/main/webapp maven的文件夹中名为hello.jsp文本文件, hello.jsp在NetBeans IDE中运行。 对于JSP,您不需要像Serlvet中那样配置URL映射,并且可以从上下文路径直接访问URL映射。 例如,以上内容应通过http:// localhost:8080 / hello.jsp URL在浏览器中显示。

请注意,该示例还显示了如何嵌入Java代码。 您可以在<%= %> scriptlet内放置一个方法或对象,它将使用结果对象的toString()方法输出连接到scriptlet标记之外HTML。 您也可以使用<%! %>定义新方法<%! %> <%! %> scriptlet标记,或使用<% %> scriptlet执行任何不会生成输出的代码。 注意,您也可以在JSP中的<%-- --%> scriptlet之间添加注释。

JSP还允许您插入“页面指令”以控制JSP容器如何呈现结果。 例如,您可以通过将其插入页面顶部来更改结果内容类型

<%@ page contentType="text/txt" %>

另一个经常使用的页面指令是import Java package,因此您无需在每个Java语句行上添加前缀。

<%@ page imporet="java.util.*" %>...<p>Page served on <%= new Date()%></p>

您可以使用更多指令。 请查看JSP规范文档以获取更多详细信息。

除了插入自己的Java代码之外,JSP还预定义了一些无需声明即可直接访问的变量。 这是显示大多数这些内置隐式变量的示例。

<!DOCTYPE html>
<html><body><h1>JSP Examples</h1><p>Implicit Variables</p><table><tr><td>Name</td><td>Instance</td><td>Example</td></tr><tr><td>applicationScope</td><td>${applicationScope}</td><td>${applicationScope['myAppName']}</td></tr><tr><td>sessionSope</td><td>${sessionSope}</td><td>${sessionSope['loginSession']}</td></tr><tr><td>pageScope</td><td>${pageScope}</td><td>${pageScope['javax.servlet.jsp.jspConfig']}</td></tr><tr><td>requestScope</td><td>${requestScope}</td><td>${requestScope['foo']}</td></tr><tr><td>param</td><td>${param}</td><td>${param['query']}</td></tr><tr><td>header</td><td>${header}</td><td>${header['user-agent']}</td></tr><tr><td>cookie</td><td>${cookie}</td><td>${cookie['JSESSIONID']}</td></tr><tr><td>pageContext</td><td>${pageContext}</td><td>${pageContext.request.contextPath}</td></tr></table><p>Page served on <%= new java.util.Date()%></p></body>
</html>

在上面的示例中,我使用JSP表达式语言(EL)语法而不是
<%=%>脚本。 EL更紧凑,更易于读取,但是它只能读取存在于任何请求,会话或应用程序范围中的变量。 EL使用DOT表示法访问对象变量中的字段甚至嵌套字段。 假设这些字段具有相应的getter方法。 EL还可以使用“ myMap [key]”格式访问地图,或使用“ myList [index]”语法访问列表。 这些隐式变量中的大多数都可以作为Map对象访问,并且它们主要从请求上的ServletHttpRequest对象公开,就像您从自己的Servlet类中公开的ServletHttpRequest

JSP可以被视为Web应用程序中的模板语言。 它有助于生成应用程序的“ VIEW”部分。 它使您或团队中的创作者可以专注于HTML以及内容的外观。 它可以帮助更轻松地构建更大的Web应用程序。 不过,在JSP文件中使用过多和复杂的逻辑Java代码时要小心,因为它将使调试和读取变得更加困难。 尤其是当您有抛出异常的Java语句时。 stacktrace中的行号将更难跟踪并与您的Scriptlet代码匹配。 还要想象一下,如果您开始在JSP文件中包含JavaScript代码,那么它可能会变得非常混乱。 最好将它们保存在单独的文件中。 如果必须将Java代码嵌入JSP,请尝试将其包装在一行Java调用调用中。 更好的方法是,尝试使用Servlet代码处理请求,并通过将它们插入请求作用域空间中,然后将其转发到JSP文件进行渲染,来生成需要在JSP中显示的所有数据。 使用这种模式,您实际上可以限制JSP中scriptlet的使用,并且仅使用EL和JSP标记。

  • 您可以在GitHub的jsp-example中找到上述代码。

翻译自: https://www.javacodegeeks.com/2015/01/ee-jsp-the-reversed-jacket-of-servlet.html

java ee jsp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 | 结构体指针

C语言指向结构体变量的指针在C语言中&#xff0c;指向结构体对象的指针变量既可以指向结构体变量&#xff0c;也可指向结构体数组中的元素。指针变量的基类型必须与结构体变量的类型相同。C语言中允许 &#xff08;*p&#xff09;.num用p->num来代替 ->代表一个箭头 p-&g…

计算机网络安全管理协议,河西学院校园网络安全管理协议

第一条 总 则一.河西学院校园网络接入单位的所有用户必须遵守《中华人民共和国计算机信息网络国际联网管理暂行规定》、《河西学院校园网络管理暂行规定》及国家有关法律法规&#xff0c;严格执行安全保密制度&#xff0c;并对所提供的信息负责。二.河西学院校园网络的所有用户…

C语言 | 变量的存储方式

C语言动态存储方式与静态存储方式静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式&#xff1b;动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式。内存中的供用户使用的存储空间可以分为3部分&#xff0c;程序区静态存储区动态存储区全局变量…

设计模式装饰者模式_装饰者模式如何拯救了我的一天

设计模式装饰者模式在工作中&#xff0c;我正在处理庞大的Java代码库&#xff0c;该代码库是由许多不同的开发人员在15年的时间里开发的。 并不是所有的事情都由书来完成&#xff0c;但是同时我通常无法重构遇到的每一个奇怪的事物。 尽管如此&#xff0c;仍可以每天采取提高代…

初学者选黑卡还是微单_明日之镜 十年索尼微单和他的镜头王国

2010年索尼微单诞生&#xff0c;与之一同而来的还有全新的E卡口。十年间&#xff0c;E卡口从APS-C走向了全画幅&#xff0c;从静态影像走向了专业摄像。并且准瞬间通过机器与机器、镜头与镜头架起了消费级与专业级的桥梁。想来一个卡口创作无限界大抵就是如此吧。起源一枚扫街用…

建德有没有计算机培训,建德计算机培训,建德计算机培训班,建德计算机培训完好找工作吗 - IT教育频道...

建德计算机培训首页>计算机> 建德计算机培训作者&#xff1a;镀金池 发布时间&#xff1a;2018-10-09在面向对象编程中&#xff0c;我们见过对象(object)。若是Context 对象想要在办事外部的事务产生时被告诉&#xff0c;那就需要把本身注册到办事的监听器中。将请求天…

C语言 | 字符数组

C语言字符数组的定义字符数组是用来存放字符数据的数组&#xff0c;字符数组中的一个元素存放一个字符&#xff0c;定义字符数组的方法和定义数值型数组的方法类似。//例子&#xff1a;char character[10];C语言字符数组的初始化C语言对字符数组初始化&#xff0c;最容易理解的…

python删除字符串中指定_python删除字符串中指定字符

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

linux暗转旧版java_Java旧版不断发展

linux暗转旧版java最近&#xff0c;我偶然发现了JDK API的一个非常有趣的警告&#xff0c;即Class.getConstructors()方法。 它的方法签名是这样的&#xff1a; Constructor<?>[] getConstructors()有趣的是&#xff0c; Class.getConstructor(Class...)返回一个Constr…

北科大计算机技术研招考纲,北京科技大学2021年全国硕士研究生招生考试自命题科目考试大纲...

中国民用航空飞行学院2021年硕士研究生招生考试初试自命题科目大纲已公布&#xff0c;考研大纲是规定全国硕士研究生入学考试相应科目的考试范围、考试要求、考试形式、试卷结构等权威政策指导性考研用书。本文整理“北京科技大学2021年全国硕士研究生招生考试自命题科目考试大…

C语言和指针的本质是什么?技术大神给出答案

很多编程语言都以 “没有指针” 作为自己的优势来宣传&#xff0c;然而&#xff0c;对于C语言&#xff0c;指针却是与生俱来的。那么&#xff0c;什么是指针&#xff0c;为什么大家都想避开指针。很简单&#xff0c; 指针就是地址&#xff0c;当一个地址作为一个变量存在时&…

fastdfs的tracker启动之后一直选举_jraft选举策略

一、角色划分Follower&#xff1a;完全被动&#xff0c;不能发送任何请求&#xff0c;只接受并响应来自leader 和 candidate 的 message&#xff0c;每个节点启动后的初始状态一定是follower&#xff1b;Leader&#xff1a;处理所有来自客户端的请求&#xff0c;以及复制 log到…

西电计算机考研数学,西安电子科技大学21考研数学高分上岸学长经验分享

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼写在前面&#xff1a;(这里我只介绍自己用过的书和跟过的老师)21考研上岸西电(西安电子科技大学)&#xff0c;总分386&#xff0c;数学一131够用&#xff0c;感觉22数学一会是比较难的一年&#xff0c;拉开差距的关键关于22考研数学…

java 事件通知_正确获取Java事件通知

java 事件通知实现观察者模式以提供Java事件通知似乎是一件容易的事。 但是&#xff0c;容易陷入一些陷阱。 这是我在各种场合不慎造成的常见错误的解释…… Java事件通知 让我们从一个简单的bean StateHolder开始&#xff0c;它封装了带有适当访问器的私有int字段state &…

C语言 | 二维数组

C语言二维数组的定义一般形式 类型说明符 数组名[常量表达式][常量表达式]int a[10][6],b[3][4];用矩阵形式表示二维数组&#xff0c;是逻辑上的概念&#xff0c;能形象地表示出行列关系&#xff0c;而在内存中&#xff0c;各元素是连续存放的&#xff0c;不是二维的&#xff0…

C语言 | 一维数组

C语言一维数组的定义一般形式类型符 数组名[常量表达式]C语言使用一维数组注意事项数组名的命名规则和变量名相同&#xff0c;遵循标识符命名规则。在定义数组时&#xff0c;需要指定数组中元素的个数&#xff0c;方括号中的常量表达式用来表示元素的个数&#xff0c;即数组长度…

计算机网络教学方式探讨论文,学生老师论文,关于关于高中计算机网络教学效率提升相关参考文献资料-免费论文范文...

导读:本论文是一篇免费优秀的关于学生老师论文范文资料&#xff0c;可用于相关论文写作参考。(山东省新泰市第一中学 山东新泰 271200)摘 要&#xff1a;随着计算机网络的发展和快速普及,计算机网络教学已经逐步进入高中课堂中,与传统教学模式优势互补,成为学生学习的好帮手.该…

小程序可不可以汉字命名_不可将您的方法命名为“等于”

小程序可不可以汉字命名&#xff08;当然&#xff0c;除非您确实重写了Object.equals() &#xff09;。 我偶然发现了用户Frank提出的一个非常奇怪的Stack Overflow问题 &#xff1a; 为什么Java的Area&#xff03;equals方法不能覆盖Object&#xff03;equals&#xff1f; 有…

怎样删去csv中重复行_4个锦囊,祝你快速删去Excel中的重复数据

快速删去重复数据&#xff0c;雷哥在这里提供4种超简单的解决方法&#xff0c;大家一看就会。为了更加直接明了地说明&#xff0c;雷哥在这里通过具体案例进行讲解。案例&#xff1a;下图B列日期中&#xff0c;橘黄色部分是我们已经标记好颜色的重复项。要求&#xff1a;快速删…

C语言通过printf()设置输出显示方式

在调试程序时多数情况下要输出很多提示信息&#xff0c;通过控制输出字体的颜色的显示方式可以方便我们快速查看有用的信息&#xff0c;而printf()的终端转义就为我们提供了这样的手段。我们大家知道在程序结尾加上\n就可在输出的时候换行&#xff0c;其实这就是个转义字符。而…