【问题标题】:Specifics on How Glassfish Server is Run with IntelliJ Debugger?Glassfish 服务器如何与 IntelliJ 调试器一起运行的细节?
【发布时间】:2017-06-03 14:43:00
【问题描述】:

我很好奇 IntelliJ 调试器如何使用我 glassfish 服务器的 domain.xml 并在请求时报告网页。

具体来说,我有一个名为 blobGame 的 IntelliJ 项目,它使用 Glassfish 服务器在部署工件 .war 和 .ear 时打开一个名为 blobGame 的网页。

首先,这些工件是如何部署的?当我部署它们时,我必须将 localhost 的 URL 设为 http://localhost:60836/blobGame_war_exploded,并且 localhost:60836/blobGame 不起作用,即使我在调试中更改它也是如此配置——here is my debugger info

这是为什么?为什么 url 必须是 /blobGame_war_exploded? 它甚至不能是 /blobGame_ear_exploded,正如我在 domain.xml 中看到的那样。

这是我的名为“domain2”的域的 domain.xml 的 sn-p:

  <applications>
    <application object-type="user" name="blobGame_ear_exploded" directory-deployed="true" location="file:/C:/Users/Kevin/EECS/blobGame/out/artifacts/blobGame_ear_exploded/">
      <property name="archiveType" value="ear"></property>
      <property name="isComposite" value="true"></property>
      <property name="appLocation" value="file:/C:/Users/Kevin/EECS/blobGame/out/artifacts/blobGame_ear_exploded/"></property>
      <property name="org.glassfish.ejb.container.application_unique_id" value="98074431158681600"></property>
      <property name="defaultAppName" value="blobGame_ear_exploded"></property>
      <module name="web.war">
        <engine sniffer="ejb"></engine>
        <engine sniffer="security"></engine>
        <engine sniffer="weld"></engine>
        <engine sniffer="web"></engine>
      </module>
      <engine sniffer="ear"></engine>
    </application>
    <application context-root="/blobGame_war_exploded" object-type="user" name="blobGame_war_exploded" directory-deployed="true" location="file:/C:/Users/Kevin/EECS/blobGame/out/artifacts/blobGame_war_exploded/">
      <property name="archiveType" value="war"></property>
      <property name="appLocation" value="file:/C:/Users/Kevin/EECS/blobGame/out/artifacts/blobGame_war_exploded/"></property>
      <property name="org.glassfish.ejb.container.application_unique_id" value="98074431158812672"></property>
      <property name="defaultAppName" value="blobGame_war_exploded"></property>
      <module name="blobGame_war_exploded">
        <engine sniffer="ejb"></engine>
        <engine sniffer="security"></engine>
        <engine sniffer="weld"></engine>
        <engine sniffer="web"></engine>
      </module>
    </application>
  </applications>

其次,为什么当我重新部署或重新启动服务器时,部署仍然使用以前的工件(我假设它们是)?

具体来说,当我按下重新启动时,我得到的 HTML 和 javascript 文件与我之前留下的完全相同,即使我在第二次调试之前编辑了 html 或 JS 文件。 (我在新的调试中添加了 alert("test") ,但它没有出现在新的调试中。当我独立访问 index.html 页面时,警报确实出现了)。

这里是 index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>keyBoardDemo</title>
    </head>
    <body>
        <canvas id="canvas" width="800" height="600" style="border:1px solid #000000;"></canvas>
        <p id="main"></p>
        <script type="text/javascript" src=resources.js></script>
        <script type="text/javascript" src=canvas.js></script>
        <script type="text/javascript" src=keyboard.js></script>
        <script type="text/javascript" src=packethandler.js></script>
        <script type="text/javascript" src=player.js></script>
        <script type="text/javascript" src=websocket.js></script>
    </body>
</html>

这是它调用的 canvas.js:

alert("test 123"); //this is not called on the second redeployment!


var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");

【问题讨论】:

    标签: javascript java jakarta-ee intellij-idea glassfish


    【解决方案1】:

    首先,这些工件是如何部署的?当我部署它们时,我必须有 URL ...

    默认情况下,IDEA 根据工件名称计算上下文根,方法是用下划线替换不受支持的字符。因此,“blobGame:war exploded”工件默认获取“blobGame_war_exploded”上下文根。

    要更改工件的上下文根,您可能需要打开运行配置的“部署”选项卡,选中“使用自定义上下文根”并在字段中输入所需的值

    “服务器”选项卡上的“打开浏览器”字段不会影响服务器设置,它只允许您在服务器启动后打开您喜欢的任何 URL。字段值 默认 为从第一个工件计算的 URL,但是一旦用户更改了它,IDEA 假定用户知道得更好。

    具体来说,当我按下重新启动时,我得到的 HTML 和 javascript 文件与我之前留下的完全相同,...

    预期的顺序如下:

    1. 对资源进行更改
    2. 使用提到的“更新 应用程序”操作更新服务器上的应用程序:“更新资源”选项对于爆炸的应用程序应该足够了,存档工件可能需要重新部署/重新启动
    3. 重新加载(刷新)在浏览器中使用资源的页面

    我怀疑您错过了最后 (3) 步。请注意,第 (2) 步仅更新服务器上的资源,要查看浏览器(在客户端)中的更改,您应该通过手动刷新页面从服务器重新加载相应的资源。

    希望对您有所帮助, 我要将your second post 重定向到这个答案

    【讨论】:

    • 不,每当我重新启动服务器或重新部署或更新类等时,我总是刷新我的 chrome 浏览器(我使用的网页)......它不起作用。就像我说的,即使重新启动 IntelliJ,即使文件已被修改,它仍然保留我未更改的部署
    • 请提交新的 youtrack,并附上(私下)您的 .idea 文件夹。如果您不熟悉 YouTrack,请参阅 intellij-support.jetbrains.com/hc/en-us/articles/207241135
    • 它不适用于 EAR 部署:stackoverflow.com/questions/51525485/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2017-06-29
    • 2015-01-28
    相关资源
    最近更新 更多