powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлеты
21 сообщений из 21, страница 1 из 1
Сервлеты
    #38801223
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, создал сервлет, который добавляет в БД CouchBase документы (id, как у введенной переменной):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class DataBaseAddServlet extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String url = req.getParameter("url");

        DatabaseManager dbManager = new DatabaseManager();
//        String pathInfo = req.getPathInfo().substring(1);
        String id = dbManager.AddDocument(url);
        resp.getWriter().println(id);
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
    public String AddDocument(String id) {
        CouchbaseClient c = cm.getClient();

        String randomId = UUID.randomUUID().toString();
        c.add(id, randomId);
        return id;
    }



Необходимо сделать сервлет, который бы создавал сразу, например, 100 документов, попробывал сделать так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        DataBaseAddServlet dataBaseAddServlet = new DataBaseAddServlet();
        for (int k = 0; k < 100; k++) {
            dataBaseAddServlet.doGet(req, resp);
        }
    }
}



Не пошло)
Большая просьба помочь!
...
Рейтинг: 0 / 0
Сервлеты
    #38801235
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
True Detective,

Свяжитесь с Камиллочкой.
http://www.sql.ru/forum/1125117/legkiy-vopros-k-znatokam
Она уже, скорее всего, сделала.
...
Рейтинг: 0 / 0
Сервлеты
    #38801237
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

У нас разные задания(
...
Рейтинг: 0 / 0
Сервлеты
    #38801239
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
True DetectiveBlazkowicz,

У нас разные задания(
Всё пропало.
...
Рейтинг: 0 / 0
Сервлеты
    #38801262
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczTrue Detective,

Свяжитесь с Камиллочкой.
http://www.sql.ru/forum/1125117/legkiy-vopros-k-znatokam
Она уже, скорее всего, сделала.
Blazkowicz, я тоже кстати о Камиллочке подумал, думаете это похоже на лабораторку? :)
Ээээх, а вот в мои студенчиские годы мы сервлеты не изучали, приходилось все самому делать...

True Detective, что именно не пошло, ошибки какие-то видите?
...
Рейтинг: 0 / 0
Сервлеты
    #38801264
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
True Detective,

Почитайте про RequestDispatcher
...
Рейтинг: 0 / 0
Сервлеты
    #38801287
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
True DetectiveНе пошло)
чтож. видно так и надо )
...
Рейтинг: 0 / 0
Сервлеты
    #38801296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
True DetectiveНе пошло)
Не верю. Покажи экцепшен.
...
Рейтинг: 0 / 0
Сервлеты
    #38801303
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

description The server encountered an internal error that prevented it from fulfilling this request.

exception
java.lang.NullPointerException
net.spy.memcached.KeyUtil.getKeyBytes(KeyUtil.java:46)
net.spy.memcached.util.StringUtils.validateKey(StringUtils.java:123)
net.spy.memcached.MemcachedConnection.enqueueOperation(MemcachedConnection.java:1184)
net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:328)
net.spy.memcached.MemcachedClient.add(MemcachedClient.java:855)
com.couchbase.client.CouchbaseClient.add(CouchbaseClient.java:1298)
DatabaseManager.AddDocument(DatabaseManager.java:15)
DataBaseAddServlet.doGet(DataBaseAddServlet.java:17)
DatabaseIterationServlet.doGet(DatabaseIterationServlet.java:12)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
...
Рейтинг: 0 / 0
Сервлеты
    #38801307
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
web.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<?xml version="1.0" encoding="UTF-8"?>
<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_2_5.xsd"
         version="2.5">

    <servlet>
        <servlet-name>DataBaseAddServlet</servlet-name>
        <servlet-class>DataBaseAddServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DataBaseAddServlet</servlet-name>
        <url-pattern>/database/add</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>DatabaseIterationServlet</servlet-name>
        <servlet-class>DatabaseIterationServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DatabaseIterationServlet</servlet-name>
        <url-pattern>/database/iteration</url-pattern>
    </servlet-mapping>

</web-app>



ConnectionManager.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
public class ConnectionManager {
    Logger logger = Logger.getLogger(getClass().getName());
    private CouchbaseClient client;

    public ConnectionManager() {
        init();
    }

    public void init() {
        try {
            logger.info("Opening base connection.");
            List<URI> hosts = Arrays.asList(new URI("http://127.0.0.1:8091/pools"));            
            String bucket = "default";          
            String password = "";          
            client = new CouchbaseClient(hosts, bucket, password);
        } catch (Exception e) {
            client = null;
            throw new IllegalStateException(e);
        }
    }
    @PreDestroy
    public void destroy() {
        logger.info("Closing base connection.");
        if (client != null) {
            client.shutdown();
            client = null;
        }
    }

    public CouchbaseClient getClient() {
        return client;
    }
}
...
Рейтинг: 0 / 0
Сервлеты
    #38801310
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ошибка в ConnectionManager..
...
Рейтинг: 0 / 0
Сервлеты
    #38801405
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
True DetectiveВозможно ошибка в ConnectionManager..

Не факт, мы вашего лога не видим... Не могу понять как ваш DatabaseManager связан с ConnectionManager? По поводу вашего сревлета, я имел ввиду предоставить контейнеру самому следить за жизненным циклом сервлета, перепишите код таким образом:

Код: java
1.
2.
3.
4.
5.
6.
7.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        RequestDispatcher rd = request.getRequestDispatcher("DataBaseAddServlet");
        rd.forward(request,response);
    }
}



