是否有可以用servlet实现而不能用jsp实现的东西,反之亦然?



我们知道jsp被转换为servlet, servlet用于业务逻辑,jsp用于视图等。。但是从理论上讲,您可以使用servlet完成JSP所做的大部分事情。反之亦然

但是是否有什么可以用servlet而不是jsp实现的,反之亦然?

我以前在一次面试中遇到过这个问题,但在谷歌上搜索了很多次后没有找到任何答案。

但是,是否有什么可以用servlet实现而不能用jsp实现,或者反之亦然?

从技术上讲,没有可以通过中的实现。

在功能上,当您遵循MVC设计模式并在servlet中实现控制器部分而在JSP中实现视图部分时,在可维护性方面存在巨大差异。Servlet API提供了一个更清晰的抽象来挂钩特定的HTTP方法,并在向响应写入任何位之前控制请求/响应。JSP又是响应的部分,这可能使一些任务更难实现,例如在发生异常时更改响应。

参见:

  • 我们的JSP wiki页面
  • 我们的servlet wiki页面
  • 如何避免Java代码在JSP文件?

两者之间存在一些微妙的差异:

生命周期是不同的,jsp被转换为文档形式(从jsp文件形式),然后转换为Java类文件(. Java文件)。从这里开始,它们被当作servlet来对待(编译等)。

jsp还具有Page作用域,这对于servlet来说是不可用的。

就可重用性而言,jsp与servlet不同。jsp可以使用TagFile和TagLibraries作为可重用的逻辑单元,这是servlet无法做到的。

唯一的区别是JSP可以由不懂Java的文档编写者编写。

虽然在技术上没有什么可以阻止您这样做,但是在没有UI的情况下使用jsp会让我觉得是徒劳的。servlet不仅可以用于交付web页面,还可以通过Apache HttpClient和Spring远程处理作为简单的远程处理机制。

刚才所说的(从技术上讲servlet做不到jsp做不到的事情,反之也一样)是正确的,但我相信面试官想要的答案是 jsp只适合文本输出,而servlet可以轻松输出文本或二进制数据

据我所知JSP是专门为HTTPprotocol的。我们不能将JSP用于任何其他协议实现。但是我们可以创建特定于协议的servlet,只继承(实现/扩展)相应的基本协议类。在正常情况下(http协议实现),我们也可以通过JSP实现servlet提供的所有舒适。

最新更新