我有兴趣创建一个使用JSP
,Servlets
和XML
的网络应用。
目前我有以下内容:
JSP
- 表单输入。
Servlet
- 检索表单数据并将该数据发送到java object
。
Java object
(1) - 将数据转换为XML
文件....实例化java object
(2)。
Java object
(2) - 将该文件发送到database
。
在返回方,database
将发回另一个XML file
,我将使用XSLT
处理该XSLT
以显示给用户。
我可以将Servlets
代码放入orignial doPost()
JSP page
方法中吗?所以我的doPost()`方法会:
从java object
上的表单中检索用户输入的数据。
实例化XML
以将该数据转换为object
,然后object
将实例化另一个XML file
以将database
发送至XML file
database
。
转换servlet
发送的结果doPost()
,并将其显示给用户。
一个classes
{{1}}方法可以处理所有这些吗?如果没有,我将如何设置我的应用程序并{{1}}来处理此工作流程?
提前谢谢
答案 0 :(得分:2)
我不会在POST中加载XSLT,因为每个方法都必须这样做。
在init方法中读取XSTL,预编译并缓存它。只要确保你保持线程安全。
一旦有了XSLT,就必须将它应用于每个XML响应,因此这些步骤属于POST。
答案 1 :(得分:1)
您的doPost()
方法所要做的就是生成合适的servlet响应(某种形式的内容和合适的HTTP响应结构)。所以它可以做任何你想做的事情(包括上面的内容)。
然而,听起来您的渲染要求与表单提交和存储要求不同。所以我会让你的doPost()
方法委托给一个合适的方法来渲染输出。这样,您可以从存储数据生成输出,而不是将数据提交到数据库。
答案 2 :(得分:1)
嗯,这不是特定于servlet的,而是一般的Java / OOP(面向对象编程)。实际上,即使在main()
方法中,您也可以在单个方法中执行所有。但是,单个方法中的数百或更多行不是真正可读,可维护,可重复使用或长期可测试的。现在,你可能只是从Java开始,你可能不需要做任何其他事情,但如果你需要复制(几乎)相同的代码行,那么是时候重构了。从重复的代码行中提取变量,并将这些行包装在一个新方法中,该方法将变量作为参数,并执行简单的一步任务。
通常,您希望事先使用单独的可重用的类和方法将大任务拆分为单独的子任务。在您的情况下,您可以为所有数据库交互任务提供单个DAO类,通过XSL和(可能)域对象管理输入/输出,将Javabeans转换为XML,反之亦然的通用XML帮助程序类处理(转换/验证/错误处理/响应)和执行操作。在纸上写下如何在小型单一任务中完成大局。通过单一方法,每项任务通常都可以完成。将方法分组在同一个类中具有相同的职责和/或相同的共享数据。
更进一步,对于多个任务,可能有第三方工具可以简化任务。我可以想到例如XMLBeans和/或XStream来做Javabean< - > XML转换。这样就可以节省很多样板代码,也可能是XSL步骤。
也就是说,duffymo建议只加载一次XSL是非常好的。您不需要在每次请求时一次又一次地重新执行完全相同的任务,而该任务根本不依赖于请求参数,这样效率很低。