Если все отработает нормально, то просто обернете мой код своим циклом.
...
Рейтинг: 0 / 0
Сервлеты
    #38801410
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
True DetectiveВозможно ошибка в ConnectionManager..
а что управляет методами init и destroy?
...
Рейтинг: 0 / 0
Сервлеты
    #38801424
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YamahaR1,

С Вашим кодом вылезает ошибка(
Код: html
1.
2.
3.
4.
HTTP Status 404 - /database/DataBaseAddServlet
type Status report
message /database/DataBaseAddServlet
description The requested resource is not available.



ConnectionManager.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class DatabaseManager {
    ConnectionManager cm;

    public DatabaseManager() {
        cm = new ConnectionManager();
    }

    public String AddDocument(String id) {
        CouchbaseClient c = cm.getClient();
        String randomId = UUID.randomUUID().toString();
        c.add(id, randomId);
        return id;
    }
}



rema174,
Пример взят отсюда
Там есть аннотация @PostConstruct перед init(), но у меня она не работала, я в конструктор добавил вызов метода.
...
Рейтинг: 0 / 0
Сервлеты
    #38801427
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробывал сделать так - создал 100 документов.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        for (int k = 0; k < 100; k++) {         
            DatabaseManager dbManager = new DatabaseManager();
            String randomId = UUID.randomUUID().toString();
            dbManager.AddDocument(randomId);         
        }
    }
}



Но тут пришлось делать рандомный id - видимо в этом проблема?
Ведь раньше вводишь руками в url код, напр. - localhost:8080/database/add?url=5 и в БД сохраняется документ с id 5 и рандомным текстом.

Но как же все-таки использовать сервлет DataBaseAddServlet?
...
Рейтинг: 0 / 0
Сервлеты
    #38801454
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
True DetectiveYamahaR1,

С Вашим кодом вылезает ошибка(
Код: html
1.
2.
3.
4.
HTTP Status 404 - /database/DataBaseAddServlet
type Status report
message /database/DataBaseAddServlet
description The requested resource is not available.



ConnectionManager.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class DatabaseManager {
    ConnectionManager cm;

    public DatabaseManager() {
        cm = new ConnectionManager();
    }

    public String AddDocument(String id) {
        CouchbaseClient c = cm.getClient();
        String randomId = UUID.randomUUID().toString();
        c.add(id, randomId);
        return id;
    }
}



rema174,
Пример взят отсюда
Там есть аннотация @PostConstruct перед init(), но у меня она не работала, я в конструктор добавил вызов метода.

В параметр надо проставлять урл-мапинг, попробуйте так
Код: java
1.
RequestDispatcher rd = request.getRequestDispatcher("add")
...
Рейтинг: 0 / 0
Сервлеты
    #38801606
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
True DetectiveТам есть аннотация @PostConstruct перед init(), но у меня она не работала, я в конструктор
добавил вызов метода.
все правильно, если у тебя голый томкат, то не должно работать. сейчас у тебя второй метод не работает тоже, да и первый тоже должен вызываться после конструктора, а не в нем. попробуй запустить на TomEE.
...
Рейтинг: 0 / 0
Сервлеты
    #38801681
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
True DetectiveНеобходимо сделать сервлет, который бы создавал сразу, например, 100 документовСервлет не может создать "сразу сто документов". Он обязан создать столько документов, сколько запрошено клиентом.попробывал сделать так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class DatabaseIterationServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        DataBaseAddServlet dataBaseAddServlet = new DataBaseAddServlet();
        for (int k = 0; k < 100; k++) {
            dataBaseAddServlet.doGet(req, resp);
        }
    }
}

Не пошло)... и это - хорошо.
1. HTTP GET должен быть идемпотентным ;
2. Если вам повезло, то повторные вставки в базу одного и того же документа приведут к нарушению уникальности.
Большая просьба помочь!"Работа" - за углом.
...
Рейтинг: 0 / 0
Сервлеты
    #38801768
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov1. HTTP GET должен быть идемпотентным;
С куа ли? Простите мне мой французский. :)

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property. Also, the methods OPTIONS and TRACE SHOULD NOT have side effects, and so are inherently idempotent.

Если я правильно понимаю язык потомков англов и норманов, глагол "share" не переводится как "должен".
...
Рейтинг: 0 / 0
Сервлеты
    #38801781
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев С куа ли? Простите мне мой французский. :)

А с куа бы и нет?

Сергей АрсеньевЕсли я правильно понимаю язык потомков англов и норманов, глагол "share" не переводится как "должен".
Судя по тому что ты вообще не туда смотришь, то скорее всего не очень понимаешь.
Читай абзацем выше.
RFCGET and HEAD methods SHOULD NOT have the significance of taking an action other than retrieval
Во-первых это всего лишь рекомендация. Поэтому SHOULD.
Во вторых - Да. Это не совсем "идемпотентность" но всё же, если нет явных предпосылок генерить динамический контент, то GET должен быть "идемпотентным". Запись значимых данных в базу это довольно значимое действие с точки зрения бизнес-логики, а не какая-нибудь статистика.
...
Рейтинг: 0 / 0
Сервлеты
    #38801788
True Detective
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YamahaR1,

Спасибо большое, помогло!

rema174,
На 8 томкате вроде работает)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервлеты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]