Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 25.07.2017, 16:12   #1
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
Репутация: 10
По умолчанию Некорректная работа 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jsp and mysql работа с таблицами mrprim Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 21 02.02.2017 00:27
Некорректная работа программы AB96 Общие вопросы C/C++ 2 25.12.2015 15:06
Некорректная работа orandzheviyman Помощь студентам 0 23.02.2015 23: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


20:28.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru