HttpServletRequest 用户请求对象
1.用户请求对象包含:
请求行
请求头
请求体
// 获取请求的网址
System.out.println(request.getRequestURL())
// http://localhost:8080/sh-web-servlet02/demo08
System.out.println(request.getRequestURI())
// /sh-web-servlet02/demo08
// 获取请求的类型(用浏览器直接请求都是get请求)
System.out.println(request.getMethod())
// 获取请求路径 (相对路径)
System.out.println(request.getContextPath())
// 获取请求中携带的参数
// 参数是 提交表单时 表单的name属性
String username = request.getParameter("username")
String password = request.getParameter("password")
System.out.println(username + "..." + password)
// 判断浏览器
// 可以通过请求头中的信息获取用户使用的浏览器
String header = request.getHeader("User-Agent")
System.out.println(header)
if (header.toLowerCase().contains("firefox")) {
System.out.println("用的是火狐")
}else if (header.toLowerCase().contains("chrome")) {
System.out.println("用的是谷歌")
}else {
System.out.println("其他浏览器")
}
}
请求转发 请求重定向 请求包含
2. request 也是一个域对象
域对象内部就是维护一个map集合(添加删除获取的方法)
request域的作用范围: 一次请求当中 可以获取到域中保存的数据
public class Demo02 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
request.setAttribute("name", "zhangsan");
request.getRequestDispatcher("/demo02").include(request, response);
out.write("123");
System.out.println("这是demo01 的结尾");
}
private void fun2(HttpServletResponse response) throws IOException {
response.sendRedirect("/sh-web-servlet/demo02");
}
private void fun1(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo02");
dispatcher.forward(request, response);
}
}
public class Demo02 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().write("456");
String name = (String)request.getAttribute("name");
System.out.println(name);
System.out.println("这是demo02");
}
}
cookie
3.cookie(客户端技术)
cookie是保存在浏览器中的缓存数据
当发起一个请求 请求一个servlet
进行逻辑处理(添加一个商品进购物车)
处理完成后 给客户端(浏览器)一个响应
响应中携带着记录了购买的什么商品的 cookie
让浏览器保存起来 可以是保存在内存当中(结束会话 cookie被清除)
也可以保存在硬盘当中(结束会话 依然存在 就是个文件)
当浏览器再一次请求购物车的时候
会携带着之前保存的 cookie 去访问
每个网站可以保存20个cookie 整个浏览器可以保存300个
注意:第一次访问服务器的时候 是不会携带着cookie去访问的
因为cookie还没有产生 只有当第一次请求后的响应中可以把cookie写回到浏览器中
利用cookie 显示上次登录的时间
public class Test extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastTime")) {
String value = cookie.getValue();
long time = Long.parseLong(value);
Date date = new Date(time);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String lastTime = dateFormat.format(date);
response.getWriter().write("上次访问时间" + lastTime);
}
}
}
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
cookie.setPath("/sh-web-servlet/servlet");
cookie.setMaxAge(60*5);
response.addCookie(cookie);
}