我知道"普通的" Java,但是对于servlet,容器等世界是陌生的。因此,我不确定哪种方法最明智。

情况:我创建了一个Servlet,用于接收信息并将其存储在数据库中。该数据库被其他应用程序读取。

现在,我需要一个可以接收完全相同的信息并将其存储在相同数据库中的应用程序。但是,此新应用程序需要从另一台服务器(我将使用httpClient)中提取此信息,而不是将其推送到该服务器。这两个应用程序将共存。

对于这个新应用程序,我看到以下两个选项:

制作一个独立的应用程序。为此,我可以复制粘贴很多现有的后端代码,但是我将需要进行一些修改(servlet容器提供了上下文,易于进行数据库连接池等)。此外,我可能需要使用一些包装器,以便像我可以启动的适当守护程序一样工作,但也可以优雅地停止/重新启动等。

使新应用程序成为Servlet的一部分。也就是说:只需在将运行新应用程序的servlet的init()中启动一个新线程即可。这将允许我重用我已经拥有的所有后端代码,而无需重写任何后端代码。我只需要编写对其他服务器执行HTTP-GET请求的代码。使用这种方法,启动和停止服务也将更加容易,因为我可以为此使用Servlet容器。

有关项目的一些信息:用于将数据解析并将其写入数据库的后端代码有几个线程,但并不是很复杂。为原始servlet编写代码大约需要一周的时间。使用现有的代码库,我觉得这个新应用程序可能最多需要1、2天的工作时间。

我看到选项2的方式比较容易。但是感觉有点像我会"滥用" servlet。

所以我的问题是:不是应该处理请求的应用程序的servlet,而不是发出请求的应用程序的servlet?我在这里看不到一些巨大的缺点吗?哪个选项最有意义?

tl; dr:我可以编写不将请求用作Servlet的应用程序吗?

不要复制和粘贴代码。

编写一个可重用的类/模块,该类/模块负责将信息存储在数据库中,供1)Servlet和2)从HttpClient检索信息的独立代码使用。

这样,同一段代码可以处理相同的逻辑-如何将信息存储在数据库中-无论相关信息是被推送到servlet还是从远程URL提取。

Servlet容器是线程管理的环境。通常,不要在servlet中启动自己的线程,否则可能会发生坏事……例如,启动和停止应用程序上下文-应用服务器不知道您可能已经启动的线程,因此不会停止他们与您的应用...(此问题中的更多详细信息)

我将尝试从Servlet中提取所需的逻辑到不依赖Servlet API的类中,然后重新设计Servlet以使用这些类。 (重构)。正如您所注意到的,servlet API完全是关于接收请求和发送响应的。

我可以在任何喜欢的地方重用新的非servlet类中的逻辑,包括轮询应用程序的非servlet部分以提取该信息。

跟进问题:我不应该启动自己的线程,否则会发生不好的事情。您能详细说明一下吗?现在,现有的servlet使用两个后台线程将数据写入两个数据库。这些线程使用BlockingQueue连接到servlet。我在不同线程中使用它的原因是因为写入数据库非常耗时(因为数据库中有很多触发器),并且数据可能会突然进入。因此,这不是建议的设计吗?这会给您带来什么麻烦?

抱歉,我正在按照您的评论进行更新。

@Brabster可能是指大多数Web /应用服务器更喜欢在servlet容器中管理线程的事实,从理论上讲,您自己启动的线程并不会很安??全,因为容器可能会破坏它们。

如果您需要运行自己的线程,则应该在ServletContextListener中启动和停止线程,以便在上下文启动时以及在关键时刻停止时获得回调,以便您可以整理自己所做的一切-因此,方式,但是您必须非常小心。

@brasilt请参阅我的答案stackoverflow.com/questions/3873158/thread-running-in-web-page/了解其他说明

感谢您的回答和有趣的链接。我确实清理了servlet destroy()方法中的所有线程,但是不确定是否足够?

如果要重用代码,请将此代码作为"服务"或"业务逻辑"层的一部分,将由您的servlet和非servlet应用程序同时使用。

将代码打包为jar并在两个应用程序中使用。

您可以使用,但不应该使用,这是一个非常糟糕的设计。

如果您有两种不同的访问应用程序的方式(一种通过servlet,另一种是独立的),则应至少创建三个类:

一类负责与数据库等有关的所有工作。

一个调用第一类的servlet

一个称为头等舱的独立舱(或其他)

