Javaweb学习总结(四)

1.下载中文文件
如果文件的名字带有中文,那么需要对这个文件进行编码处理
如果是IE或者是谷歌使用URLEncoding编码
如果是火狐,使用Base64编码

     //获取来访的客户端类型(即判断是哪种浏览器)
      //String  clientType=request.getHeader("User-Agent");
      //if(cliehtType.contains("Firefox")){
      //	filename=DownLoadUtil.base64EncodeFileName(filename);
      //}else {
      //	IE或者谷歌
      //	filename=URLEncoder.encode(filename, "UTF-8");
       //}

2.重定向

//			设置状态   重新定位状态码
			response.setStatus(302);
//			定位跳转的位置是哪一个页面
			response.setHeader("Location", "loginsuccess.html");
			System.out.println("-----------------------");
//		    上面是早期的写法,下面是重定向写法
			response.sendRedirect("loginsuccess.html");
  • 1.地址上显示的是最后那个资源的路径地址
  • 2.请求次数最少有两次,服务器在第一次请求后,会返回302以及一个地址,浏览器在根据这个地址,执行第二次的访问
  • 3.可以跳转到任意路径,不是自己的工程也可以跳
  • 4.效率上低一点,因为只执行两次请求
  • 5.后续的请求,没法使用上一次的request存储的数据,或者没法使用上一次的request对象,因为这是两次不同的请求

3.请求转发

      //	请求转发的写法
//	request.getRequestDispatcher("loginsuccess.html").forward(request, response);
  • 1.地址上显示的是请求servlet的地址,返回200
  • 2.请求次数只有一次,因为是服务器内部帮客户端执行了后续的工作
  • 3.只能跳转自己项目的资源路径
  • 4.效率上高一点,因为只执行一次请求
  • 5.可以使用上一次的request对象

4.Cookie
是一份小数据,是服务器给客户端,并且存储在客户端上的一份小数据

  • 应用场景:自动登录、浏览记录、购物车
  • 为什么要有这个cookie?
    http的请求是无状态的,第二次就不认识了,客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过,为了更好的收集用户习惯【大数据】
    5.cookie的简单使用
  • 1.在响应的时候添加cookie给客户端
