как связать сервлеты из HTML-файла - PullRequest
0 голосов
/ 22 февраля 2010

У меня есть домашний html-файл, когда я передаю контекстный корень http://localhost:8080/ccc html-файл, автоматически загружаемый в браузер. В HTML-файл у меня есть пять ссылок, каждая из которых содержит ссылка в этом формате, <a href="servlet_alias_name">Title</a>,

когда я нажимаю на любую из ссылок, там говорится, что servlet_name not found ... невозможно ли перейти от html к сервлету через тег "href"?

Я использую Sun Java App Server8.0, я тоже включил библиотеки при развертывании ..

А показывает следующее исключение,

javax.servlet.ServletException: Error instantiating servlet class pagesvsnodes
    org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:189)
    com.sun.enterprise.web.connector.grizzly.ProcessorTask.doProcess(ProcessorTask.java:604)
    com.sun.enterprise.web.connector.grizzly.ProcessorTask.process(ProcessorTask.java:475)
    com.sun.enterprise.web.connector.grizzly.ReadTask.executeProcessorTask(ReadTask.java:371)
    com.sun.enterprise.web.connector.grizzly.ReadTask.doTask(ReadTask.java:264)
    com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:281)
    com.sun.enterprise.web.connector.grizzly.WorkerThread.run(WorkerThread.java:83)
root cause

java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset
    java.lang.Class.getDeclaredConstructors0(Native Method)
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
    java.lang.Class.getConstructor0(Class.java:2640)
    java.lang.Class.newInstance0(Class.java:321)
    java.lang.Class.newInstance(Class.java:303)

1 Ответ

1 голос
/ 22 февраля 2010

Если servlet_alias_name определено как url-mapping в дескрипторе развертывания (/WEB-INF/web.xml) для вашего веб-приложения, вы сможете получить доступ к сервлету таким способом. Я предполагаю, что вы не определили сопоставление URL-адресов и пытаетесь использовать элемент servlet-name напрямую, что не будет работать.

Например, в следующем фрагменте класс сервлета com.mycompany.SuperServlet будет сопоставлен с логическим именем myServlet, а затем URL-адрес http://localhost:8080/ccc/servlet-alias-name будет сопоставлен с логическим именем myServlet. Это приведет к тому, что запросы к этому URL вызовут этот класс сервлета.

<servlet>
  <servlet-name>myServlet</servlet-name>
  <servlet-class>com.mycompany.myservlets.SuperServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>myServlet</servlet-name>
  <url-pattern>/servlet_alias_name</url-pattern>
</servlet-mapping>

Обновление - ОК, поцарапайте все это.

Ваша проблема в том, что ваше веб-приложение не может найти класс org.jfree.data.general.PieDataset во время выполнения, хотя он был там, когда код компилировался, проверьте javadoc на наличие NoClassDefFoundError .

Включили ли вы библиотеки в развернутое веб-приложение?

  • как баночка в / WEB-INF / lib
  • как классы в / WEB-INF / classes

Или библиотеки libs должны быть развернуты и доступны глобально на сервере приложений?

У вас есть одинаковые версии libs в вашей среде сборки и в вашей среде выполнения?

Чтобы отладить эту ошибку, когда я видел ее на Tomcat, я перехожу к простому случаю (развернуть jar с webapp) и пытаюсь заставить это работать. Я никогда не находил каких-либо особенно полезных инструментов для отладки этой ситуации, если честно - кто-нибудь знает что-нибудь, что помогает?

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