OA系统知识点小结

本文深入探讨了Cookie与Session的工作原理及应用,解析了Ajax技术如何实现局部页面刷新,以及文件上传下载的实现流程。同时,详细介绍了Servlet和Filter的生命周期,为Web开发者提供了全面的技术指南。
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方法进行收尾 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值