Servlet(四):request、response、Cookie、Session

相关文章:
Servlet(一):Web项目的开发流程
Servlet(二):简介
Servlet(三):生命周期详解he常见错误

reqeuest请求

作用:
request对象中封存了当前请求的所有请求信息

注意:
request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。

request的作用域:
不同页面间传值使用
req.setAttribute(“message”,“第一次”);
String message = req.getAttribute(“message”);
时,
只会从a.jsp到b.jsp一次传递,之后这个request就会失去它的作用范围。
作用:解决一次请求中的数据共享问题。
例如:登录错误的时候返回“错误提示信息”

使用:
1. 获取请求头数据:
获取请求方式:get/post =>req.getMethod();
获取请求URL: => req.getRequestURL();
获取协议:=> req.getScheme();
2. 获取请求行数据
req.getHeader(" 指定键 “); //获取指定的请求行信息
req.getHeaderNames(); //获取所有请求行的键
3. 获取用户数据
req.getParameter(” 标签的name属性值 “);
注意:如果获取不到值,不会报错,会获得null;
String[] arr = req.getParameterValues(” 同键不同值的name属性值 "); //多选按钮
for(String value : arr){
System.out.println(value);
}

请求乱码问题解决 请求乱码问题解决:
使用 String 进行重新编码:
uname=new String(uname.getBytes(“iso8859-1”),“utf-8”);
Get 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);
在 tomcat 服务器目录下的 conf 文件下找到 server.xml 文件,打开进
行如下配置:
乱码配置
Post 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);

response响应

作用:
response是用来进行响应的一个对象。

使用:
1. 设置响应头
resp.setHeader(" 键 ", " 值 “); //覆盖
resp.addHeader(” 键 “, " 值 “); //追加
resp.sendError(405, “友好错误提示”);
2. 设置响应编码格式
resp.setHeader(“content-type”, “text/html;charset=utf-8”);
resp.setContentType(“text/html;charset=utf-8”);
3. 设置响应实体
resp.getWriter().write(” < b>服务器响应数据 </ b>”);

Servlet流程总结

Servlet的流程总结:

  1. 浏览器发起请求到服务器
  2. 服务器接收到请求进行解析,并创建req对象存储请求数据
  3. 服务器调用对应的Servlet对象进行请求处理,并将req对象作为实参传递给Servlet的方法
  4. Servlet方法进行请求处理
    4.1 设置请求编码格式
    4.2 设置相应编码格式
    4.3 获取请求信息
    4.4 * 处理请求信息
    4.5 响应处理结果

转发、重定向

请求转发:

特点:地址栏信息不会变化

req.getRequestDispatcher("转发地址").forward(req, resp);	//相对路径
req.setAttribute("message","第一次"); 	//设置转发前所要携带的数据
String message = req.getAttribute("message");	//获取数据

作用:解决一次请求中的数据共享问题。
例如:
1.登录错误的时候返回“错误提示信息”(可用“三目运算符:条件 ? true结果"" : false结果”)
2.欢迎“xxx”登录( 使用重定向 )

两者的区别:
使用请求转发,容易造成表单数据重复提交。所以产生重定向
如果请求中有表单数据,并且数据比较重要,并且不能重复提交,建议使用重定向。

重定向:

特点:
地址栏信息发生变化
两次请求,两个request对象

resp.sendRedirect("路径为URI");	

Cookie

Cookie 技术解决了不同请求发送之间的数据共享问题。

特点:

  1. 浏览器端的数据存储技术
  2. 适合少量数据
  3. 键值对
  4. 不安全

使用:
临时存储:
不设置 cookie 信息的存储时间,周期为一次会话,存储在浏览器内存中
定时存储:会将数据存储在客户端的硬盘中;

/*使用Cookie进行客户端的数据存储*/
Cookie uname = new Cookie("uname", "张三");	//创建cookie对象(键值对形式)
Cookie uname2 = new Cookie("uname2", "李四");

/*设置有效期后,会将数据存储在客户端的硬盘中;
 *在有效期内,所有符合路径的请求,都会附带该Cookie
 */
uname2.setMaxAge("3*24*60*60");	//设置Cookie有效期为3天

resp.addCookie(uname);	//添加响应cookie信息
resp.addCookie(uname2);

Cookie数据的获取:

Cookie[] cks = req.getCookies();	//获取cookie信息
for(Cookie c : cks){
	String name = c.getName();
	String value = c.getValue();
	System.out.println(name+" : "+value);
}

Session

作用:
解决了一个用户的不同请求的数据共享问题。

原理:
用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的 Servlet 进行处理。在处理过程中会给用户创建 一个 session 对象,用来存储用户请求处理相关的公共数据,并将此 session 对象的JSessionId 以 Cookie 的形式存储在浏览器中 (临时存储,浏览器关闭即失效)。
用户在发起第二次请求及后续请 求时,请求信息中会附带 JSessionId,服务器在接收到请求后, 调用对应的 Servlet 进行请求处理,同时根据 JSessionId 返回其对应的 session 对象。

特点:
1.Session 技术是依赖 Cookie 技术的服务器端的数据存储技术。
2.由服务器进行创建
3.每个用户独立拥有一个 session
4.默认存储时间为 30 分钟

使用:
创建 Session 对象 存储数据到 session 对象

String name = "旺仔";

/*若果请求中有sessionID,就返回对应的session对象;
*如果没有sessionID,就创建新的session对象。
*/
HttpSession hSession = req.getSession();	//创建session

/*session对象失效,也会重新创建session对象*/
//hSession.setMaxInactiveInterval(60);	//设置session的存活时间为60秒

hSession.setAttribute("name", name);		//存储数据

获取 session 对象 获取数据从 session 对象

HttpSession hSession = req.getSession();	//获取session
String name = hSession.getAttribute("name");	//获取数据

如果获取 session 中不存在的数据返回 null。
设置session强制失效

HttpSession hSession = req.getSession();	//获取session
hSession.invalidate();		//设置session强制失效

注意:
只要不关闭浏览器,并且 session 不失效的情况下,同一个用 户的任意请求在项目的任意Servlet中获取到的都是同一个session
对象。

作用域:
一次会话
在JSESSIONID和session对象不失效的情况下为整个项目。

猜你喜欢

转载自blog.csdn.net/Xxacker/article/details/85005419