什么时候使用JSP和Servlet?

时间:2008-09-19 12:48:31

标签: java jsp servlets

我有一个应用程序将客户发送到另一个站点来处理付款。客户外的另一个站点呼叫我们服务器上的页面,让我们知道付款的状态。被叫页面检查支付应用程序给出的参数,并检查交易是否为我们所知。然后它会更新数据库以反映状态。这一切都是在没有与客户进行任何互动的情况下完成的。

我个人选择将此功能作为JSP实现,因为在文件系统中删除文件比编译和打包文件然后在配置文件中添加条目更容易。

考虑到页面的功能,我认为servlet是首选选项。问题是:   

  • 我的推定是否正确?
  •   
  • 是否有真正的理由在JSP上使用servlet?
  •   
  • 这些原因是什么?
  • 13 个答案:

    答案 0 :(得分:31)

    JSP在第一次运行时被编译为servlet。这意味着它们之间没有真正的运行时差异。

    但是,大多数人都有将servlet用于控制器和JSP用于视图的传统。由于控制器只是java类,因此您可以从所有IDE获得完整的工具支持(代码完成等)。与JSP相比,这提供了更好的质量和更快的开发时间。一些更高级的IDE(IntelliJ IDEA让人想起)有很好的JSP支持,使得这个参数过时了。

    如果您正在制作自己的框架或只是使用简单的JSP,那么您应该可以继续使用JSP。没有性能差异,如果您觉得JSP更容易编写,那么一定要继续。

    答案 1 :(得分:26)

    JSPs:向用户显示数据。这里没有业务逻辑,当然也没有数据库访问。

    Servlets:处理来自表单或特定URL的输入。通常人们会在Servlets之上使用像Struts / Spring这样的库来清理编程。无论servlet应该只验证已经进入的数据,然后将其传递到后端业务层实现(您可以编写测试用例)。然后它应该将结果值放在请求或会话上,并调用JSP来显示它们。

    模型:一种数据模型,用于保存网站处理的结构化数据。 servlet可以获取参数,将它们放入模型中,然后调用业务层。然后,该模型可以与后端DAO(或Hibernate)连接以访问数据库。

    任何非平凡的项目都应该实现MVC结构。当然,这对于琐碎的功能来说是过度的。在你的情况下,我将实现一个调用DAO的servlet来更新状态等,或者任何需要的东西。

    答案 2 :(得分:8)

    应该在表示层,业务逻辑的servlet和后端(通常是数据库层)代码中使用JSP。

    我不知道为什么你不能像你描述的那样使用JSP(无论如何它都被编译器编译成一个servlet),但是你是对的,首选的方法是使它成为一个servlet in第一名。

    答案 3 :(得分:4)

    JSP是编写servlet的快捷方式。实际上,它们在编译之前被转换为servlet java代码。 (您可以在某些tomcat子目录下检查它,我不记得名称)。

    要在servlet和JSP之间进行选择,我使用一个简单的规则:如果页面包含的代码比java代码多,那么请选择JSP,否则只需编写一个servlet。通常,大致翻译为:使用JSP进行内容呈现,使用servlet进行控制,验证等。

    此外,它更容易在servlet中组织和构造代码,因为它使用普通的java类语法。虽然可以在内部创建方法,但JSP往往更加单一化。

    答案 4 :(得分:4)

    有两个非常简单的规则:

    1. 每当你想编写Java代码(业务逻辑)时,都要在Java类中进行(因此,Servlet)。
    2. 每当您想编写HTML / CSS / JS代码(视图/模板逻辑)时,请在JSP中执行。
    3. 相关问题:

    答案 5 :(得分:3)

    JSP本质上是由servlet容器自动编译到servlet的标记,因此编译步骤将在两个实例中发生。这就是为什么支持JSP的servlet容器必须具有完整的JDK,而不是只需要JRE。

    因此,JSP的主要原因是减少呈现页面所需的代码量。如果您不必渲染页面,则servlet更好。

    答案 6 :(得分:3)

    我知道这不是今天流行的答案,但是:当我从头开始设计应用程序时,我总是使用JSP。当逻辑非平凡时,我创建普通的Java类来完成我从JSP调用的繁重工作。我从来没有理解你应该使用servlet的论点,因为作为纯Java类,它们更易于维护。 JSP可以轻松地调用纯Java类,当然普通的Java类与任何servlet一样可维护。在JSP中格式化页面更容易,因为您可以将所有标记放入内联,而不必编写一堆println。但是JSP的最大优点是你可以将它们放在一个目录中并且可以直接访问它们:你不需要设置URL和类文件之间的关系。通过让每个JSP都以安全检查开始,可以很容易地处理安全性,这可以是单个调用语句,因此不需要将安全性放入调度层。

    我可以看到使用servlet的唯一原因是你需要在URL和生成的执行类之间进行复杂的映射。比如,如果要检查URL,然后根据会话状态或某些类别调用其中一个类。就个人而言,我从来没有想过这样做,我见过的应用程序往往难以维护,因为在你甚至可以开始做出改变之前,你必须弄清楚实际执行的代码是什么。

    答案 7 :(得分:1)

    现在大多数java应用程序都是基于MVC模式构建的...... 在控制器端(servlet)中,您实现业务逻辑。 servlet控制器通常将请求转发给将生成实际html响应的jsp(MVC中的View)。 目标是分开关注......已经有数千本关于该主题的书籍。

    答案 8 :(得分:1)

    在MVC架构中,servlet用作控制器,JSP用作视图。 但两者在技术上都是一样的。 JSP将在编译时(如在JDeveloper中)或第一次访问时(如在Tomcat中)被转换为servlet。 所以真正的区别在于易用性。我很确定你很难用servlet呈现HTML页面;但与常识相反,你会发现在JSP内部编写一个相当复杂的逻辑代码相当容易(可能有一些准备好的辅助类的帮助)。 PHP人员一直这样做。因此他们陷入了创造意大利面条代码的陷阱。 所以我对你的问题的解决方案:如果你发现在JSP中编码更容易,并且不会涉及太多代码,那么可以随意在JSP中编写代码。否则,请使用servlet。

    答案 9 :(得分:1)

    同意上面关于JSP和Servlet之间差异的所有要点,但这里还有一些额外的考虑因素。你写道:

      

    我有一个发送的应用程序   客户到另一个网站来处理   付款。另一个网站,在外面   客户,打电话给我们的页面   服务器让我们知道什么状态   是付款。被叫页面   检查给定的参数   通过支付申请和支票   看交易是否合适   我们知道。然后它更新了   数据库来反映状态。这个   没有任何互动就完成了   与客户合作。

    您的应用程序正在使用其他应用程序的付款服务。您的解决方案很脆弱,因为如果其他应用程序中的支付服务发生更改,则会破坏您的JSP页面。或者,如果您想更改应用程序的付款政策,那么您的页面将不得不更改。简短的回答是您的应用程序应该通过Web服务使用应用程序的支付服务。 servlet和JSP页面都不适合放置您的消费逻辑。

    其次,沿着这些方向,过去几年中servlet / JSP页面的大多数用法都放在了Spring或Struts这样的框架的上下文中。我建议使用Spring,因为它为您提供从服务器页面到Web服务网关逻辑到DAO所需的完整堆栈。如果你想了解Spring的章节,我会推荐 Spring in Action 。如果您需要更好地了解如何对使用Java(或C#)等语言编写的企业体系结构进行分层,我建议使用Fowler的企业应用程序体系结构模式

    答案 10 :(得分:0)

    是的,这应该是一个servlet。 JSP可能更容易开发,但servlet更容易维护。想象一下,必须在6个月内修复一些随机错误并试图记住它是如何工作的。

    答案 11 :(得分:0)

    在java servlet中,HTML标记嵌入在java编码中。   在JSP中,java编码嵌入在HTML标记中。

    对于大问题的大应用,由于在java编码中嵌入更多html标签的不可读性,servlet的读取,理解,调试等都很复杂。所以我们使用jsp.In jsp它很容易理解,调试,等

    谢谢&问候, Sivakumar.j

    答案 12 :(得分:0)

    我认为这取决于你? 因为 JSP是HTML中的Java 和Servlet是一个可以在

    中执行HTML的Java

    嗯... servlet比jsp更加安全,因为如果你提交给Servlet并转发到另一个JSP,就不会出现文件扩展名,而且你也看不到它是什么页面。

    但JSP的优势在于您可以轻松编写代码。

    相关问题