当前位置: 代码迷 >> Web前端 >> Web开发六:JSP内置对象比较与分析2
  详细解决方案

Web开发六:JSP内置对象比较与分析2

热度:105   发布时间:2012-10-26 10:30:59.0
Web开发6:JSP内置对象比较与分析2

先看个小例子:

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就尽量少用。

  相关解决方案