当前位置: 首页 > news >正文

Servlet与JSP的区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、基本概念 

          1.1 Servlet

          Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

          1.2 JSP      

          JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。

     JSP是一种脚本语言,包装了Java Servlet系统的界面,简化了Java和Servlet的使用难度,同时通过扩展JSP标签(TAG)提供了网页动态执行的能力。JSP提供了一套简单的标签,和HTML融合的比较好,可以使不了解Servlet的人可以做出动态网页来。对于Java语言不熟悉的人,会觉得JSP开发比较方便。JSP修改后可以立即看到结果,不需要手工编译,JSP引擎会来做这些工作;而Servelt缺需要编译,重新启动Servlet引擎等一系列动作。但是在JSP中,HTML与程序代码混杂在一起,而Servlet却不是这样。下面我们对JSP的运行来做一个简单的介绍,告诉大家怎样来执行一个JSP文件:当Web服务器(或Servlet引擎,应用服务器)支持JSP引擎时,JSP引擎会照着JSP的语法,将JSP文件转换成Servlet代码源文件,接着Servlet会被编译成Java可执行字节码(bytecode),并以一般的Servlet方式载入执行JSP语法简单,可以方便的嵌入HTML之中,很容易加入动态的部分,方便的输出HTML。在Servlet中输出HTML缺需要调用特定的方法,对于引号之类的字符也要做特殊的处理,加在复杂的HTML页面中作为动态部分,比起JSP来说是比较困难的。

二、两者之间的联系和区别

【1】JSP第一次运行的时候会编译成Servlet,驻留在内存中以供调用。

【2】JSP是web开发技术,Servlet是服务器端运用的小程序,我们访问一个JSP页面时,服务器会将这个JSP页面转变成Servlet小程序运行得到结果后,反馈给用户端的浏览器。

【3】Servlet相当于一个控制层再去调用相应的JavaBean处理数据,最后把结果返回给JSP。

【4】Servlet主要用于转向,将请求转向到相应的JSP页面。

【5】JSP更多的是进行页面显示,Servlet更多的是处理业务,即JSP是页面,Servlet是实现JSP的方法。

【6】Servlet可以实现JSP的所有功能,但由于美工使用Servlet做界面非常困难,后来开发了JSP。

【7】JSP技术开发网站的两种模式:JSP + JavaBean;JSP + Servlet + JavaBean(一般在多层应用中, JSP主要用作表现层,而Servlet则用作控制层,因为在JSP中放太多的代码不利于维护,而把这留给Servlet来实现,而大量的重复代码写在JavaBean中)。

【8】二者之间的差别就是,开发界面是JSP直接可以编写。

比如在JSP中写Table标记:<table>[数据]</table>;

Servlet需要加入:out.println(“<table>[数据]</table>”)。

JSP文件在被应用服务器(例如:Tomcat、Resin、Weblogic和Websphere),调用过之后,就被编译成为了Servlet文件。也就是说在网页上显示的其实是Servlet文件。Tomcat下面JSP文件编译之后生成的Servlet文件被放在了work文件夹下,JSP中的HTML代码在Servlet都被out出来,而JSP代码按照标签的不同会放在不同的位置。

【9】JSP中嵌入JAVA代码,而Servlet中嵌入HTML代码。

【10】在一个标准的MVC架构中,Servlet作为Controller接受用户请求并转发给相应的Action处理,JSP作为View主要用来产生动态页面,EJB作为Model实现你的业务代码。

 

转载于:https://my.oschina.net/lsl1991/blog/685775

相关文章:

  • swift学习笔记-UI篇之UIImageView
  • 我有几个粽子,和一个故事
  • openstack dnsmasq彭祖
  • WSS与Project Server集成 - Chatterley - 博客园
  • mysql 5.6 原生Online DDL解析
  • 第二阶段个人总结11
  • HDU 2073 无限的路
  • kettle 数据迁移 (转)
  • 利用R语言进行交互数据可视化(转)
  • linq pad
  • learning python paramiko --one
  • 学习笔记之15道简单算法题
  • JS处理URL详解图
  • post插件
  • JS 中的深拷贝与浅拷贝
  • [Vue CLI 3] 配置解析之 css.extract
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • CentOS7 安装JDK
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • C语言笔记(第一章:C语言编程)
  • Django 博客开发教程 16 - 统计文章阅读量
  • ES6 学习笔记(一)let,const和解构赋值
  • Gradle 5.0 正式版发布
  • gulp 教程
  • Hibernate【inverse和cascade属性】知识要点
  • iOS | NSProxy
  • JavaScript的使用你知道几种?(上)
  • javascript面向对象之创建对象
  • Java方法详解
  • Lucene解析 - 基本概念
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 二维平面内的碰撞检测【一】
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 如何选择开源的机器学习框架?
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 最近的计划
  • 阿里云服务器购买完整流程
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​水经微图Web1.5.0版即将上线
  • ​学习一下,什么是预包装食品?​
  • #单片机(TB6600驱动42步进电机)
  • (02)Hive SQL编译成MapReduce任务的过程
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (利用IDEA+Maven)定制属于自己的jar包
  • (算法)求1到1亿间的质数或素数
  • (五)Python 垃圾回收机制
  • (循环依赖问题)学习spring的第九天
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (正则)提取页面里的img标签
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET CORE 第一节 创建基本的 asp.net core