Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法通过servlet或类似的方式将Java桌面应用程序与MySQL连接起来?_Java_Mysql_Database_Servlets_Desktop Application - Fatal编程技术网

有没有办法通过servlet或类似的方式将Java桌面应用程序与MySQL连接起来?

有没有办法通过servlet或类似的方式将Java桌面应用程序与MySQL连接起来?,java,mysql,database,servlets,desktop-application,Java,Mysql,Database,Servlets,Desktop Application,一段时间以来,我一直在开发一个Java桌面应用程序,它的基本功能是在线CRUD MySQL数据库的数据。我现在的问题是安全性,我不想在客户端应用程序上硬核任何用户信息。我正在考虑两种方法: 在客户端应用程序中对大多数MySQL语句进行编码,并使用服务器应用程序将用户和密码信息传输到客户端,这样客户端就可以直接连接到数据库。我不喜欢这个想法,因为我不想让用户以任何方式获取数据库凭据 使用3层体系结构。我的客户端应用程序几乎完全编码,服务器运行在MySQL上,现在我需要一个中间层来处理所有逻辑操作、

一段时间以来,我一直在开发一个Java桌面应用程序,它的基本功能是在线CRUD MySQL数据库的数据。我现在的问题是安全性,我不想在客户端应用程序上硬核任何用户信息。我正在考虑两种方法:

  • 在客户端应用程序中对大多数MySQL语句进行编码,并使用服务器应用程序将用户和密码信息传输到客户端,这样客户端就可以直接连接到数据库。我不喜欢这个想法,因为我不想让用户以任何方式获取数据库凭据

  • 使用3层体系结构。我的客户端应用程序几乎完全编码,服务器运行在MySQL上,现在我需要一个中间层来处理所有逻辑操作、凭据和所有内容,并与客户端应用程序通信,例如:如果客户端应用程序要求提供清单,然后服务器检查其凭据,并向客户端应用程序发送一个包含所有资源清册的文件

  • 我的问题是:

    • 我应该使用哪个组件来实现选项2?我被告知要使用servlet,我一直在读关于它的文章,但这是最好的选择吗?Servlet用于web应用程序,我不知道如何让我的客户端应用程序(将在桌面上运行)与Servlet通信并接收数据

      • 你对自己的第一选择持怀疑态度是对的。首先,MySQL和其他数据库服务器在远离公共互联网的情况下会更加安全

        您需要一个服务器层,它可以将数据传送到您的客户机层

        重要安全提示不要构建服务器层来接受来自客户端层的原始SQL查询。网络爬虫可能会使用它向用户发出类似
        SELECT*的查询
        ,并破坏您的数据。或
        删除表格用户
        ,以丢弃系统

        制定一个API,通过该API,您的客户端可以从您的服务器请求CRUD服务。你可能想考虑一个休息风格的API,客户可以这样说: 得到

        或者使用以下内容更新数据:

        职位

        电话=5551212和电子邮件=mickey@disney.com

        诀窍是找出你想在REpresentationalStateT传输中使用什么类型的对象。然后您可以使用HTTPPUT来创建它们,POST来替换或更新它们,DELETE来删除它们

        REST风格的API很容易从客户机内部实现;他们使用普通的。它们很容易用https进行保护

        它们通常通过一个秘密令牌(API密钥)进行授权,该密钥随每个请求一起携带在http头对象中。你可以读一下

        因此,服务器代码必须实现API。如果您选择使用Java语言来实现它,servlets就是一种方法:它们是开发和部署JavaWeb服务器代码的方法。您可以将它们部署在或服务器环境中

        关于如何做到这一点,有大量的资源可用。例如,

        或通过web浏览器的远程用户界面 第三种选择:在服务器端运行所有业务逻辑的Web应用程序,用户界面使用自动生成的HTML/CSS/JavaScript在Web浏览器中远程运行。用户将运行web浏览器,而不是您的web浏览器

        在这种情况下,客户端不会直接接触数据库,也不会运行任何敏感代码。我认为这是旧版本的现代转世(服务器上的应用程序,远程呈现的UI)

        有两个这样的平台:

        • 在服务器上运行纯Java。建立在久经考验的技术之上
        • (以前称为RealBasic)在服务器上运行专有编译的面向对象编程语言
        在这两种产品中,web浏览器都用于显示用户界面小部件,如标签、字段、按钮、弹出菜单、列表和数据网格。当用户使用这些小部件中的任何一个时,会在服务器端引发一个事件。然后在服务器端执行业务逻辑您的业务逻辑和数据库连接只存在于服务器上。客户端只会获得以表单形式显示在屏幕上的数据

        这两个平台都自动生成所有HTML、CSS、JavaScript、DOM、AJAX、WebSocket和推送代码。所以你不需要掌握这些网络技术。这两种平台都可以用于任何现代web浏览器,因为它们只使用标准web技术。没有插件或小程序涉及

        你需要重写你的应用程序。但这可能不像听起来那么令人畏惧。桌面应用程序的大部分工作都是在设计、计算用户体验的细节和确定业务规则。这些都会转移到你的Vaadin或Xojo工作上。如果使用Vaadin,所有非GUI Java代码都可以直接转换

        如果您的本地应用程序具有无法在web应用程序的限制范围内重新创建的特殊功能,则此方法不适用。但你说你的应用程序的主要用途是数据库。这种面向业务风格表单的应用程序是Vaadin&Xojo Web Edition的主要用途

        脱机运行web应用程序 Vaadin早期支持启用离线运行的web应用程序。目前处于前沿,但正在改进,浏览器已经在构建,以支持必要的基础设施。如果PWA可以很好地工作,某些种类的桌面应用程序可以被PWA web应用程序取代

        请参见代理方式 关于您的特定用例,我建议您另一种解决方法。 您提到您已经有了一个桌面应用程序,可能有很多代码。目前,它直接请求DB。因此,从我的观点来看,将数据访问逻辑迁移到另一种技术(3tier)是相当困难的。它几乎不依赖于精确的c