powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / исключения в jsp
8 сообщений из 8, страница 1 из 1
исключения в jsp
    #38060479
Liberti2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

в jsp происходит передача и вызов функции серверной обработки

Код: java
1.
2.
<jsp:useBean id="calkHandler" scope="session" class="org.calk.work.CalkWork" />
        <jsp:setProperty name="calkHandler" property="input" />


cерверный обработчик на java org.calk.work.CalkWork выбрасывает исключение
Код: java
1.
2.
3.
if (stack.empty()) {
throw new IllegalArgumentException("Unmatched brackets");
}



но на странице браузера появляетются ошибки

Код: java
1.
2.
3.
4.
5.
6.
7.
oot cause
 
java.util.EmptyStackException
    java.util.Stack.peek(Stack.java:102)
    org.calk.work.CalkWork.sortingStation(CalkWork.java:79)
    org.calk.work.CalkWork.sortingStation(CalkWork.java:118)
    org.calk.work.CalkWork.setInput(CalkWork.java:171)


и т.д.

я так понимаю, что не правильно обрабатываю иссключние, одно дело для чистого java, другое для jsp

Пару дней только изучаю java, все работает кроме исключения, если кто понимает что исправить в серверном скрипте подскажие тжст,

Спасибо!
...
Рейтинг: 0 / 0
исключения в jsp
    #38060489
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Liberti2cерверный обработчик на java org.calk.work.CalkWork выбрасывает исключение
Код: java
1.
2.
3.
if (stack.empty()) {
throw new IllegalArgumentException("Unmatched brackets");
}



Где этот код находится?

но на странице браузера появляетются ошибки

Liberti2
Код: java
1.
2.
3.
4.
5.
java.util.EmptyStackException
    java.util.Stack.peek(Stack.java:102)
    org.calk.work.CalkWork.sortingStation(CalkWork.java:79)
    org.calk.work.CalkWork.sortingStation(CalkWork.java:118)
    org.calk.work.CalkWork.setInput(CalkWork.java:171)



Очевидно по указаному стеку вызовов той проверки, что вы привели выше нет. Причины на то могут быть разные. Или вы её в друго методы сделали. Или код не той версии. Или ещё что.

К обработке исключений особого отношения, вроде не имеет.
...
Рейтинг: 0 / 0
исключения в jsp
    #38060512
Liberti2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прикрепил файл, в файле серверный обработчик и ниже по коду html код со вставиками jsp


Код: java
1.
2.
3.
if (stack.empty()) {
throw new IllegalArgumentException("Unmatched brackets");
}


Находиться в серверном обработчке.


Смысл в том, что если создать чистый java и вызвать серверный обработчик с такими же значениями, то в консоль выводит брошенное исключение. А В данной свзке нет
...
Рейтинг: 0 / 0
исключения в jsp
    #38060533
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Liberti2прикрепил файл
Скачайте и угадайте чем открыть в какой кодировке. Вываливай всё на форум тут и поболе кода выкладывали.


Liberti2Находиться в серверном обработчке.
Если повторить два раза понятнее не станет. В каком из тех методов, что написаны в stacktrace? В какой строке?
...
Рейтинг: 0 / 0
исключения в jsp
    #38060618
Liberti2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо что помогаете,

задача сделать калькулятор на Java jsp

программка состоит из двух блоков html и обработчик org.calk.work.CalkWork


