Java JSP默认对象验证
我当时正在从事一个使用MVC设计的项目,该项目使用JSP作为视图层。 我正在测试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
<%@ 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