OA系统知识点小结

Cookie
储存信息格式:Key - Value

Cookie new Cookie(String name, String value);
	创建新Cookie
	
setMaxAge(int expire);
	设置cookie生存时间, 单位为秒, 格式有三种<0,0,>0 分别代表内存存储, 失效, 生存时间
	
setPath(String uri);
	设置cookie作用域
	
resp.addCookie(Cookie cookie);
	让浏览器添加Cookie, 使其能被读取

Cookie可能会面临乱码问题, 这时需要使用Encoding类来解码:
	URLencoder.encode(String target, "UTF-8")
	URLdecoder.decode(String target, "UTF-8")
	
Cookie在页面端请求后得到的是一个Cookie[], 需要迭代并对比Key来获取Value值
				<%
					String uName = "";
					String uPass = "";
					Cookie[] cookies = request.getCookies();
					if (null != cookies) {
						for (Cookie cookie : cookies) {
							String name = cookie.getName();
							if (name.equals("userLoginName")) {
								uName = cookie.getValue();
							} else if (name.equals("userPwd")) {
								uPass = cookie.getValue();
							}
						}
					}
				%>
Session
Session的创建:
	用户第一次访问服务器

Session的获取:
	HttpSession session = request.getSession();  

Session的作用域:
	当前会话当中(如果服务器重启或者用户注销则会清除Session)
	
Session的生命周期:
	session默认的生命周期为30分钟, 意味着如果不进行操作, 三十分钟后session将被清除.
	但是我们可以人为的设置session的生命周期:
		<session-config>
			<session-timeout>...</session-timeout> (单位为分钟)
		</session-config>
		
Session的失效:
	session的失效有三种方式:
		1. 手动删除:
			invalidate();
			
		2. 长时间不与服务器交互, session过期
		
		3. 非正常关闭服务器时销毁. 如果服务器正常关闭, session会钝化到本地硬盘中, 以session格式储存, 在session过期之前都可以重新登录以活化session.
		
Session的使用场景:
	1.使用session保存用户的登录状态
	
	2.使用session存储验证码信息
Ajax异步请求
Ajax目的:
	通过局部刷新页面的方式来更新数据
	
Ajax原生代码:
	1. 创建XmlHttpRequest对象
		XMLHttpRequest xhr = new XMLHttpRequest();
	
	2. 监听服务器返回值状态
		xhr.onreadystatechange = function() {
			if (xhr.readystate = 4 && xhr.status = 200) {
				
				4. 获取服务器响应结果
                    var ret = xhr.responseText;
                    if (ret == 1) {
                        ....
                    } else {
                        ....
                    }
			}
		} 
		
	3. 发送请求
		var url = "UserServlet?action=login&....."
		xhr.open("GET", url, true); (true, false 代表是否异步请求)
		xhr.send();
		
POST格式请求的区别:
	3. var url = "UserServlet"
		var data = "action=login&....."
		xhr.open("POST", url, true);
		xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); (设置表头)
		xhr.send(data);
		
Ajax的Jquery封装后代码:
	$.ajax(url:"....Servlet",
		data:"action=....",
		dataType:"POST"/"GET",
		type:"text"/....
		success: function(ret) {
		
			}
		)
		
	$.post/get ("...Servlet","action=....", function(ret) {
		....
	}, "text");
文件的上传与下载
文件上传:
	前置工作:
        文件上传的Servlet里需要注解配置, 以标识当前Servlet提供上传功能
            @MultiPartConfig
        文件上传的表单中需要进行配置enctype属性, 并且只支持POST属性
            "enctype="multipart/form-data" method="POST"
	
	Part part = req.getPart("file") ---> "file"是form表单的name属性
	
	String realpath = part.getServletContext().getRealpath("/..."); ---> "/..."是要储存文件的文件夹名
    String header = part.getHeader("Content-Disposition"); ---> 获取表头信息来截取suffix
    InputStream is = part.getInputStream();  
    
    String suffix = header.substring(header.lastIndexOf("."), hdeader.length - 1); ---> ".txt"/".html"....
   	String fileName = UUID.randomUUID + suffix;
   	FileOutputStream fos = new FileOutputStream (realpath + "/" + fileName);
   	
   	
文件下载:
	首先需要一个ID属性去定位想要从服务器下载的文件
		String id = req.getParameter("id");
	定位到对象 ---> Download d
	构建下载地址:
		String path = req.getServletContext().getRealpath("/...") + "/" + d.getDownloadPath;
	检测文件是否存在:
    	File file = new File(path);
    	if (file.isExists) {
    		OutputStream os = resp.getOutputStream();
    		FileInputStream fis = new FileInputStream(path);
    	}
    设置文件下载信息:
    	resp.setHeader("Content-Disposition", "attachment; filename=" + ....) ---> 文件下载后显示的名字 可能会有乱码问题, 需要用URLencoder解决
	
Servlet、Filter声明周期问题
Servlet和Filter的声明周期类似, 生命周期都有四个阶段:
	1. 实例化
	2. 初始化
	3. 服务
	4. 销毁
	
	在Servlet第一次被访问到的时候, 会执行一个实例化的步骤, 查看当前Servlet是否有实例
	如果有, 使用它, 如果没有就创建一个新的Servlet对象.
	紧接着调用init()方法, 进行对象的初始化, 然后进行服务, 最后调用destroy()方法销毁. 
	
	Filter构造器在服务器启动时会被调用, 且也只会调用一次
	紧接着也会调用初始化方法对Filter对象进行初始化, doFilter方法会根据业务需求对进入服务器的请求进行放行, 达到过滤的需求
	最后在服务器关闭的时候调用destroy方法进行收尾 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值