Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP默认对象验证_Java_Jsp_Session - Fatal编程技术网

Java JSP默认对象验证

Java JSP默认对象验证,java,jsp,session,Java,Jsp,Session,我当时正在从事一个使用MVC设计的项目,该项目使用JSP作为视图层。 我正在测试JSP可用的会话、应用程序和请求对象的结果。 我编写了以下代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3

我当时正在从事一个使用MVC设计的项目,该项目使用JSP作为视图层。 我正在测试JSP可用的会话、应用程序和请求对象的结果。 我编写了以下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Calculator</title>
</head>
<body>
    <%! int result = 0;
        int add_request(String num1, String num2){
            if((num1 != null && num2 !=null) && (!num1.isEmpty() && !num2.isEmpty()))
                result = Integer.parseInt(num1)+Integer.parseInt(num2);
        return result;
    }

    int div_session(String number, String number1){
        if((number != null && number1 != null) && (!number.isEmpty() && !number1.isEmpty()))
                return (Integer.parseInt(number)/Integer.parseInt(number1));
        return 0;
    }

    int mult_context(String number, String number1){
        if((number != null && number1 != null) && (!number.isEmpty() && !number1.isEmpty()))
                return (Integer.parseInt(number)*Integer.parseInt(number1));
        return 0;
    }

    %>

    <div align="center">
        <form>
            Number: <input type="text" name="num1" /> <br>
            Number: <input type="text" name="num2" />
            <div align="center">
             <input type="submit" >
            </div>
        </form> 
    </div>

    <%
        ServletContext context = request.getServletContext();
        String firstnum = request.getParameter("num1");
        String secondnum = request.getParameter("num2");
        if((firstnum != null && secondnum != null) && (!firstnum.isEmpty() && !secondnum.isEmpty()))
        {
            session.setAttribute("test1", firstnum);
            session.setAttribute("test2", secondnum);
            context.setAttribute("test1", firstnum);
            context.setAttribute("test2", secondnum);
            application.setAttribute("test1", firstnum);
            application.setAttribute("test2", secondnum);
        }
    %>
    Result:<br>

    <br>Add request: <%= add_request(request.getParameter("num1"), request.getParameter("num2")) %>
    <br>Division session: <%= div_session((String)session.getAttribute("test1"), (String)session.getAttribute("test2")) %>
    <br>Multiplication context: <%= mult_context((String)context.getAttribute("test1"), (String)context.getAttribute("test2")) %>
    <br>Application Result: <%= mult_context((String)application.getAttribute("test1"), (String)application.getAttribute("test2")) %>

</body>
</html>

计算器
编号:
编号: 结果:

添加请求:
分区会议:
乘法上下文:
申请结果:
预期的产出是:
编号:120
编号:20


添加结果:140
分组会议:6次
乘法上下文:2400
乘法应用:2400

当我重新提交时,传递给请求对象的参数为null,所以addresult应该为零。如果我打开一个新的选项卡,a访问url而不带参数,则添加结果应为零。当我打开其他浏览器时,除法会话应为零。但一切都是一样的


因为根据理论,只有会话和应用程序/上下文对象在多个请求之间是持久的,只有上下文在多个会话中是持久的


伙计们,我错在哪里了。 谢谢。

请参阅, 发生这种情况是因为
范围
概念

JSP
从狭义到广义,有比更像说话的范围

1. request
2. page
3. session
4. application
现在,正如我当时所知道的

当某个
参数
要提取时

从请求获取“num1”和“num2”(已在中设置 会话+应用范围,而第一次提出请求)然后

如果找不到(页面刷新时确实找不到),则尝试 如果有,从更广的范围内找出它

所以,最后在你的案例中

如果在请求中未找到
num1
num2
(页面刷新时),则 如果存在,则从更大范围的下一个级别开始搜索;或者 不(大于请求范围)

看,它的搜索方向是下一个更大的范围,直到没有 find finally not find anywhere然后返回null

