Как получить доступ к файлу. js из сервлета, который является частью плагина веб-приложения? - PullRequest
1 голос
/ 04 августа 2020

Я не могу найти способ получить доступ к файлу javascript, который я поместил в папку проекта плагина, который я пытаюсь расширить. Предоставленное решение от this topi c, к сожалению, не сработало. Я надеюсь, что это не c для веб-приложения (скажем, его имя thiswebappname), для которого я пишу плагин. Я начал с расширения существующего примера плагина, который имеет следующую структуру проекта:

Структура проекта

myprojectsnamespace.myproject

  • Системная библиотека JRE
  • Зависимости подключаемых модулей
  • src
    • myprojectsnamespace.myproject
      • MyServlet. java
      • ...
  • META-INF
  • webapp
    • WEB-INF
      • javascript
        • myScript. js
    • web. xml
  • build.properties
  • plugin. xml

вот некоторые из файлов, которые, как я подозреваю, могут быть полезны для поиска решения:

build.properties

source.my-servlet.jar = src/
src.includes = my-servlet.jar
bin.includes = META-INF/,\
               webapp/,\
               plugin.xml

plugin. xml

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>
   <extension
         point="com.thiswebappname.portal.tomcat.webapps">
      <webapp
            contextRoot="webapp"
            name="thiswebappname/myprojectsnamespace"/>
   </extension>
</plugin>

Мне почему-то не удается загрузить содержимое myScript.js из MyServlet. Сервлет вроде как опубликован web.xml:

<...>
<servlet>
  <servlet-name>MyServlet</servlet-name>
  <display-name>My Servlet</display-name>
  <servlet-class>myprojectnamespace.myproject.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/LoadScript</url-pattern>
</servlet-mapping>

В MyServlet.java Я пробовал следующее, все безуспешно:

MyServlet. java

public class MyServlet extends HttpServlet{
  private static final long serialVersionUID = 1L;
    
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp ) throws IOException{
    resp.setContentType("text/html");
    resp.getWriter().println("<script>");
    resp.getWriter().println(new String(Files.readAllBytes(Paths.get("getPopup.js")),StandardCharsets.UTF_8));
    //above line doesn't find the file. I also tried "myprojectsnamespace.myproject/webapp/WEB-INF/javascript/myScript.js" etc., same problem
    resp.getWriter().println("</script>");

    /* following approach has the same problem, i.e. can't find the file:
    resp.setContentType("text/html");
    resp.getWriter().println("<script language='text/javascript' src='myScript.js'>");
    resp.getWriter().println("</script>"); */
}

Когда я ввожу http://myserver/thiswebappname/LoadScript в браузере, doGet() действительно вызывается из MyServlet, как и ожидалось, но скрипт не загружается. Я упускаю что-то очевидное? Я не нашел способа «опубликовать sh» файл. js, как это было с MyServlet в сети. xml.

1 Ответ

1 голос
/ 04 августа 2020

Вы можете использовать:

ServletContext context = getContext();
URL resourceUrl = context.getResource("/WEB-INF/javascript/myScript.js");

или, альтернативно, если вам просто нужен входной поток:

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

Это работает, даже если контейнер сервлетов никогда не расширяет файл WAR (например, Tomcat ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...