这样,您就不会复制/粘贴,并且可以重用代码(即使您可以通过第三种方式来调用需要繁重工作的类)

java应用servlt_关于Java:将Servlet用于非Servlet应用程序相关推荐

  1. Java:什么是Java框架?

    ​ Java框架是开发人员使用Java编程语言创建应用程序的预写代码体.Java框架是特定于Java编程语言的.这是一个用于开发软件应用程序和Java程序的Java平台. Java框架是可重用的预写代 ...

  2. java 获取init参数,Java如何读取servlet init参数?

    在web.xml文件中配置servlet时,我们可以在servlet配置部分中定义一些初始化参数.此init参数可用于定义应用程序配置文件的存储位置.下面的这个简单的servlet展示了如何获取这些i ...

  3. web开发的java语言步骤_java web开发入门一(servlet和jsp)基于eclispe

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  4. app登录界面背景 css_计算机毕业设计中Java web实现简登录页面(MyBatis+jsp+servlet+html+css+javascript)...

    点击上方"蓝字",关注我们. 本文利用MyBatis+jsp+servlet+html+css+javascript实现了一个简单的登录页面.对用户输入的用户名和密码就行校验,校验 ...

  5. java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)

    前言 Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servlet.JDBC.EJB四部分技术.其中还有其他的9个技术规范(JNDI,) 正文 (1).Java ...

  6. java request获取域,Java Web - Servlet(13)HttpServletRequest详解(获取请求数据、请求分派、请求域)(二)...

    Java Web -- Servlet(13)HttpServletRequest详解(获取请求数据.请求分派.请求域)(2) HttpServletRequest ----------------- ...

  7. Java请求参数检查,Java如何检查servlet请求中是否存在参数?

    ServletRequest或HttpServletRequest对象具有用于映射参数名称及其值的映射对象.通过访问此映射,我们可以检查servlet请求中是否传递了参数.让我们看下面的例子.pack ...

  8. java.servlet js,调用servlet方法

    <深入剖析Tomcat>一2.1 javax.servlet.Servlet接口 2.1 javax.servlet.Servlet接口 Servlet编程需要使用到javax.servl ...

  9. java servlet 3.1,Servlet 3.1规范学习小记

    对于Servlet 2.5加入的新功能: 1. 处理Listener的次序性 2.5及之前的规范没有定义Listener的调用次序.web.xml中定义的Listner的执行顺序是不保证的(按:尽管规 ...

最新文章

  1. WinExec、ShellExecute用法详解
  2. 数学建模学习笔记——相关性分析
  3. C#中DataTable使用以及对行与列的赋值
  4. 快速接入 Android BLE 开发的基础框架
  5. Elasticsearch--高级-映射mapping_添加行的字段映射---全文检索引擎ElasticSearch工作笔记018
  6. 随想录(为什么循环队列具有先天的并行性)
  7. transactionscope 中的异步 处理 异常_PLC编程中的异常处理
  8. 如何循环数据库中的所有表名?
  9. [2018.07.31 T1] 第一题
  10. 苹果屏保壁纸_Live Photo壁纸苹果版下载-Live Photo壁纸APP
  11. github上比较好用的第三方
  12. 懒羊羊找朋友 C++
  13. 学会使用debug模式调试代码
  14. tomcat URL简写案例:模拟网站www.baidu.com的访问
  15. 以一举三的京东数据爬取(已经分配好各个方法,修改几行代码即可应用其他网站)并以json文件保存
  16. ESP8266 RTOS SDK学习之 UDP
  17. k8s部署jenkins和Pod始终为pending状态“persistentvolume-controller no persistent volumes available.....”解决办法
  18. 惠普服务器删除系统还原,惠普电脑系统还原的详细操作步骤
  19. 报表自动生成软件有哪些?热门报表自动生成软件推荐
  20. 【HNOI2009】梦幻布丁

热门文章

  1. 最让人头疼的清洗数据过程----选择合适的方式快速命中所需的数据
  2. 监控页面后退前进,浏览器文档加载事件之pageshow、pagehide
  3. Ubuntu 16.04 安装 VMware-Workstation-12
  4. sqoop的安装和使用
  5. 2014年12月26日
  6. SQL Server XML数据解析(1)
  7. React基础篇(六)React中绑定事件的注意点
  8. Leetcode-1156 Swap For Maximum Repeated Substring(单字符重复子串的最大长度)
  9. Laravel 日志权限问题
  10. 01 安装ansible