所以它是从会话中获取的,然后它将不会进入搜索 适用范围

谢谢。

已更新

请对代码进行以下更改

int add_request(String num1, String num2){

            if((num1 != null && num2 !=null) && (!num1.isEmpty() && !num2.isEmpty()))
                result = Integer.parseInt(num1)+Integer.parseInt(num2);
            else
                result = 0;

        return result;
并从查询字符串中清除附加参数,然后按Enter键 键盘你会得到你所期望的正确结果

看,, 发生这种情况是因为
范围
概念

JSP
从狭义到广义,有比更像说话的范围

1. request
2. page
3. session
4. application
现在,正如我当时所知道的

当某个
参数
要提取时

从请求获取“num1”和“num2”(已在中设置 会话+应用范围,而第一次提出请求)然后

如果找不到(页面刷新时确实找不到),则尝试 如果有,从更广的范围内找出它

所以,最后在你的案例中

如果在请求中未找到
num1
num2
(页面刷新时),则 如果存在,则从更大范围的下一个级别开始搜索;或者 不(大于请求范围)

看,它的搜索方向是下一个更大的范围,直到没有 find finally not find anywhere然后返回null

所以它是从会话中获取的,然后它将不会进入搜索 适用范围

谢谢。

已更新

请对代码进行以下更改

int add_request(String num1, String num2){

            if((num1 != null && num2 !=null) && (!num1.isEmpty() && !num2.isEmpty()))
                result = Integer.parseInt(num1)+Integer.parseInt(num2);
            else
                result = 0;

        return result;
并从查询字符串中清除附加参数,然后按Enter键 键盘你会得到你所期望的正确结果


您已经创建了Servlet实例的实例变量,该实例是从已翻译的JSP创建的

<%! int result = 0   

因此,在add_请求方法中,当参数为空时,将返回result的持久值。

您已经创建了一个Servlet实例的实例变量,该实例是从已翻译的JSP创建的

<%! int result = 0   

因此,在add_请求方法中,当参数为空时,将返回result的持久值。

请尝试下面的add_请求代码。这对我有用

int add_request(String num1, String num2) {
        if ((num1 != null && num2 != null)
                && (!num1.isEmpty() && !num2.isEmpty()))
            return (Integer.parseInt(num1) + Integer.parseInt(num2));
        return 0;
    }

在代码中,“仅添加”选项无法正常工作。实际上,Division选项按预期运行良好(在不同的浏览器中,会话不会被执行)。如果您在代码中进行了上述更改,所有作用域都将按预期工作。

请尝试下面的添加请求代码。这对我有用

int add_request(String num1, String num2) {
        if ((num1 != null && num2 != null)
                && (!num1.isEmpty() && !num2.isEmpty()))
            return (Integer.parseInt(num1) + Integer.parseInt(num2));
        return 0;
    }

在代码中,“仅添加”选项无法正常工作。实际上,Division选项按预期运行良好(在不同的浏览器中,会话不会被执行)。如果在代码中进行上述更改,所有作用域都将按预期工作。

一切似乎正常。如果我刷新,则参数num1和num2将为null,因此add方法将显示0,但它显示的是最后一个结果,而不是在下一个请求中更新结果。会话和应用程序也是如此。一切似乎都很好。如果我刷新,那么参数num1和num2将为null,因此add方法将显示0,但它显示的是最后一个结果,而不是在下一个请求中更新结果。会话和应用程序也是如此。甚至不需要“result”实例成员。甚至不需要“result”实例成员。很好,该请求。getParameter(“num1”)搜索范围更广的参数,但我用不同的名称保存了对象,即表单上的参数名为num1,num2,但在会话和应用程序中,参数名为test1,test2那么映射是如何发生的。@AbhijatyaSingh请参阅我更新的部分。。。您是对的,不同的作用域没有相同的名称。对不起谢谢:-)好的请求。getParameter(“num1”)搜索范围更广的参数,但我用不同的名称保存了对象,即表单上的参数名称是num1,num2