Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2017, 15:12   #1
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
По умолчанию Некорректная работа Servlet JSP

Доброго времени суток!

Имею jsp сервлет, который имитирует калькулятор. Для заполнения полей использую атрибуты, имена которых совпадают с именами параметров (для удобства). Каждый запрос проверяет валидность обоих чисел, а затем вычисляет результат, если введенный знак валиден.

Имеющийся код:
Код:
public class CalcServletJSP extends HttpServlet
{
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
    		throws ServletException, IOException
    {
    	String n1 = req.getParameter("numb1");
    	if (n1 != null && n1.length() != 0 && n1 != "null")
    	{
    		if (validate(n1))
    			req.setAttribute("numb1", n1);
    		else
    			req.setAttribute("numb1", "");
    	}
    	else
    		req.setAttribute("numb1", "");
    	
    	String n2 = req.getParameter("numb2");
    	if (n2 != null && n2.length() != 0 && n2 != "null")
    	{
    		if (validate(n2))
    			req.setAttribute("numb2", n2);
    		else
    			req.setAttribute("numb2", "");
    	}
    	else
    		req.setAttribute("numb2", "");
    	
    	String op = req.getParameter("oper");
    	if (op != null && op.length() != 0 && op != "null")
    	{
    		if (op_validate(op))
    		{
    			req.setAttribute("oper", op);
    			
    			switch(op)
    			{
    				case "+":
    					req.setAttribute("res", String.valueOf(Float.parseFloat(n1) + Float.parseFloat(n2)));
    					break;
    				case "-":
    					req.setAttribute("res", String.valueOf(Float.parseFloat(n1) + Float.parseFloat(n2)));
    					break;
    				case "*":
    					req.setAttribute("res", String.valueOf(Float.parseFloat(n1) + Float.parseFloat(n2)));
    					break;
    				case "/":
    					req.setAttribute("res", String.valueOf(Float.parseFloat(n1) + Float.parseFloat(n2)));
    					break;
    			}
    		}
    		else
    		{
    			req.setAttribute("oper", "");
    			req.setAttribute("res", "operation error");
    		}
    	}
        getServletContext().getRequestDispatcher("/index-calc.jsp").forward(req, resp);
    }
    
    private boolean validate(String numb)
    {
    	for (int i=0; i<numb.length(); i++)
    	{
    		if (i == 0 && numb.charAt(0) == '-')
    			continue;
    		
    		if (!Character.isDigit(numb.charAt(i)))
    			return false;
    	}
    	
    	return true;
    }
    
    private boolean op_validate(String op)
    {
    	String[] ops = {"+", "-", "*", "/"};
    	
    	for (int i=0; i<ops.length; i++)
    	{
    		if (op == ops[i])
    			return true;
    	}
    	
    	return false;
    }
}
Так выглядит index-calc.jsp:
Код HTML:
<html>
    <head>
        <title>ezCalc</title>
    </head>

    <body>
        <form action="/ezCalcJSP/cs" method="get">
            <%
                String n1 = String.valueOf(request.getAttribute("numb1"));
            %>
            <input type="text" name="numb1" value="<%= n1%>" />

            <br>
            <%
                String oper = String.valueOf(request.getAttribute("oper"));
            %>
            <input type="text" name="oper" value="<%= oper%>" />

            <br>
            <%
                String n2 = String.valueOf(request.getAttribute("numb2"));
            %>
            <input type="text" name="numb2" value="<%= n2%>" />

            <br>
            <%
                String res = String.valueOf(request.getAttribute("res"));
            %>
            <input type="text" name="res" value="<%= res%>" />

            <br>
            <input type="submit">
        </form>
    </body>
</html>
Есть следующие непонятки:
1) по дефолту должны быть пустые поля (это всё проверяется при выполнении doGet моим сервлетом), однако поле 'oper' и 'res' (2 и 4, соответственно) показывают значение null
2) нажатие на submit посылает запрос, всё обрабатывается. В поля цифр (1 и 3 поле) подставляются значения ввода, а на место знака и результата всё время подставляются пустота и 'operation error' соответственно.

Прошу адептов программирования указать на места ошибок, если таковы имеются!
Заранее благодарю за любые комментарии.
SnapeEye вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jsp and mysql работа с таблицами mrprim Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 21 01.02.2017 23:27
Некорректная работа программы AB96 Общие вопросы C/C++ 2 25.12.2015 14:06
Некорректная работа orandzheviyman Помощь студентам 0 23.02.2015 22:19
Некорректная работа программы... HyperZen Общие вопросы Delphi 2 03.07.2011 10:46
JSP editor и JSP + spring Guide Jakethefish Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 15.06.2010 17:16