1.5 jsp内建对象之request.getParameter(),request.setAttribute()

request.getParameter(),request.setAttribute()区别如下:

 
 
(1)request.getParameter()取得 是通过容器的实现来取得通过类似post,get等方式传入的数据 ,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
(2)request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部
还有一点就是,HttpServletRequest类有setAttribute()方法,而没有setParameter()方法。
 
 
拿一个例子来说一下吧,假如两个WEB页面间为链接关系时,就是说要从1.jsp链接到2.jsp时,被链接的是2.jsp可以通过getParameter()方法来获得请求参数.
 
 
假如1.jsp里有
<form name="form1" method="post" action="2.jsp">
 
 
请输入用户姓名:<input type="text" name="username">
 
 
<input type="submit" name="Submit" value="提交">
 
 
</form>的话在2.jsp中通过request.getParameter("username")方法来获得请求参数username:
<% String username=request.getParameter("username"); %>
***
 
 
但是如果两个WEB间为转发关系时,转发目的WEB可以用getAttribute()方法来和转发源WEB共享request范围内的数据,也还是说一个例子吧。
有1.jsp和2.jsp
 
 
1.jsp希望向2.jsp传递当前的用户名字,如何传递这一数据呢?先在1.jsp中调用如下setAttribute()方法:
 
 
<%
 
 
String username=request.getParameter("username");
request.setAttribute("username",username);
%>
 
 
<jsp:forward page="2.jsp" />
在2.jsp中通过getAttribute()方法获得用户名字:
 
 
<% String username=(String)request.getAttribute("username"); %>
 
顺便情调下转发和重定向的区别:
他们的调用分别如下例:
request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp

在jsp页面中你也会看到通过下面的方式实现转发:

<jsp:forward page="apage.jsp" />

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302响应要求客户浏览器发送一个新的http请求----》客户端浏览器接受此响应后在发送一个新的http请求到服务器----》服务器根据此请求寻找资源并发送给客户,它可以重定向到任意URL,不能共享request范围内的数据。

转发过程:客户浏览器发送http请求----》web服务器接受此请求后调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户,它只能在同一个web应用中使用,可以共享request范围内的数据。

怎么选择是重定向还是转发呢?通常情况下转发更快,而且能保持request内的对象,所以他是第一选择。但是由于在转发之后,浏览器中URL仍然指向开始页面,此时如果重载当前页面,开始页面将会被重新调用。如果你不想看到这样的情况,则选择转发。

你可能感兴趣的:(jsp,request,setAttribute)