2.session.setAttribute()和session.getAttribute()区别和联系

2.session.setAttribute和session.getAttribute()区别和联系


在web开发的时候,使用的都是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(“user”,userName); 》》是session设置值的方法,
原理类似于 java中的HashMap的 键值对,意思也就是key 现在为“user”;存放的值为userName,userName应该为一个String类型的变量吧?看你自己的定义。

3、可以使用session.getAttribute(“key”);来取值,以为着你能得到userName的值。

4、注意:getAttribute的返回值类型是Object,需要向下转型,转成你的userName类型的,简单说就是存什么,取出来还是什么。!!就是需要强制转换的意思,或者是声明为object类。

5、.setAttribute 和 .getAttribute 都是基于HashMap的put方法和get方法实现的,一般叫键值对或者key-value,即通过键找到值
例如你的名字和你的人的关系,只要一叫你的名字,你就会喊到,通过你的名字来找你的人,简单说这就是键值对的概念。


  • 27
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
package com.bjsxt.servlet; import com.bjsxt.entity.User; import com.bjsxt.service.UserService; import com.bjsxt.service.impl.UserServiceImpl; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; import java.net.URLEncoder; import java.sql.Date; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class UserServlet extends BaseServlet { // @Override // protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // //解决POST表单的中文乱码问题 // request.setCharacterEncoding("utf-8"); // //接收method属性的值 // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // this.login(request,response); // }else if("register".equals(methodName)){ // this.register(request,response); // }else if("logout".equals(methodName)){ // this.logout(request,response); // } // // } public void show(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取表单的数据 String userId = request.getParameter("userId"); if(userId == null){ userId = ""; } String strAge = request.getParameter("minAge"); int minAge = 0; try{ minAge = Integer.parseInt(strAge); //"12" "abc" }catch(NumberFormatException e){ e.printStackTrace(); } //调用业务层完成查询操作 UserService userService = new UserServiceImpl(); //List<User> userList = userService.findAll(); List<User> userList = userService.find(userId,minAge); //List<User> userList = null; //List<User> userList = new ArrayList<User>(); //跳转到show.jsp显示数据 request.setAttribute("userId",userId); request.setAttribute("minAge",strAge); request.setAttribute("ulist",userList); request.getRequestDispatcher("/admin/show.jsp").forward(request,response); } public void logout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //结束当前的session request.getSession().invalidate(); //跳转回登录页面 response.sendRedirect(request.getContextPath()+"/admin/login.jsp"); } public void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //request.setCharacterEncoding("utf-8"); //1.接收来自视图层的表单数据 String userId = request.getParameter("userId"); String realName = request.getParameter("realName"); String pwd = request.getParameter("pwd"); String rePwd = request.getParameter("repwd"); int age = Integer.parseInt(request.getParameter("age"));// "23" String [] hobbyArr = request.getParameterValues("hobby"); String strDate = request.getParameter("enterDate");//"1999-12-23" Date enterDate = Date.valueOf(strDate); //util.Date SimpleDateFormat //判断两次密码是否相同 if(pwd == null || !pwd.equals(rePwd)){ request.setAttribute("error","两次密码必须相同"); request.getRequestDispatcher("/admin/register.jsp").forward(request,response); return; } //2.调用业务层完成注册操作并返回结果 User user = new User(userId,realName,pwd,age, Arrays.toString(hobbyArr),enterDate); UserService userService = new UserServiceImpl(); int n = userService.register(user); //3.根据结果进行页面跳转 if(n>0){ response.sendRedirect(request.getContextPath()+"/admin/login.jsp"); }else{ request.setAttribute("error","注册失败"); request.getRequestDispatcher("/admin/register.jsp").forward(request,response); } } public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决POST表单的中文乱码问题 //request.setCharacterEncoding("utf-8"); //获取用户名和密码 request 内建对象 请求 String username = request.getParameter("username"); String password = request.getParameter("password"); String rememberme = request.getParameter("rememberme"); //调用下一层判断登录是否成功,并返回结果 //进行服务器端的表单验证 if(username ==null || "".equals(username)){ request.setAttribute("error","用户名不能为空JSP"); request.getRequestDispatcher("/admin/login.jsp").forward(request,response); return; } if (username.length()<=6){ request.setAttribute("error","用户名长度必须大于6JSP"); request.getRequestDispatcher("/admin/login.jsp").forward(request,response);//后面语句还会执行 return; //后面的语句不再执行 } // boolean flag = false;//默认失败 // if(username.indexOf("sxt")>=0 || username.contains("尚学堂")){ // flag = true; // } User user = null;//默认登录失败 // UserDao userDao = new UserDaoImpl(); // user = userDao.find(username,password); UserService userService = new UserServiceImpl(); user = userService.login(username,password); //userService.addOrder("shoppingCart"); //输出结果 if(user != null){ //登录成功才记住我 //1.办理会员卡 String username2 = URLEncoder.encode(username,"utf-8"); Cookie cookie1 = new Cookie("uname",username2); Cookie cookie2 = new Cookie("password",password); //2.指定会员卡的作用范围,默认范围是当前目录 /servlet/LoginServlet /admin/login.jsp //cookie1.setPath("/"); //当前服务器 cookie1.setPath("/myservlet2/"); //当前项目 cookie2.setPath("/myservlet2"); //3.指定会员卡的作用时间 if("yes".equals(rememberme)){ cookie1.setMaxAge(60*60*24*10); //默认的时间浏览器不关闭的时间;-1 表示一直有效 cookie2.setMaxAge(60*60*24*10); }else{ cookie1.setMaxAge(0); cookie2.setMaxAge(0); } //4.将会员卡带回家 response.addCookie(cookie1); response.addCookie(cookie2); //成功跳转到成功页面 //out.println("登录成功"); // /servlet/LoginServlet // /servlet/success.jsp // request.getRequestDispatcher("/admin/success.jsp").forward(request,response); HttpSession session = request.getSession(); // session.setAttribute("username",username); session.setAttribute("user",user); //response.sendRedirect("/myservlet2/admin/success.jsp"); //response.sendRedirect("https://www.bjsxt.com:443/news/11377.html"); //response.sendRedirect("http://localhost:8080/myservlet2/admin/success.jsp"); //response.sendRedirect("/myservlet2/admin/success.jsp"); //response.sendRedirect("/myservlet2/admin/success.jsp"); //response.sendRedirect(request.getContextPath()+"/admin/success.jsp"); //http://192.168.58.250:8080/myservlet2/servlet/LoginServlet //http://192.168.58.250:8080/myservlet2/admin/success.jsp //登录成功后,网站的访问人数+1 //1.获取当前的访问人数 ServletContext context = this.getServletContext(); Integer count2 = (Integer) context.getAttribute("count"); //2.人数+1 if(count2 == null){ //第一个用户 count2 = 1; }else{ count2++; } //3.再存放到application作用域中 context.setAttribute("count",count2); //http://192.168.58.250:8080/myservlet2/servlet/admin/success.jsp response.sendRedirect("../admin/success.jsp"); }else{ //失败跳转回登录页面 //out.println("登录失败"); request.setAttribute("error","用户名或者密码错误"); // RequestDispatcher rd = request.getRequestDispatcher("/admin/login.jsp"); // rd.forward(request,response); //RequestDispatcher rd = request.getRequestDispatcher("http://localhost:8080/myservlet2/admin/login.jsp"); //RequestDispatcher rd = request.getRequestDispatcher("/admin/login.jsp"); //http://192.168.58.250:8080/myservlet2/servlet/admin/login.jsp RequestDispatcher rd = request.getRequestDispatcher("../admin/login.jsp"); rd.forward(request,response); } } }
<br>JSP Login.jsp <br><br><br><br><%@ page contentType="text/html;charset=GB2312" %><br><br><html><br><head><br><title>CH5 - Login.jsp</title><br></head><br><body><br><br><h2>javax.servlet.http.HttpSession - session 对象</h2> <br><form action=Login.jsp method="POST" ><br>Login Name: <input type="text" name="Name"><br><br>Login Password: <input type="text" name="Password" ><br><br><input type="submit" value="Send"><br><br><form><br><br><% if (request.getParameter("Name") != null &&<br> request.getParameter("Password") != null) { <br>String Name = request.getParameter("Name");<br>String Password = request.getParameter("Password");<br><br>if (Name.equals("mike") && Password.equals("1234")) { <br>session.setAttribute("Login", "OK");<br>response.sendRedirect("Member.jsp");<br>}<br>else { <br>out.println("登录错误,请输入正确名称"); <br>} <br>}<br>%><br><br></body><br></html> <br><br><br>JSP Member.jsp <br><br><br><br><%@ page contentType="text/html;charset=GB2312" %><br><br><html><br><head><br><title>CH5 - Member.jsp</title><br></head><br><body><br><br><h2>javax.servlet.http.HttpSession - session 对象</h2> <br><% <br>String Login = (String)session.getAttribute("Login");<br><br>if (Login != null && Login.equals("OK")) { <br>out.println("欢迎进入");<br>session.invalidate(); <br>} <br>else { <br>out.println("请先登录,谢谢") ;<br>out.println("<br>经过五秒之后,网页会自动返回Login.jsp");<br><br>response.setHeader("Refresh","5;URL=Login.jsp"); <br>}<br>%><br><br></body><br></html> <br>
1.getAttribute是取得jsp中 用setAttribute設定的attribute 2.parameter得到的是string;attribute得到的是object 3.request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。即request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据。 JSP中getParameter与getAttribute有何区别? ——说实话,这个问题当初我也困惑很久,我也知道怎么用,可是到底有什么区别,我也不是很清楚,后来找了很多资料才明白。昨天又有一位朋友问我这个问题,想我当初同样也困惑过,于是我就把这个问题贴出来,让同样困惑的朋友解惑。 ——getParameter得到的都是String类型的。或者是http://a.jsp?id=123中的123,或者是某个表单提交过去的数据。 ——getAttribute则可以是对象。 ——getParameter()是获取POST/GET传递的参数值; ——getAttribute()是获取对象容器中的数据值; ——getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。 ——getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。 ——getParameter()是获取POST/GET传递的参数值; ——getAttribute()是获取SESSION的值; 另外,可以用setAttribute,getAttribute发送接收对象.而getParameter显然只能传字符串。 setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。 getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。getParameter返回的是String,用于读取提交的表单中的值; getAttribute返回的是Objiect,需进行转换,可是setAttribute设置成任意对象,使用很灵活,可随时用;
潍坊学院成人教育《Java Web程序设计》试卷(B)卷试题及参考答案 一、填空(共 6题,每空 1 分,合计10 分) 1. 超链接标签的 属性用来指定链接地址。 2. mvc思想中,M是 ,V是 ,C是controller。 3. JSP页面中的6个基本元素包括指令、 、 表达式、动作标签和注释。 4. 和 是Servlet处理完数据后进行跳转的两种方式。 5. 在JavaScript中根据变量的作用域可以分为:全局变量和 两种。 6. 表格的 和 属性用于水平和垂直合并单元格。 二、选择(共 15题,每空 2 分,合计30 分) 1. javascript中,用于显示弹出提示框的方法是_______。 A. alert() B. confirm() C. prompt() D. createPopup() 2. 使用JSP开发Web项目时,web.xml文件一般位于目录结构中的_____下。 A. src目录 B. 文档根目录或其子文件夹 C. META-INF目录 D. WEB-INF目录 3. 下列代码的输出结果是______ <script> var s = "2,3,4,5,6"; document.write(s.substring(4).split(",").length); </script> A. 1 B. 2 C. 3 D. 4 4. window对象中用于显示一个输入对话框的方法是_______。 A. alert() B. confirm() C. prompt() D. createPopup() 5. 下列代码的输出结果是_____ <script> var a = new Array(); document.write(a.length); a[1] = 1; document.write(a.length); a = [1, 2, 3, 4,]; document.write(a.length); </script> A. 014 B. 024 C. 025 D. 运行错误 6. 针对下述JSP页面,在Servlet中需要得到用户选择的爱好的数量,最合适的代码是____ __。 <input type="checkbox" name="aihao" value="1"/>游戏<br/> <input type="checkbox" name="aihao" value="2"/>运动<br/> <input type="checkbox" name="aihao" value="3"/>棋牌<br/> <input type="checkbox" name="aihao" value="4"/>美食<br/> A. request.getParameter("aihao").length B. request.getParameter("aihao").size() C. request.getParameterValues("aihao").length D. request.getParameterValues("aihao").size() 7. ______标签用于定义表格、行和单元格。 A. tbody tr td B. table row cel C. table tr td D. table th td 8. JSP表达式语言的语法是________。 A. {EL expression} B. ${EL expression} C. @{EL expression} D. &{EL expression} 9. 下列代码的输出结果是_______。 <% int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }; pageContext.setAttribute("a", a); %> <c:forEach items="${a}" var="i" begin="3" end="5" step="2"> ${i }  </c:forEach> A. 1 2 3 4 5 6 7 8 B. 3 5 C. 4 6 D. 4 5 6 10. 下面哪个不能结束session会话________。 A. 调用HttpSession的clear()方法 B. 调用HttpSession的invalidate()方法 C. 两次访问超过session定义的非活动时间间隔 D. 关闭浏览器 11. 在HttpSession中写入和读取数据的方法是______。 A. setParameter()和getParameter() B. setAttribute()和getAttribute() C. addAttribute()和getAttribut
session.getAttribute()是一个用于从session中获取存储的值的方法。它返回的是一个Object类型的值,所以在使用之前需要进行类型转换。比如,如果你想获取名为"student"的session属性,并将其转换为String类型,你可以使用以下代码:String session1 = (String) session.getAttribute("student"); \[1\]。这个方法可以用于获取session中保存的对象,比如进行身份验证或获取登录状态验证等操作。你可以使用session.setAttribute()方法将对象保存到session中,然后随时使用session.getAttribute()方法来获取对应的值。注意,获取值时需要进行类型转换。例如,session.setAttribute("userName", Object)用于保存一个名为"userName"的对象到session中,然后可以使用session.getAttribute("userName")来获取对应的值。\[2\] #### 引用[.reference_title] - *1* *3* [session.setAttribute()和session.getAttribute()的使用](https://blog.csdn.net/whitek387/article/details/114838684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [session.setAttribute()和session.getAttribute()的简单理解和用法](https://blog.csdn.net/qq_54000767/article/details/128002079)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖一点雨

原创不易,鼓励鼓励~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值