【发布时间】:2016-03-17 13:37:54
【问题描述】:
我正在使用 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
当我重新提交时,传递给请求对象的参数为空,因此添加结果应为零。如果我打开一个新选项卡 a 访问不带参数的 url,则添加结果应该为零。当我打开另一个浏览器时,分区会话应该为零。但一切都一样。
因为根据理论,只有会话和应用程序/上下文对象在多个请求之间是持久的,并且只有上下文在多个会话中是持久的。
伙计们,我哪里出错了。 谢谢。
【问题讨论】:
-
一切似乎都很好。
-
如果我刷新,那么参数 num1 和 num2 将为空,因此 add 方法将显示 0,但它显示最后一个结果,它不会在下一个请求中更新结果。会话和应用程序也是如此。