Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > программный вызов сервлета из JSP


Автор: Klio 5.6.2009, 16:06
Уважаемый народ, Программисты! 
подскажите как можно сделать так чтобы
При выполнении в JSP скриплета, вызвать программно Servlet и после выполнения в нём всех операторов осуществить автоматический возврат на вызвавшую её JSP, для продолжения выполнения скриплета  (по образу действия - как вызов обычной процедуры или функции)?
Заранее спасибо!

Автор: AntonSaburov 5.6.2009, 16:09
ищи слово AJAX

Автор: Klio 5.6.2009, 16:35
AJAX не изучал не знаю
У меня страница статичесская, JavaScript я не использую, мне необходимо вызвать Servlet до формирования визуального отображения!

если по другому нельзя, можно простой пример вызова servleta?

Автор: MisterCleric 5.6.2009, 16:43
Подожди, а почему обязательно вызывать Servlet? 
Чего низя вызвать какой-то твой бизнес-объект, который все равно использует этот сервлет?
вот пример из моего старого кода
Код

....
 <ww:set name="requestURI" value="%{\"/uri\" + #JSESSIONID +\"?tableId=table\"}"/>
    <%
       web.displaytag.decorator.DefaultSearchFormInjector tableDecorator = new web.displaytag.decorator.DefaultSearchFormInjector("login", "email";
        Map<String, String> paramAttributes = new HashMap<String, String>();
        paramAttributes.put("login", "size='5'");
        paramAttributes.put("email", "size='10'");
        paramAttributes.put("name", "size='15'");
        tableDecorator.setParamsAtributes(paramAttributes);
        request.setAttribute("tableDecorator", tableDecorator);

    %>
    <display:table name="tabledata"
                   defaultsort="5" export="false" id="table" excludedParams="ajax tableId pageSize"
                   requestURI="${requestURI}" decorator="tableDecorator">
....


м-дя-а-а. на JSP тоже нет подсветки...

Автор: Klio 5.6.2009, 17:31
MisterCleric вопрос

что за объект описывает переменная jstl тега "ww"?
и как организовывается сам вызов servleta

Автор: AntonSaburov 5.6.2009, 17:44
Неколько непонятная функциональность - я не очень понимаю зачем именно так надо организовывать страницу.
Может объяснишь идею сего замысла ?

Автор: Klio 5.6.2009, 17:55
у меня есть файл на сервере, в нем хранятся запросы на выполнение,
чтение организовывается построчно через сервлет
до начала его выполнения мне необходимо считать некоторые переменные, сделать некоторые преобразования над ними, сохранить их, после чего необходимовызвать сервлет использующий некоторые из этих данных, после его выполнения продолжить выполнение скриплета!

Автор: AntonSaburov 5.6.2009, 17:58
А какие переменные тебе надо считать ? И откуда ?

У меня такое ощущение, что ты не понимаешь, что JSP выпонятеся на СЕРВЕРЕ. Она сначала транслируется в сервлет и потом этот сервлет выполняется как обычный сервлет на СЕРВЕРЕ. И только уже потом результат поедет к пользователю в виде HTML. Причем целиком выполненный уже.

По идее тогда надо вынести логику получения нужных переменных в отдельный класс, которым будут пользоваться все сервлеты. И пусть пользуются на здоровье smile

Автор: Klio 5.6.2009, 18:05
переменные из url через request.getParameter

я понимаю что намного легче сделать все это сразу в Servlete но мне нужно чтобы все было в JSP? тем более страница jsp перед всем этим выполняет очень большое количество кода, и переделывать всё займет большой период,

с другой стороны это было бы не нужно если бы знать как можно считывать построчно в jsp без участия сервлета.

Автор: AntonSaburov 5.6.2009, 18:10
Ну переделай сервлет, который возвращает в JSP то, что тебе надо.
Сделай ему конструктор без параметров и методы, которые позволят получить то, что надо. Без вызова doGet и doPost

Хотя это выглядит как история:

- Слушай, а как по-английский будет "у" ?
- А тебе зачем ?
- Хочу сказать "У студента не было денег"

Потому что решение, которое ты пытаешься реализоваь по-моему какое-то .... удивительное.

Автор: Klio 5.6.2009, 18:15

Код

protected void doPOST(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        String filename = "/instal/instal.sql";
        ServletContext context = getServletContext();

        InputStream inp = context.getResourceAsStream(filename);
        if (inp != null) {
            InputStreamReader isr = new InputStreamReader(inp);
            BufferedReader reader = new BufferedReader(isr);
            PrintWriter pw = response.getWriter();
            String text = "";
            while ((text = reader.readLine()) != null) {
                    ...........................................
            }
        }
    }


Как для JSP изминить строку "ServletContext context = getServletContext();"

Автор: AntonSaburov 5.6.2009, 18:18
так надо вытащить считывание файла в отдельный метод, который вернет набор строк. И вставлять их печать где угодно. В том же скриптлете. Кстати в скриптлете их (строки) можно оформить HTML тэгами, чтобы симпатичнее выглядело.

Автор: Klio 5.6.2009, 18:21
а можно как-нибуть обойтись без дополнительных методов, я имею ввиду не использовать другие классы, или сервлеты, а только JSP?

Автор: AntonSaburov 5.6.2009, 18:33
Цитата(Klio @  5.6.2009,  18:21 Найти цитируемый пост)
а можно как-нибуть обойтись без дополнительных методов? 

Думаю, что это самый простой вариант. В том же NetBeans сделать рефакторинг с выделением метода. И дальше пользуй этот метод как угодно.

Автор: MisterCleric 5.6.2009, 18:34
Цитата

Как для JSP изминить строку "ServletContext context = getServletContext();" 


Ответ

Код

<%ServletContext context = getServletConfig().getServletContext()%>


Добавлено через 3 минуты и 14 секунд
А вообще есть такой еще магический тег 
Код

 <jsp:useBean>


В общем чувствую, что какая-то логика неверная в этой задаче. Что-то надо менять в архитектуре

Автор: Klio 5.6.2009, 18:45
Спасибо теперь все работает под JSP

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)