Servlet Class4
Posted Observer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet Class4相关的知识,希望对你有一定的参考价值。
1.request 请求:
常用方法:
//获取请求方式 String method=request.getMethod(); //获得请求资源的相关内容 String requestURI=request.getRequestURI(); StringBuffer requestURL=request.getRequestURL(); //获得WEB应用名称 String contextPath=request.getContextPath(); //返回所有请求参数的Map Map<String,String[]> map = request.getParameterMap(); //获取请求头字段值 String header = request.getHeader("referer");
request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)" +
request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名" +
request.getParameter()获得的是表单提交的参数
checkbox 如果没有value,打钩后获取到的默认值是on,没打勾则是null,一般常见于类似于请记住我的复选框!
request.getAttribute()获取的是本次请求调用request.setAttribute()设置的参数
请求值传递:
利用服务端跳转的方法可以实现请求数值的传递
request.setAttribute("message", "账户或密码错误!");
request.getRequestDispatcher("login.jsp").forward(request, response);
2.Session(会话):
从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话。
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。
Session是一个域对象,Session内存储的键值对可以被当前回话内的所有路径读取
Session的生成与读取:
<% session.setAttribute("name","temmo"); %> <a href="getSession.jsp">跳转到获取session的页面</a> <%=session.getAttribute("name")%>
a)web.xml中 <session-config> <session-timeout>30</session-timeout>//默认30分钟 </session-config> b)在程序中手动设置 session.setMaxInactiveInterval(60 * 60);//设置单位为秒,设置为-1永不过期
<a href="<%=response.encodeURL("getSession.jsp")%>">跳转到获取session的页面</a>
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
<% Cookie c = new Cookie("name","Gareen");//键值对 c.setMaxAge(60*60*24);//有效期24小时,本地持久化 c.setPath("127.0.0.1");//Path表示服务器的主机名,只有浏览器通过这个主机名访问服务器的时候,才会提交这个cookie到服务端 response.addCookie(c);//发送生成的Cookie %> <a href="getCookie.jsp">跳转到获取cookie的页面</a>
注意path的问题:
path表示cookie所在的目录。”/”表示根目录,所有页面都能访问根目录下面的cookie。如果cookie的path为test,那么只test目录下或者是test下的子目录的页面和代码才获取到这个cookie。
例如http://localhost:8080/Web02/test
当URL的path值是以“/”结尾的时候,直接设置为cookie的path值
当URL的path值不是以“/”结尾的时候,查看path里面是否有“/”
例:http://localhost:8080/Web02/test/testServlet
如果有“/”的话,直接截取到最后一个“/”,然后设置为cookie的path值。
如果没有“/”的话,将cookie的path设置为”/”。
Cookie读取
Cookie[] cookies = request.getCookies(); if(cookies != null) for(int i=0;i<cookies.length;i++){ response.getWriter().print(cookies[i].getName()+":"+cookies[i].getValue()); }
Cookie删除
Cookie c = new Cookie("name","peter"); c.setMaxAge(24*60*60); c.setPath("/"); response.addCookie(c); Cookie cookie = new Cookie("username","peter");// 新建Cookie cookie.setMaxAge(0); // 设置生命周期为0,表示将要删除 response.addCookie(cookie);
注意:Cookie的值在默认情况不能存入中文,要经过重新编码后才可以
Cookie cookie = new Cookie("name", URLEncoder.encode("张三", "UTF-8"));//转为UTF-8编码 Cookie[] cookies = request.getCookies(); for(Cookie c:cookies) { String cname = c.getName(); String cvalue = URLDecoder.decode(c.getValue(), "UTF-8");//用UTF-8编码读取 if(cname.equals("name")) { user = cvalue; } }
以上是关于Servlet Class4的主要内容,如果未能解决你的问题,请参考以下文章