我有一个应用程序将客户发送到另一个站点来处理付款.客户外的另一个站点呼叫我们服务器上的页面,让我们知道付款的状态.被叫页面检查支付应用程序给出的参数,并检查交易是否为我们所知.然后它会更新数据库以反映状态.这一切都是在没有与客户互动的情况下完成的.
我个人选择将此功能作为JSP实现,因为在文件系统中删除文件比编译和打包文件然后在配置文件中添加条目更容易.
考虑到页面的功能,我认为servlet是首选的选项.问题是:
我的推定是否正确?
是否有真正的理由在JSP上使用servlet?
这些原因是什么?
JSP在第一次运行时编译为servlet.这意味着它们之间没有真正的运行时差异.
但是,大多数人都有将servlet用于控制器和JSP用于视图的传统.由于控制器只是java类,因此您可以从所有IDE获得完整的工具支持(代码完成等).与JSP相比,这提供了更好的质量和更快的开发时间.一些更高级的IDE(IntelliJ IDEA让人想起)有很好的JSP支持,使得这个参数过时了.
如果您正在创建自己的框架或只是使用简单的JSP,那么您应该可以继续使用JSP.没有性能差异,如果您觉得JSP更容易编写,那么一定要继续.
JSP:向用户显示数据.这里没有业务逻辑,当然也没有数据库访问.
Servlet:处理来自表单或特定URL的输入.通常人们会在Servlets之上使用像Struts/Spring这样的库来清理编程.无论servlet应该只验证已经进入的数据,然后将其传递到后端业务层实现(您可以编写测试用例).然后它应该将结果值放在请求或会话上,并调用JSP来显示它们.
模型:一种数据模型,用于保存网站处理的结构化数据.servlet可以获取参数,将它们放入模型中,然后调用业务层.然后,该模型可以与后端DAO(或Hibernate)连接以访问数据库.
任何非平凡的项目都应该实现MVC结构.当然,这对于琐碎的功能来说是过度的.在你的情况下,我将实现一个调用DAO的servlet来更新状态等,或者任何需要的东西.
JSP应该用在表示层,业务逻辑的servlet和后端(通常是数据库层)代码中.
我不知道为什么你不能像你描述的那样使用JSP(无论如何它都被编译器转换为servlet),但是你是对的,首选方法是首先使它成为一个servlet .
有2条非常简单的规则:
每当您想编写Java代码(业务逻辑)时,都可以在Java类(例如Servlet)中进行。
每当您要编写HTML / CSS / JS代码(视图/模板逻辑)时,请在JSP中进行。
如何避免JSP中的Java代码