Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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
Javascript 如何从作为web应用程序插件一部分的servlet中访问.js文件?_Javascript_Java_Servlets_Web Applications - Fatal编程技术网

Javascript 如何从作为web应用程序插件一部分的servlet中访问.js文件?

Javascript 如何从作为web应用程序插件一部分的servlet中访问.js文件?,javascript,java,servlets,web-applications,Javascript,Java,Servlets,Web Applications,我找不到访问javascript文件的方法,我把它放在了一个插件的项目文件夹中,我正试图扩展这个插件。不幸的是,提供的解决方案不起作用。我希望这不是我为之编写插件的webapp所特有的(比方说它叫thiswebappname)。 我首先扩展了一个现有的示例插件,该插件具有以下项目结构: 项目结构 myprojectsnamespace.myproject JRE系统库 插件依赖项 src myprojectsnamespace.myproject java META-INF 网络

我找不到访问javascript文件的方法,我把它放在了一个插件的项目文件夹中,我正试图扩展这个插件。不幸的是,提供的解决方案不起作用。我希望这不是我为之编写插件的webapp所特有的(比方说它叫
thiswebappname
)。 我首先扩展了一个现有的示例插件,该插件具有以下项目结构:

项目结构 myprojectsnamespace.myproject

  • JRE系统库
  • 插件依赖项
  • src
    • myprojectsnamespace.myproject
      • java
  • META-INF
  • 网络应用
    • WEB-INF
      • javascript
        • myScript.js
    • web.xml
  • 构建属性
  • plugin.xml
以下是一些我认为可能有助于找到解决方案的文件:

构建属性 plugin.xml

不知何故,我无法从
MyServlet
加载
myScript.js
的内容。servlet是由
web.xml
发布的:


MyServlet
我的Servlet
myprojectnamespace.myproject.MyServlet
MyServlet
/加载脚本
MyServlet.java
中,我尝试了以下方法,但都没有成功:

java
公共类MyServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void doGet(HttpServletRequest-req、HttpServletResponse-resp)引发IOException{
分别为setContentType(“文本/html”);
resp.getWriter()println(“”);
resp.getWriter().println(新字符串(Files.readAllBytes(path.get(“getPopup.js”)),StandardCharsets.UTF_8));
//上面一行找不到文件。我还尝试了“myprojectsnamespace.myproject/webapp/WEB-INF/javascript/myScript.js”等,同样的问题
resp.getWriter()println(“”);
/*以下方法存在相同的问题,即找不到文件:
分别为setContentType(“文本/html”);
resp.getWriter()println(“”);
resp.getWriter()println(“”)*/
}
当我输入
http://myserver/thiswebappname/LoadScript
在浏览器中,
doGet()
确实会按预期从
MyServlet
调用,但脚本没有加载。我是否缺少一些明显的内容?我还没有找到一种像在web.xml中使用MyServlet那样“发布”.js文件的方法。

您可以使用:

ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/javascript/myScript.js");
或者,如果您只需要输入流:

InputStream resourceContent = context.getResourceAsStream("/WEB-INF/javascript/myScript.js");

即使Servlet容器从未扩展WAR文件(如Tomcat),这也可以工作。

我最终在块中使用了InputStream变量tyvm!作为将来的参考:
ServletContext context=request.getSession().getServletContext()
String scriptTag=IOUtils.toString(context.getResourceAsStream(“/WEB-INF/javascript/myScript.js”),StandardCharsets.UTF_8);
InputStream resourceContent = context.getResourceAsStream("/WEB-INF/javascript/myScript.js");