Настройка сервлета Java HTTP в Netbeans 7.3

Я недавно обновился до Netbeans 7.3, и я совсем не понимаю конфигурации и интерфейса его проекта. Например, когда-то я видел исходные пакеты с java-классами, теперь я не могу их видеть только на панели «Файл». У меня есть пакет с именем batchUtility, содержащий сервлет HTTP с именем batchQueryServlet.

Мне нужно опубликовать JSON в batchQueryServlet через функцию jQuery.ajax(), и я не могу сопоставить сервлет.

Поскольку Netbeans 7.3 не поставляет файл конфигурации, я создал его самостоятельно, щелкнув папку web-inf> новый> файл web.xml и написал следующее:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>batchQueryServlet</servlet-name>
    <servlet-class>/batchUtility.batchQueryServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>batchQueryServlet</servlet-name>
    <url-pattern>/batchQueryServlet</url-pattern>
  </servlet-mapping>
</web-app>

но все равно при выдаче запроса получаю ошибку 404:

  $.ajax({
                            url: "/batchQueryServlet",
                            contentType: 'application/json',
                            data: json,
                            Accept: "text/html",
                            success: function(data, textStatus, jqXHR) {
                                alert(data);
                            },
                            type: "POST"
                        });

Теперь я почти уверен, что он не найдет класс, потому что, если я вызову имя сервлета, я получу исключение classNotFound. Как я мог это исправить? (Быстрым и грязным решением было бы использование JSP, но я бы не стал этого делать).

PS: я использую Tomcat версии 7.0.34.

EDIT Проблема заключалась в том, что я должен использовать правильный путь src/java для хранения моих классов .java вместо обычной папки (по этой причине я не мог видеть пакеты). Теперь я это исправил. В любом случае спасибо за ваше время!


person Dev-otchka    schedule 20.05.2013    source источник


Ответы (1)


У вас есть ведущая косая черта в

<servlet-class>/batchUtility.batchQueryServlet</servlet-class>

Удалите его, и все должно работать.

Измените свой Ajax url: на "batchQueryServlet" или "/web-app-name/batchQueryServlet"

ИЗМЕНИТЬ:

После развертывания структура папок вашего веб-приложения должна выглядеть так: (/ указывает каталог)

tomcat-home/
 |- webapps/
   |- BatchWebApp/ //<-- Context-Root (Web-app's name)
     |- *.html, *.jsp etc.
     |- WEB-INF/
        |- web.xml
        |- lib/
          |- *.jar files
        |- classes/ //<-- ALL your servlets go here
          |- batchUtility/ //<-- with the required package/folder structure
            |- batchQueryServlet.class

Если вы используете IDE (например, Eclipse), она делает то же самое для вас.

person Ravi K Thapliyal    schedule 20.05.2013
comment
О, ты прав. Тем не менее, это не работает. Однако я думаю, что понял, в чем здесь проблема, я должен установить контекст. Когда я публикую, я публикую http://localhost:8084/batchQueryServlet, но я хочу, чтобы это было http://localhost:8084/projectName/batchQueryServlet. У меня есть файл context.xml, <?xml version="1.0" encoding="UTF-8"?> <Context antiJARLocking="true" path="/projectname"/>, и я думал, что он может работать, но, похоже, это не так. Я попытался добавить контекстный путь, но он по-прежнему публикуется для localhost:8084/batchQueryServlet :/ - person Dev-otchka; 20.05.2013
comment
Спасибо, теперь это работает. Проблема в том, что я все еще запускаю исключение ClassNotFound, так как оно не находит пакетный запрос сервлета. У меня есть папка batchUtility в папке /app_name/, но я понял, что классы не могут разрешать классы в одной папке, я думаю, у меня проблемы с компиляцией. - person Dev-otchka; 20.05.2013
comment
Посмотрите, как выглядит структура папок вашего веб-приложения после развертывания в Tomcat. - person Ravi K Thapliyal; 20.05.2013
comment
А, пропустил! Может быть, я слишком старался, чтобы заслужить ваш голос. :) - person Ravi K Thapliyal; 20.05.2013