先看个小例子:
request1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<form action="request2.jsp">
username:<input type="text" name="username">
<input type="submit" value="submit">
</form>
</body>
</html>
request2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%String username = request.getParameter("username"); %>
username: <%=username %>
<%request.setAttribute("username",username); %>
<jsp:forward page="request3.jsp"></jsp:forward>
</body>
</html>
request3.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%String username =(String) request.getAttribute("username"); %>
<%=username %>
</body>
</html>
request3所在的页面可以正确取出客户在request1.jsp页面填写的username
如果将request2.jsp改成
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%String username = request.getParameter("username"); %>
username: <%=username %>
<%request.setAttribute("username",username); %>
<a href="request3.jsp">request3</a>
</body>
</html>
那么在request3.jsp页面显示的将是null
request的getParameter与getAttribute方法的区别是:
getParameter取的是从客户端传来的值,而getAttribute取的是在服务器端由setAttribute设置好的值。
Application内置对象:
网页计算小程序,在不同的浏览器页面访问,计数都是累加!
application是JSP活动范围最大的对象,只要服务器不关闭,整个服务器只有一个application对象。它与session的区别是session只有一个针对每个浏览器,只要浏览器不"关闭",session对象就一直存在。request是针对请求,每次请求都会生成一个新的request对象。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
if(application.getAttribute("counter") == null)
{
application.setAttribute("counter","1");
}else{
String strCounter = null;
strCounter = application.getAttribute("counter").toString();
int counter = 1;
counter = Integer.parseInt(strCounter);
counter ++;
application.setAttribute("counter",Integer.valueOf(counter));
}
%>
您是第<%=application.getAttribute("counter") %>位访问者
</body>
</html>
此外application.getRealPath("xx")方法也很重要,它会返回资源在服务器上的绝对路径。
下面再写一个用户注册向导页面,包括三个页面,分别是My1.jsp,My2.jsp,My3.jsp
在My1.jsp中输入用户名,然后在My2.jsp中显示,并要求在My2.jsp中要求输入该用户的个人爱好。
最后在My3.jsp页面中显示出用户名与该用户的爱好。
My1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<form action="My2.jsp">
用户名:<input type="text" name="username"/>
<input type="submit">
</form>
</body>
</html>
My2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
String username = request.getParameter("username");
%>
用户名是: <%= username %>
<form action="My3.jsp">
输入你的爱好:<input type="text" name="fun"/>
<input type="hidden" name="username" value=<%=username%> >
<input type="submit">
</form>
</body>
</html>
My3.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<%
String username = request.getParameter("username");
String fun = request.getParameter("fun");
%>
用户名是: <%= username %>
爱好是: <%= fun %>
</body>
</html>
注意My2.jsp页面中的红色代码,使用此方法中转从My1.jsp页面转来的username到My3.jsp。现实中的大部分页面开发都是使用此方法。
如果不这样做,就需要使用sesssion来保存username,不推荐使用session,能少用session就尽量少用。