先看个小例子:
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就尽量少用。