Первый блок. html c jsp тегами

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
<%@page contentType="text/html" pageEncoding="windows-1251"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <title>JSP Page</title>
        
        <link rel="stylesheet" type="text/css" href="calk.css" />
        <script type="text/javascript" src="jquery.min.js"></script>
        <script type="text/javascript" src="calk.js"></script>
    </head>
    <body>
        
        
        <jsp:useBean id="calkHandler" scope="session" class="org.calk.work.CalkWork" />
        <jsp:setProperty name="calkHandler" property="input" />
        <h1 align="center">Калькулятор</h1>
         <form name="Name Input Form" action="">
         <div id="calculator">
            <table>
                <tr>
                    <td colspan="4"><div id="display"><input type="text" value="" /></div></td>
                </tr>
                <tr>
                    <td><button type="button" onclick="prnt(1)">1</button></td>
                    <td><button type="button" onclick="prnt(2)">2</button></td>
                    <td><button type="button" onclick="prnt(3)">3</button></td>
                    <td><button  type="button"onclick="calc('+')">+</button></td>
                </tr>
                <tr>
                    <td><button type="button" onclick="prnt(4)">4</button></td>
                    <td><button type="button" onclick="prnt(5)">5</button></td>
                    <td><button type="button" onclick="prnt(6)">6</button></td>
                    <td><button type="button" onclick="calc('-')">-</button></td>
                </tr>
                <tr>
                    <td><button type="button" onclick="prnt(7)">7</button></td>
                    <td><button type="button" onclick="prnt(8)">8</button></td>
                    <td><button type="button" onclick="prnt(9)">9</button></td>
                    <td><button type="button" onclick="calc('*')">*</button></td>
                </tr>
                <tr>
                    <td><button type="button" onclick="prnt(0)">0</button></td>
                    <td><button type="button" onclick="calc('.')">.</button></td>
                    <td><button type="button" onclick="result()">=</button></td>
                    <td><button type="button" onclick="calc('/')">/</button></td>
                </tr>
                <tr>
                    <td><button type="button" onclick="calc('(')">(</button></td>
                    <td><button type="button" onclick="calc(')')">)</button></td>
                    <td colspan="2"><button type="button" onclick="reset()">Сброс</button></td>
                </tr>
                
                <tr>
                <td colspan="4">&nbsp;</td>
                </tr>
                <tr> 
                    <td colspan="4"><span>Результат</span>
                        <span id="result">
                            <jsp:getProperty name="calkHandler" property="result" />
                        </span></td>
                </tr>
            </table>
             
          <input type="hidden" name="input" />
        </form>
        
    </body>
</html>



ГДЕ
<jsp:setProperty name="calkHandler" property="input" /> в эту переменную пишется строка для вычисления, например валидная строка "5+3*(2+1)" - получается результат в переменную result (<jsp:getProperty name="calkHandler" property="result" />), а если не валидная, например "5+3))" - в ней то и срабатывает исключение
<jsp:useBean id="calkHandler" scope="session" class="org.calk.work.CalkWork" /> подключение серверного скрипта вычисляющая значение

******************

Второй блок - обработчик org.calk.work.CalkWork

В функции setInput переменной this.result присваивается посчитанное значение из функции calculateExpression. Если в эту функцию подавать валидную строку то ок, иначе исключение throw new IllegalArgumentException("Unmatched brackets"); Знаю что именно это сключение, поскольку если создать обычный 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.calk.work;
//import static java.lang.Math.*;

import java.math.BigDecimal;
import java.util.*;

/**
 *
 * @author ubuntu
 */
public class CalkWork {
    private String input;
    private String result;
    
    public static final Map<String, Integer> MAIN_MATH_OPERATIONS;

    static {
        MAIN_MATH_OPERATIONS = new HashMap<String, Integer>();
        MAIN_MATH_OPERATIONS.put("*", 1);
        MAIN_MATH_OPERATIONS.put("/", 1);
        MAIN_MATH_OPERATIONS.put("+", 2);
        MAIN_MATH_OPERATIONS.put("-", 2);
    }
    
    public static String sortingStation(String expression, Map<String, Integer> operations, String leftBracket,
                                        String rightBracket) {
        if (expression == null || expression.length() == 0)
            //throw new IllegalStateException("Expression isn't specified.");
            return null;
        if (operations == null || operations.isEmpty())
            //throw new IllegalStateException("Operations aren't specified.");
            return null;
        // Выходная строка, разбитая на "символы" - операции и операнды..
        List<String> out = new ArrayList<String>();
        // Стек операций.
        Stack<String> stack = new Stack<String>();

        // Удаление пробелов из выражения.
        expression = expression.replace(" ", "");

        
        // Множество "символов", не являющихся операндами (операции и скобки).
        Set<String> operationSymbols = new HashSet<String>(operations.keySet());
        operationSymbols.add(leftBracket);
        operationSymbols.add(rightBracket);

        // Индекс, на котором закончился разбор строки на прошлой итерации.
        int index = 0;
        // Признак необходимости поиска следующего элемента.
        boolean findNext = true;
        while (findNext) {
            int nextOperationIndex = expression.length();
            String nextOperation = "";
            // Поиск следующего оператора или скобки.
            for (String operation : operationSymbols) {
                int i = expression.indexOf(operation, index);
                if (i >= 0 && i < nextOperationIndex) {
                    nextOperation = operation;
                    nextOperationIndex = i;
                }
            }
            // Оператор не найден.
            if (nextOperationIndex == expression.length()) {
                findNext = false;
            } else {
                // Если оператору или скобке предшествует операнд, добавляем его в выходную строку.
                if (index != nextOperationIndex) {
                    out.add(expression.substring(index, nextOperationIndex));
                }
                // Обработка операторов и скобок.
                // Открывающая скобка.
                if (nextOperation.equals(leftBracket)) {
                    stack.push(nextOperation);
                }
                // Закрывающая скобка.
                else if (nextOperation.equals(rightBracket)) {
                    while (!stack.peek().equals(leftBracket)) {
                        out.add(stack.pop());
                        if (stack.empty()) {
                           return null;
                           
                           //throw new IllegalArgumentException("Unmatched brackets");
                        }
                    }
                    stack.pop();
                }
                // Операция.
                else {
                    while (!stack.empty() && !stack.peek().equals(leftBracket) &&
                            (operations.get(nextOperation) >= operations.get(stack.peek()))) {
                        out.add(stack.pop());
                    }
                    stack.push(nextOperation);
                }
                index = nextOperationIndex + nextOperation.length();
            }
        }
        if (index != expression.length()) {
            out.add(expression.substring(index));
        }
        // Пробразование выходного списка к выходной строке.
        while (!stack.empty()) {
            out.add(stack.pop());
        }
        StringBuffer result = new StringBuffer();
        if (!out.isEmpty())
            result.append(out.remove(0));
        while (!out.isEmpty())
            result.append(" ").append(out.remove(0));

        return result.toString();
    }

    
    public static String sortingStation(String expression, Map<String, Integer> operations) {
        return sortingStation(expression, operations, "(", ")");
    }
    
