Servlet进阶

本文介绍了Web开发中的Cookie和Session机制,包括它们的创建、生命周期管理以及应用场景。Cookie用于存储用户信息,如账户密码,而Session用于识别用户会话,依赖于JSESSIONID的cookie。此外,文章还讲解了文件上传的过程,需设置表单类型为.multipart/form-data,并使用Part对象处理上传的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cookie对象        浏览器技术,存放在本地,一般存放账户密码

       cookie

/**
service方法中创建一个Cookie对象,设置数据到cookie对象中,将对象通过response.addCookie传递,cookie到期时间可以通过setMax方法设置到期时间
cookie的到期时间有三种状态
负整数只在浏览器中内存中存活关闭浏览器失效
正整数存活秒数默认30s
setMaxAge(0)
删除这个 Cookie,当场死亡


可以设置cookie.setpath路径(表示服务器访问的范围)**/

request对象        数据在一次请求中有效

session对象        可以多次请求,session对象默认在浏览器内存中存活,关闭浏览器或服务器时失效,session底层是依赖cookie的

session对象有默认事件单位为分钟,默认30分钟(30分钟无操作)

session
可以标识一个会话,也可以标识一个用户
 标识符 JSESSIONID
    Session 既然是为了标识一次会话,那么此次会话就应该有一个唯一的标志,这个标志就是 sessionId。
每当一次请求到达服务器,如果开启了会话(访问了 session),服务器第一步会查看是否从客户端回传一个名为 JSESSIONID 的cookie,如果没有则认为这是一次新的会话,会创建 一个新的session 对象,并用唯一的 sessionId 为此次会话做一个标志。如果有 JESSIONID 这 个cookie回传,服务器则会根据 JSESSIONID 这个值去查看是否含有id为JSESSION值的session 对象,如果没有则认为是一个新的会话,重新创建一个新的 session 对象,并标志此次会话; 如果找到了相应的 session 对象,则认为是之前标志过的一次会话,返回该 session 对象,数据达到共享。这里提到一个叫做 JSESSIONID 的 cookie,这是一个比较特殊的cookie,当用户请求服务器时,如果访问了 session,则服务器会创建一个名为 JSESSIONID,值为获取到的 session(无论是获取到的还是新创建的)的 sessionId 的 cookie 对象,并添加到response 对象中,响应给客户端,有效时间为关闭浏览器
。
获取Session域对象
request.getSession();

session对象默认存活30分钟(无操作)

// 销毁session对象死亡的5种方式
关闭浏览器
关闭服务器
时间到期,
设置最大不活动时间
session.invalidate();

servletContext对象(随服务器同生共死)

// 设置客户端与服务端的编码
response.setContentType("text/html;charset=UTF- 8");
// 重定向跳转到index.jsp
response.sendRedirect("index.jsp");
// 设置客户端与服务端的编码
response.setContentType("text/html;charset=UTF- 8");
response.setHeader("content-type","text/html;charset=UTF-8");

Servlet的工作流程(客户端请求到后端响应的流程‘)
       
        1. 通过请求头获知浏览器访问的是哪个主机
        2. 再通过请求行获取访问的是哪个一个 web 应用
        3. 再通过请求行中的请求路径获知访问的是哪个资源
        4. 通过获取的资源路径在配置中匹配到真实的路径,
        5. 服务器会创建 servlet对象,(如果是第一次访问时,创建 servlet 实例,并调用 init方法进初始化操作)
        6. 调用 service(request response)方法来处理请求和响应的操作
        7. 调用 service 完毕后返回服务器 由服务器讲 response缓冲区的数据取出,以 http 响应的格式发送给浏览器
/**
重定向和请求转发的区别

        重定向                         请求转发

2次请求数据在request对象域中不共享       1次请求数据在request对象域中共享

客户端行为                              服务端行为

地址栏发生变化                          地址栏不发生变化

 绝对地址可写到http://                 到绝对地址定位到站点后        
*/

 文件上传     

        表单的请求方式为 POST ;其次我们的 form 表单的 enctype 必须设为 "multipart/form-data",即 enctype="multipart/form-data",意思是设置表单的类型为文 件上传表单。默认情况下这个表单类型是 "application/x-www-form-urlencoded", 不能用于文件上传。只有使用了
        multipart/form-data 才能完整地传递文件数据
实现HTTPServlet的类需要加上@MultipartConfig注解如果是文件数据上传一定要加上此注解才能实现,servlet将multipart/form-data的POST请求封装成一个Part,通过Part对文件进行操作
通过request.getpart获取part对象
        使用part获取文件名,获取ServletContext.getPath得到文件存放路径
然后设置放置文件的路径
// 通过 getPart(name) 方法获取Part对象(name代表的是页面中file文件域的name属性值)
        Part part = request.getPart("myfile");

// 通过Part对象,获取上传的文件名
       String fileName =part.getSubmittedFileName();

// 获取上传文件需要存放的路径 (得到项目存放的真实路径)
        String realPath =request.getServletContext().getRealPath("/");

// 将文件上传到指定位置
         part.write(realPath +"/"+ fileName);

文件下载-超链接下载

        前台设置download属性

        后台项目设置资源目录(Deployment 点击加号设置资源路径),再设置外部访问路径

监听器Filter

        可以设置多个过滤器

        先配置的先执行
   

@WebFilter("/设置拦截路径,/*为拦截所有")  
 public class 实现类implements   Filter{

@Override
inut{}//方法开始拦截

@Override
 pubblic void  doFileter{
//设置放行的资源路径
}

}

        监听器

        实体类实现HttpSessionListener{

重写sessionDestroyed()方法}

                监听生命周期

                监听变化值

                针对session对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值