你什么时候使用JSP和什么时候使用Servlet?
我有一个应用程序将客户发送到另一个站点来处理付款。 客户之外的其他站点在我们的服务器上调用一个页面,让我们知道付款的状态。 被叫页面检查支付应用程序提供的参数,并检查交易是否为我们所知。 然后它更新数据库以反映状态。 这一切都完成,没有任何与客户的互动。
我亲自select将这个function作为一个JSP来实现,因为在文件系统中删除一个文件要比编译和打包该文件更容易,然后将条目添加到configuration文件中。
考虑到页面的function,我会假设一个servlet将是首选的选项。 问题是:
首次运行时,JSP将被编译为一个servlet。 这意味着它们之间没有真正的运行时差异。
但是,大多数传统使用servlet控制器和JSP视图。 由于控制器只是Java类,所以您可以从所有IDE获得完整的工具支持(代码完成等)。 与JSP相比,这提供了更好的质量和更快的开发时间。 一些更高级的IDE(IntelliJ IDEA的思路)有很好的JSP支持,使得这个论点过时了。
如果您正在制作自己的框架,或者只是使用简单的JSP,那么您应该可以继续使用JSP。 没有性能差异,如果您觉得JSP更容易编写,那么一定要继续。
JSPs:向用户呈现数据。 没有业务逻辑应该在这里,当然没有数据库访问。
Servlets:处理来自表单或特定URL的input。 通常人们会在Servlets之上使用像Struts / Spring这样的库来清除编程。 不pipeservlet应该只validation已经进入的数据,然后将其传递到后端业务层实现(您可以针对testing用例编写代码)。 然后应该把结果值放在请求或会话中,然后调用一个JSP来显示它们。
模型:保存网站处理的结构化数据的数据模型。 servlet可以将这些参数放入模型中,然后调用业务层。 然后,该模型可以与后端DAO(或Hibernate)进行接口以访问数据库。
任何不平凡的项目都应该实现MVC结构。 当然,这是微不足道的function的矫枉过正。 在你的情况下,我会实现一个称为DAO的servlet来更新状态等,或者其他任何需要的。
应该在表示层中使用JSP,用于业务逻辑的servlet和后端(通常是数据库层)代码。
我不知道你为什么不能像你所描述的那样使用一个JSP(它被遏制者编译成一个servlet),但是你是对的,首选的方法是首先使它成为一个servlet。 。
JSP是编写servlet的捷径。 实际上,它们在编译之前被转换为servlet java代码。 (你可以在一些tomcat子目录下检查它,我不记得名字)。
在servlet和JSP之间进行select我使用一个简单的规则:如果页面包含比java代码更多的html代码,则转到JSP,否则只需编写一个servlet。 一般来说,这大致转化为:使用JSP来进行内容呈现,并使用servlet进行控制,validation等。
而且,由于它使用简单的java类语法,因此它更容易在servlet内部组织和构build代码。 JSP往往是更单一的,尽pipe它可能在那里创build方法。
有两个非常简单的规则:
- 每当你想编写Java代码(业务逻辑),在一个Java类(所以,Servlet)。
- 无论何时您想要编写HTML / CSS / JS代码(视图/模板逻辑),都可以在JSP中执行。
相关问题:
- 如何避免JSP中的Java代码
JSP本质上是标记,它自动被servlet容器编译成一个servlet,因此编译步骤将在两个实例中发生。 这就是为什么一个支持JSP的servlet容器必须具有完整的JDK,而不仅仅是需要JRE。
所以JSP的主要原因是减less呈现页面所需的代码量。 如果你不需要渲染一个页面,那么一个servlet更好。
我知道这不是当前stream行的答案,但是:从头开始devise应用程序时,我总是使用JSP。 当逻辑不平凡的时候,我创build了普通的Java类来完成我从JSP调用的咕噜声。 我从来没有理解你应该使用servlet的观点,因为作为纯Java类,它们更易于维护。 一个JSP可以很容易地调用一个纯Java类,当然,一个普通的Java类与其他servlet一样可维护。 在JSP中格式化一个页面比较容易,因为你可以把所有的标记放在一行,而不必写一堆println。 但是JSP的最大优点是你可以将它们放在一个目录中,并且可以直接访问它们:你不需要在URL和类文件之间build立关系。 通过让每个JSP都以安全检查开始,可以简单地处理安全性,安全检查可以是单个调用语句,因此不需要将安全性置于调度层。
我可以看到使用servlet的唯一原因是如果您需要在URL和生成的执行类之间进行复杂的映射。 就像,如果你想检查的URL,然后根据会话状态或一些这样的调用多个类之一。 就我个人而言,我从来不想这样做,而我所见过的应用程序往往难以维护,因为在开始进行更改之前,您必须弄清楚哪些代码正在执行。
现在大多数Java应用程序都是基于MVC模式构build的…在控制器端(servlet)中实现业务逻辑。 servlet控制器通常将请求转发给一个jsp,该jsp将生成实际的html响应(在MVC中查看)。 目标是分开关心…成千上万的书已经写在这个问题上。
在MVC体系结构中,servlet被用作控制器和JSP视图。 但是两者在技术上都是一样的。 在编译时(比如在JDeveloper中)或者第一次访问时(比如在Tomcat中),JSP将被翻译成servlet。 所以真正的区别在于易用性。 我敢肯定,你将很难用servlet来呈现HTML页面; 但是与常识相反,实际上你会发现在JSP内部编写一个相当复杂的逻辑非常容易(也许在一些准备好的辅助类的帮助下)。 PHP的人总是这样做。 所以他们陷入了创build意大利面代码的陷阱。 所以我对你的问题的解决scheme:如果你发现在JSP中编写代码更容易,并且不会涉及太多的代码,那么随意在JSP中编写代码。 否则,使用servlet。
同意以上关于JSP和Servlet之间差异的所有观点,但这里还有一些额外的考虑因素。 你写:
我有一个应用程序将客户发送到另一个站点来处理付款。 客户之外的其他站点在我们的服务器上调用一个页面,让我们知道付款的状态。 被叫页面检查支付应用程序提供的参数,并检查交易是否为我们所知。 然后它更新数据库以反映状态。 这一切都完成,没有任何与客户的互动。
您的应用程序正在使用其他应用程序的支付服务。 您的解决scheme很脆弱,因为如果其他应用程序中的支付服务发生更改,则会破坏您的JSP页面。 或者,如果您想更改应用程序的付款政策,那么您的页面将不得不更改。 简单的答案是,您的应用程序应该通过Web服务使用应用程序的支付服务。 servlet和JSP页面都不适合放置消费逻辑。
其次,根据这些原则,过去几年里大部分servlet / JSP页面的用法已经被放到了像Spring或者Struts这样的框架中。 我会推荐Spring,因为它为您提供了从服务器页面到Web服务网关逻辑到DAO所需的全部堆栈。 如果你想了解Spring的细节,我会推荐Spring in Action 。 如果您需要更好地了解如何对使用Java(或C#)语言编写的企业架构进行分层,那么我会推荐Fowler的企业应用程序架构模式 。
是的,这应该是一个servlet。 JSP可能更容易开发,但是servlet会更容易维护。 试想在6个月内修正一些随机错误,并试图记住它是如何工作的。
在java servlet中,HTML标签embedded在java编码中。 在JSP中,java编码embedded在HTML标签中。
对于大型应用程序来说,由于在java编程中embedded更多的html标签是不可读的,所以servlet对于读取,理解,debugging等是复杂的。因此,我们使用jsp。jsp易于理解,debugging等。
感谢和问候,Sivakumar.j
我想它取决于你? 因为JSP是HTML里面的Java,而Servlet是可以做HTML的Java里面
嗯… servlet比jsp更加安全,因为如果你提交到Servlet并转发到另一个JSP,没有文件扩展名,也不能看到它是什么页。
但是JSP的好处是你可以很容易地编写代码。