`

request.setAttribute()、session.setAttribute()和request.getParameter()的联系与区别

 
阅读更多

1.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用。

2.request.setAttribute()和request.getAttribute()配对使用,作用域是请求和被请求页面之间。request.setAttribute()是只在此action的下一个forward需要使用的时候使用;request.getAttribute()表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。setAttribute()的参数是String和Object。

3.request.getParameter()表示接收参数,参数为页面提交的参数。包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter()),而且接收参数返回的不是Object,而是String类型。

举例:

session.setAttribute("kindresult", result);    //result 为StringBuffer类型对象

response.sendRedirect("../manage_kind.jsp");


在manage_kind.jsp中:

<%   
 StringBuffer kindresult=new StringBuffer();
 kindresult=(StringBuffer)session.getAttribute("kindresult");
 %>

<%=kindresult%>

##################################################################

我在servlet中使用了request.setAttribute()存储信息。
 语法如下:request.setAttribute("user","1234");
 然后 response.sendRedirect("/hello.jsp");
 但是在我的hello.jsp中 request.getAttribute("user");
 返回值为null,为什么没有取到String "1234"?

在这里就要注意了,sendRedirect不能传递request对象。使用request.setAttribute时不能使redirect而是forward。即是将请求转发而不是重定向。

你可以使用getServletContext().getRequestDispatcher("/hello.jsp").forward(request,response)转到hello.jsp页面,对客户端而言它意识不到是hello.jsp页面响应它。
 request对象和response对象是一样的,当然你的参数就可以传递过去了。

你使用response.sendRedirect("/hello.jsp");转到hello.jsp之后,request对象是新建的,你的属性值自然没有了。但是如果你使用session代替request就还是可以的。
 session.setAttribute("user","1234");
 session.getAttribute("user");

#####################################################################################

4.request.getParameter() 和request.getAttribute() 区别

(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"); %>

5.request.getAttribute()与request.setAttribute()

request.getAttribute("nameOfObj")可得到JSP页面一表单中控件的Value。其实表单控件中的Object的 name与value是存放在一个哈希表中的,所以在这里给出Object的name会到哈希表中找出对应它的value。

而不同页面间传值使用request.setAttribute(position, nameOfObj)时,只会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围,再传就要再设一个 request.setAttribute()。而使用session.setAttribute()会在一个过程中始终保有这个值。

P.S:JavaScript与JSP中不能相互传值,因为JavaScript运行在客户端,而JSP运行在服务器端。若想使它们之间可以相互传递参数,可以在JSP中设置一个hidden控件,用它的value结合上面所说的用法来传递所需的数值。

 

 

FROM:http://blog.163.com/magicc_love/blog/static/185853662201111124510916/

 

 

另:

B/S架构中,客户端与服务器连接,在服务端就会自动创建一个session对象. session.setAttribute("username",username); 是将username保存在session中!session的key值为“username”value值就是username真实的值,或者引用值.这样以后你可以通过session.getAttribute("username")的方法获得这个对象. 比如说,当用户已登录系统后你就在session中存储了一个用户信息对象,此后你可以随时从session中将这个对象取出来进行一些操作,比如进行身份验证等等. 
--------------------------------------------------------------------------- 
1、request.getSession()可以帮你得到HttpSession类型的对象,通常称之为session对象,session对象的作用域为一次会话,通常浏览器不关闭,保存的值就不会消失,当然也会出现session超时。服务器里面可以设置session的超时时间,web.xml中有一个session time out的地方,tomcat默认为30分钟 2、session.setAttribute("key",value);是session设置值的方法,原理同java中的HashMap的键值对,意思也就是key现在为“user”;存放的值为userName,userName应该为一个String类型的变量吧?看你自己的定义。 3、可以使用session.getAttribute("key");来取值,以为着你能得到userName的值。 4、注意:getAttribute的返回值类型是Object,需要向下转型,转成你的userName类型的,简单说就是存什么,取出来还是什么。 5、setAttribute和getAttribute就是基于HashMap的put方法和get方法实现的,一般叫键值对或者key-value,即通过键找到值。例如你的名字和你的人的关系,只要一叫你的名字,你就会喊到,通过你的名字来找你的人,简单说这就是键值对的概念。 

 

FROM:http://stevenjohn.iteye.com/blog/891177

分享到:
评论

相关推荐

    数据库测试test.sql

    // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // this.login(request,response); // }else if("register".equals(method...

    getAttribute和getParameter区别.

    request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取...

    很经典的登录回选。

    // session.setAttribute("redirectUrl", request.getRequestURL().append("?").append(request.getQueryString()).toString()); String url = request.getParameter("url"); URLEncoder.encode(URLDecoder....

    java小项目

    String name = request.getParameter("userName"); String pwd = request.getParameter("pwd"); User u = uDao.findUserByNameAndPwd(name, pwd); MsgDao mDao = new MsgDaoImpl(); List&lt;Message&gt; msgList = ...

    在JSP中使用Session制作简单的登录模块

    &lt;br&gt;if (Name.equals("mike") && Password.equals("1234")) { session.setAttribute("Login", "OK"); response.sendRedirect("Member.jsp"); } else { out.println("登录错误,请输入正确名称...

    基于servlet的购物车

    //得到书号和书本对象 int bookid =Integer.parseInt(request.getParameter("id")); Map, Book&gt; books = (Map, Book&gt;)request.getSession().getServletContext().getAttribute("books"); Book book = books....

    jsp基础精华详解

    HttpSession session = request.getSession(); session.setAttribute("name", "zhangsan"); session.setAttribute("pwd", "aaa"); String name = (String) session.getAttribute("name"); 2.cookie: //创建Cookie ...

    基于JSP的Web聊天室的设计与实现

    session.setAttribute("password",code); byte[] temp = name.getBytes("iso8859-1"); name= new String(temp); //get parameter try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection c=...

    计算机基础课程教学平台+毕业设计+源代码

    //sql语句,从user表中选择出username和userpassword与用户填入的一样的数据 String sql = "select * from user where username = '" + username + "' and userpassword = '" + userpassword + "'"; ResultSet ...

    登陆jsp数据库验证的代码

    String userpassword=request.getParameter("upassword"); String userjb=request.getParameter("userjb"); //设置一个变量保存登录状态,ture表示登录成功,false表示登录失败 boolean flag=true; %&gt; ...

    Java类写的随机验证码

    session.setAttribute("random", RS);//在servlets.RandomServlet中。 3、验证验证码 //取出提交的验证码(用户写的) String code = request.getParameter("code"); //取出生成的验证码(系统生成的) HttpSession ...

    jsp课件参考

    关于JSP的电子课件ppt,仅供参考Login.jsp &lt;form action="login.jsp" method="post"&gt; ...input type="text" name=... session.setAttribute("username",username); response.sendRedirect("welcome.jsp"); } %&gt;

    比较简单的添加购物车,不过只有一个小程序

    session.setAttribute("cart", cart); } String id=request.getParameter("id"); List&lt;CartItem&gt; items=(List)this.getServletContext().getAttribute("items"); CartItem item=null; for(CartItem i ...

    liuyanbenVSQL2000

    ; charset=gb2312" language="java" import="java.sql.*" errorPage="" %&gt; ...session.setAttribute("login","1"); response.sendRedirect("ly.jsp?page=1"); }else{ out.println("密码错误"); } %&gt; &lt;/html&gt;

    浅谈SpringMVC jsp前台获取参数的方式 EL表达式

    session.setAttribute(msg2, 1234); JSP: ${requestScope.msg} ${sessionScope.msg2} JAVA: ModelAndView ModelMap Model里添加的参数 JSP: 直接用${参数名} JAVA: 前台表单里的信息,或者是直接在url后面以...

    jsp内置对象

    JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception 1、request对象 request对象代表了客户端的请求信息,主要用于接受通过HTTP协议...

    潍坊学院成人教育Java-Web程序设计B卷试卷及参考答案.doc

    request.getParameter("aihao").length B. request.getParameter("aihao").size() C. request.getParameterValues("aihao").length D. request.getParameterValues("aihao").size() 7. ______标签用于定义表格、行...

    jsp ${param.id}用法

    ${param.id} 与输入有关,相对于 request.getParameter(“id”)。意思是获得输入的参数id。 因为a.jsp提交到b.jsp过程中,id不属于Page,Request,Session,Application任何范围中的一个,所以取不到。 而id是a.jsp传...

    网上购物系统设计与实现

    网上购物系统设计和实现课程设计 四、程序关键代码及效果图 1、过滤器代码:[只要doFilter()方法] (1)adminfilter.java: HttpServletRequest requ=(HttpServletRequest)req; res.setCharacterEncoding("gb18030...

    小型bbs jsp源代码

    session.setAttribute("Name",name); // 思考:为什么用session 存放此变量,还有什么变量能存在session中 response.sendRedirect("list.jsp"); // 页面跳转 ,试试用另一种方式表现 }else if (disable){%&gt; 该用户...

Global site tag (gtag.js) - Google Analytics