   public static BigDecimal calculateExpression(String expression) {
        String rpn = sortingStation(expression, MAIN_MATH_OPERATIONS);
        StringTokenizer tokenizer = new StringTokenizer(rpn, " ");
        Stack<BigDecimal> stack = new Stack<BigDecimal>();
        while (tokenizer.hasMoreTokens()) {
            String token = tokenizer.nextToken();
            // Операнд.
            if (!MAIN_MATH_OPERATIONS.keySet().contains(token)) {
                stack.push(new BigDecimal(token));
            } else {
                BigDecimal operand2 = stack.pop();
                BigDecimal operand1 = stack.empty() ? BigDecimal.ZERO : stack.pop();
                if (token.equals("*")) {
                    stack.push(operand1.multiply(operand2));
                } else if (token.equals("/")) {
                    stack.push(operand1.divide(operand2));
                } else if (token.equals("+")) {
                    stack.push(operand1.add(operand2));
                } else if (token.equals("-")) {
                    stack.push(operand1.subtract(operand2));
                }
            }
        }
        if (stack.size() != 1)
            //throw new IllegalArgumentException("Expression syntax error.");
            return null;
        return stack.pop();
    }

    
    
    public CalkWork(){ input = null; result = "0";}

    /**
     * @return the input
     */
    public String getInput() {
        return input;
    }

    /**
     * @param input the input to set
     */
    public void setInput(String input) {
       this.input = input;
       
       

       this.result = String.valueOf(calculateExpression(this.input));
       
    }
    public String getResult()  {
        return result;
    } 
    
}
...
Рейтинг: 0 / 0
исключения в jsp
    #38060622
Liberti2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Маленькое уточнение. Пробовал return не пашет, с раскомментироваными исключениями ошибки в браузере следующие

Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.reflect.InvocationTargetException
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause

org.apache.jasper.JasperException: java.lang.reflect.InvocationTargetException
	org.apache.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:360)
	org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:306)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:89)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause

java.lang.reflect.InvocationTargetException
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:616)
	org.apache.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:354)
	org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:306)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:89)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause

java.util.EmptyStackException
	java.util.Stack.peek(Stack.java:102)
	org.calk.work.CalkWork.sortingStation(CalkWork.java:79)
	org.calk.work.CalkWork.sortingStation(CalkWork.java:116)
	org.calk.work.CalkWork.setInput(CalkWork.java:169)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke(Method.java:616)
	org.apache.jasper.runtime.JspRuntimeLibrary.internalIntrospecthelper(JspRuntimeLibrary.java:354)
	org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:306)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:89)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
...
Рейтинг: 0 / 0
исключения в jsp
    #38060749
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то опять обман. setInput - строка 171 - вызывает sortingStation.
org.calk.work.CalkWork.sortingStation(CalkWork.java:118)
org.calk.work.CalkWork.setInput(CalkWork.java:171)

В приведенном коде этого нет.
...
Рейтинг: 0 / 0
исключения в jsp
    #38060752
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть сначала вызываем peek(), а потом проверяем а не пустой ли стек. Че. Логично.

Код: java
1.
2.
3.
while (!stack.peek().equals(leftBracket)) {
                        out.add(stack.pop());
                        if (stack.empty()) {
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / исключения в jsp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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