Cookie cookie =new  Cookie("aa","bb");
response.addCookie(cookie);
response.getWriter().write("请求成功了。。。。");
  • 2.客户端收到的信息里面,响应头中多了一个字段set-cookie

  • 3.获取客户端带过来的cookie

     Cookie[] cookies = request.getCookies();
      if (cookies!=null) {
       for (Cookie c : cookies) {
       	String name = c.getName();
       	String value = c.getValue();
       	System.out.println("name="+name+"====value="+value);
       }
    

6.cookie的有效期
默认情况下,关闭浏览器后,cookie就没有了(针对没有设置cookie的有效期)

   expiry//有效
//      正值表示在这个数字过后,cookie失效
//      负值表示关闭浏览器后失效,默认值-1
    cookie.setMaxAge(10);
//    用于指定只有请求了指定的域名,才会带上该cookie
    cookie.setDomain(".itheima.com");
//    只有访问该域名下的cookiedemo的这个路径地址才会带cookie
    cookie.setPath("/Cookiedemo");
//       www.itheima.com/Cookiedemo

7.注:写servlet的名字不能用汉字
8.例子cookie显示最近访问的时间
-----1.判断账号是否正确
-----2.如果正确,则获取cookie,但是得到的cookie是一个数组,我们要从数组里找到我们想要的cookie对象
-----3.如果找到的对象为空,表明是第一次登录,那么要添加cookie
-----4.如果不为空,表明不是第一次登录
response.setContentType(“text/html;charset=utf-8”);
String username = request.getParameter(“username”);
String password = request.getParameter(“passwd”);

    if ("admin".equals(username) && "123".equals(password)) {
//   new  Cookie("last", 1379217497234);
	    	
// 	获取cookie
	    	Cookie[] cookies = request.getCookies();
//	    	从一个cookie数组中找到我们具体想要的cookie对象
	    	Cookie cookie=Cookieutil.findCookie(cookies, "last");
//	    	第一次登录没有cookie
	    	if (cookie==null) {
		Cookie c = new Cookie("last", System.currentTimeMillis()+"");//名字+值
	    	c.setMaxAge(60*60);//有效期一个小时
	    	response.addCookie(c);
	    	response.getWriter().write("登陆成功");
			}else {
//		1.取以前的cookie第二次登录有cookie
       long lastVisitTime=Long.parseLong(cookie.getValue());//字符串转成long类型,与integer.parseint(s)一样
//		2.输出到界面
		response.getWriter().write("欢迎您"+"上次来访时间:"+new Date(lastVisitTime));
//               3.重置登录时间			
			cookie.setValue(System.currentTimeMillis()+"");//更新当前时间
			response.addCookie(cookie);
			}
		}else {
			response.getWriter().write("登陆失败");
		}

9.JSP里面使用Java代码
jsp全称Java server pager —>最终会翻译成一个类,就是一个servlet

定义全局变量
 <%!  int a = 99;  %>
定义局部变量
  <%  int  b = 999; %>
在jsp页面上,显示a和b的值
<%=a %>
 <%= b %>

10.清除cookie即清楚浏览记录

Cookie  cookie=new Cookie("history","");
 cookie.setMaxAge(0);//设置立即删除
 cookie.setPath("/CookieDemo02");//路径
 response.addCookie(cookie);

11.Cookie的安全问题
由于Cookie会保存在客户端上,所以有安全隐患问题,而且cookie的大小与个数有限制
限定4KB,不超过300个cookie。为了解决这个问题---->session
12.session (会话)
session是基于cookie的一种会话机制,cookie是服务器返回一小份数据给客户端,并且存放在
客户端上,session是数据存放在服务器端

-----常用API
//	得到会话id
	String id = session.getId();
//	取值
	session.getAttribute(name);
//	存值
	session.setAttribute(name, value);
//	移除值
	session.removeAttribute(name);

--------session何时创建、何时销毁
创建:在servlet里面调用request.getsession()
销毁:session是存放在服务器中的一份数据,即使关闭了浏览器,session也不会销毁
--------1.关闭服务器 2.session会话过期,默认有效期:30分钟
13.session购物车例子

      response.setContentType("text/html;charset=utf-8");
//	1.获取要添加到购物车的商品id
	int id = Integer.parseInt(request.getParameter("id"));
	String [] names= {"iphone7","小米6","魅族7","华为9","vivo x21"};
//	取到id对应的商品名称
	String name=names[id];
//	2.获取购物车存放东西的session  Map<string,integer>  iphone7  3
//	把一个map对象存放到session里面去,并且保证只存一次
    Map<String, Integer>map=(Map<String, Integer>) request.getSession().getAttribute("cart");
//    session里面没有存放任何东西
    if (map==null) {
		map=new LinkedHashMap<String, Integer>();
		request.getSession().setAttribute("cart", map);
	}
//	3.判断购物车中有没有该商品
    if (map.containsKey(name)) {
//    	原来值的基础上+1
		map.put(name, map.get(name)+1);
	} else {
//		没有购买过该商品,当前值为1
        map.put(name, 1);  
	}
//    4.输出界面,跳转
    response.getWriter().write("<a href='product_list.jsp'><h3>继续购物</h3></a><br>");
    response.getWriter().write("<a href='cart.jsp'><h3>去购物车结算</h3></a><br>");
	}

14.清除购物车

 //两种方式清空购物车	
           HttpSession session = request.getSession();
//1.强制干掉会话,让会话失效
session.invalidate();
//2.从session中移除数据会话还在	
session.removeAttribute("cart");
response.sendRedirect("cart.jsp");//重新跳转到该界面

15.总结
请求转发、重定向(面试常问)
什么时候有cookie? cookie服务器给客户端 response.addcookie();

  • cookie分类
    会话cookie:关闭浏览器就失效
    持久cookie:存放在客户端上,在指定的期限内有效 setMaxAge();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值