Servlet上传文件、会话跟踪、Cookies和session的使用及其常用方法

上传文件

上传的页面需要注意
1. form 的method必须是post的,get不能上传文件。 在meta标签中还需要加上enctype="multipart/form-data" 表示提交的数据是二进制文件
2. 需要提供type="file" 的字段进行上传
3.servlet中添加注解@MultipartConfig
request.getParts()/getPart(String filename),用于获取使用multipart/form-data格式传递的http请求的请求体,通常用于获取上传文件

Part part = request.getPart("myfile(表单中input的name值)");
Part方法:
part.getContentType()    上传文件类型
part.getName()    上传文件属性名称(html中input的name属性)
part.getSize()    上传文件大小
part.getSubmittedFileName()    上传文件的文件名
part.write(文件绝对路径)    写入文件

Part part = request.getPart("myfile");
//获取uploads文件夹的真实路径 
String dirpath = this.getServletContext().getRealPath("/uploads");
//System.currentTimeMillis()获得本地时间的毫秒数,字符串拼接用于防止文件名重复
String saveFileName = System.currentTimeMillis()+"-"+part.getSubmittedFileName();
//File.separator斜杠"/"
part.write(dirpath+File.separator+saveFileName);


HTTP 是一种"无状态"协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录
但是仍然有以下几种方式来维持 Web 客户端和 Web 服务器之间的 session 会话
1、隐藏的表单字段
<input type="hidden" name="sessionid" value="12345">
2、Cookies
cookie在服务器端产生,保存在客户端
因为客户端的安全性不够高,所以不要在cookie中保留敏感信息或密码之类的消息
当用户用同一台机器或终端访问同一网站时,浏览器会自动读取并加载对应网站的cookie
cookie可以设置过期时间(秒),如果不设置默认关闭浏览器就消失
3、URL 重写
4、Session 会话跟踪

Cookie


Cookie对中文进行编码与解码
String   str   =   java.net.URLEncoder.encode("中文","UTF-8");            //编码
String   str   =   java.net.URLDecoder.decode("编码后的字符串","UTF-8");   // 解码

Cookie 方法
setMaxAge(int expiry)    设置 cookie 过期的时间(以秒为单位)。如果不设置,cookie 只会在当前 session 会话中持续有效
getMaxAge()    返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭
setName()    设置 cookie 的名称
getName()    返回 cookie 的名称
setValue(String newValue)    设置与 cookie 关联的值
String getValue()    获取与 cookie 关联的值

设置 Cookie
创建一个 Cookie 对象
Cookie cookie = new Cookie("key","value");
发送 Cookie 到 HTTP 响应头
response.addCookie(cookie);
论是名字还是值,都不应该包含空格或以下任何字符:
[ ] ( ) = , " / ? @ : ;

读取 Cookie
request.getCookies()    该方法将返回一个 Cookie对象的数组,使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值

删除 Cookie
使用 setMaxAge()方法设置cookie的年龄为零,来删除现有的cookie

Session


HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象
HttpSession session = request.getSession();
你需要在向客户端发送任何文档内容之前调用 request.getSession()
request.getSession(false)得到一个已有的session对象,若不存在已有的session对象则返回null

常用方法:
setAttribute(String name, Object value)     使用指定的名称绑定一个对象到该 session 会话
getAttribute(String name)    返回在该 session 会话中具有指定名称的对象
getAttributeNames()    返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称
removeAttribute(String name)    从该 session 会话移除指定名称的对象    
isNew()        判断当前会话是一个新会话,还是已存在的会话
getLastAccessedTime()    返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。
getCreationTime()    返回该session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位
getId()        返回一个包含分配给该 session 会话的唯一标识符,SessionID
setMaxInactiveInterval(int interval)    指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位
getMaxInactiveInterval()    返回Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位
invalidate()    指示该 session 会话无效,并解除绑定到它上面的任何对象

设置单个web项目的session 会话超时时间:
在 web.xml 文件中配置 session 会话超时(分钟)
<session-config>
    <session-timeout>15</session-timeout>
</session-config>

判断session会话超时:
request.getSession(false)==null

session销毁的方式:会话超时、强制销毁(调用invalidate())、关闭服务器
发送请求四种方式:浏览器点回车、表单提交、ajax、超链接

posted @ 2018-12-10 20:42  别念茶茶  阅读(410)  评论(0编辑  收藏  举报