相关文章:
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的流程总结:
- 浏览器发起请求到服务器
- 服务器接收到请求进行解析,并创建req对象存储请求数据
- 服务器调用对应的Servlet对象进行请求处理,并将req对象作为实参传递给Servlet的方法
- 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 技术解决了不同请求发送之间的数据共享问题。
特点:
- 浏览器端的数据存储技术
- 适合少量数据
- 键值对
- 不安全
使用:
临时存储:
不设置 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对象不失效的情况下为整个项目。