wordpress网站加载效果,投资管理公司注册,公司的网站建设与维护,温州网站制作策划前言
在JavaWeb中#xff0c;jsp和servlet都扮演着重要的角色。如果你之前有看过我的一篇关于web容器的文章#xff08;https://blog.csdn.net/PANDORA_A/article/details/106903844#xff09;的话#xff0c;那你应该对jsp和servlet之间的关系有一定的了解#xff0c;简…前言
在JavaWeb中jsp和servlet都扮演着重要的角色。如果你之前有看过我的一篇关于web容器的文章https://blog.csdn.net/PANDORA_A/article/details/106903844的话那你应该对jsp和servlet之间的关系有一定的了解简单总结一下jsp运行时会被编译成servlet因此jsp本质上就是一种servlet。那么问题来了既然二者本质上是同一种东西那为什么需要分开成两个呢也就是说他们各自负责的功能是什么呢那么通过本篇文章希望你能对这两者有一个更深刻的了解。
1.回到最初的起点jsp和servlet是如何出现的
本章内容转载自https://zhuanlan.zhihu.com/p/42343690和https://zhuanlan.zhihu.com/p/69832497 1987年9月20日有人从北京向海外发出了中国第一封电子邮件。邮件内容为“Across the GreatWall we can reach every corner in the world(越过长城走向世界)”发送时间是北京时间1987年9月20日20时55分。这预示着互联网时代悄然叩响了中国的大门。
让我们将目光从中国转向海外。上世纪的90年代当时的互联网还是天地初开、一片混沌。而1995年以及随后的一年可谓群雄逐鹿风起云涌注定不平凡。而当时我还在家里玩泥巴。
1995年5月SUN公司发布了Java。名字取得很随意据说是因为那群创始人当时正好在咖啡店激烈讨论取什么名字。其中有一个人望着手中的咖啡突然灵机一动卧槽就叫Java吧。这就好比农村生娃老爹一看卧槽这孩子骨骼惊奇面相清秀就叫…二狗子吧的感觉一样一样的。几乎同年也不知道稍早还是稍晚反正不重要PHP也发布了。当时的人们还不知道它将被黑为“世界上最好的语言”。次年一个叫布兰登·艾奇Brendan Eich1961年的技术员应老板要求花了10天借鉴几大语言的优秀特性包括Java写出了LiveScript。而为了在发布时蹭Java热度扩大宣传不惜改名JavaScript。所谓慢工出细活所以…JavaScript只写了10多天自然是…好在后来也挽救回来了现在好歹是GitHub提交量最多的语言而前端这几年也是火得不行。
我们知道浏览器能通过解析html语句渲染出页面。
关键是这些html语句怎么来的是不是需要浏览器通过http请求某个页面然后服务器根据浏览器的请求通过http响应对应页面的html语句回去而服务器端是我们用Java开发的它用什么响应这一大堆html语句答案就是Servlet
随手用MyEclipse新建一个Servlet你会看到生成的Servlet默认的模板是这样的
关键是这些html语句怎么来的是不是需要浏览器通过http请求某个页面然后服务器根据浏览器的请求通过http响应对应页面的html语句回去而服务器端是我们用Java开发的它用什么响应这一大堆html语句答案就是Servlet随手用MyEclipse新建一个Servlet你会看到生成的Servlet默认的模板是这样的
可以看到Servlet的doGet()和doPost()方法体中有响应html片段的代码。这其实是上古时期开发习惯的“遗迹”。都2018年了MyEclipse还自作聪明以为你会在Servlet中手动输出HTML片段。诚然在早期的JavaWeb开发中我们的程序猿祖先确实有那么一段黑暗时光但那是因为当时还没有现在这么多、这么好用的模板和框架。
上古时代通常情况是美工写好html静态页面后丢给Java程序员。Java程序猿在Servlet中调用Service拿到数据后逐句复制html静态页面上的html语句到Servlet的中根据情况将后端的数据与html片段拼接在一起然后通过以下格式输出。
out.println(span用户名是user.age/span)而同时期的PHPhttp://ASP.Net就优秀得多了人家压根不搞你这繁琐的一套。它们选择在html页面中嵌入相应语言来引入动态数据避免了手动拷贝html片段输出的尴尬局面。
因为仔细想来我们的主要目的就是希望在最终输出的html的代码中嵌入后台数据罢了。除了把html语句拿出来在Servlet里拼接好再输出这种方式外我们也可以直接在html语句中写入动态数据注意不是HTML文件必须是JSP之类的动态模板文件中的HTML语句。而这两种几乎是完全相反的设计思路
一部分Java程序员一看就傻眼了我靠PHP还真是世界上最好的语言啊Web开发竟然如此之简单老子再也不想复制粘贴了于是转向了PHP或者其他语言的开发。就这样Java流失了一部分程序员。SUN公司一看这不行啊Java也要搞一个。于是JSP应运而生。
2.什么是jsp
JSP全称JavaServer Pages中文名叫java服务器页面其根本是一个简化的Servlet设计在传统的网页HTML标准通用标记语言的子集文件中插入Java程序段(Scriptlet)和JSP标记(tag)从而形成JSP文件。 JSP与HTML不同JSP是动态页面HTML是静态页面。换言之HTML可以直接访问而JSP需要在服务器上经历一次动态资源JSP到静态资源HTML的转化服务器会自动帮我们把JSP中的HTML片段和数据拼接成静态资源响应给浏览器最后响应给客户端的则是已经转换好的HTML文件然后客户端通过浏览器解析、展示。 简单来说JSP HTML Java片段 那么既然jsp会转化成html并且大部分人在刚开始学习jsp时也会认为jsp和html没多大区别为什么我们又说jsp本质上又是servlet呢 要明白这个问题我们需要先复习一下servlet是什么。
3.什么是servlet
Servlet是sun公司提供的一门用于开发动态web资源的技术Servlet运行在Tomcat容器当中。sun公司在其API中提供了一个servlet接口用户可以通过实现这个接口开发一个Java程序向处理客户端发出的请求和发出相应。 servlet属于服务器端程序主要功能在于交互式地浏览和修改数据生成动态Web内容。
servlet功能
jsp与servlet的关系
了解完servlet后我们可以来捋清他们俩之间的关系了。
联系 WEB容器接收到以.jsp为扩展名的URL的访问请求时它将把该请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序它负责解释和执行JSP页面。 每个JSP 页面在第一次被访问时JSP引擎将它翻译成一个Servlet源程序接着再把这个Servlet源程序编译成Servlet的class类文件然后再由WEB容器像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。 从二者的功能看jsp和servlet都可以交互式地浏览和修改数据生成动态Web内容。换言之二者都和服务器相关与服务器进行数据交互二者都能转化为html页面。
区别 虽然二者本质相同但是二者负责的内容有所差异jsp更注重前端显示支持html标签servlet更注重模型和业务逻辑。我们自己写代码的时候尽量能让它们各司其职不要意图写出万能的jsp或servlet来使得jsp或servlet代码变得臃肿不堪。