SERVLET复习笔记(二)

本文详细阐述了Servlet的线程安全问题、异常处理、Cookie与HttpSession应用,并提供了实际操作指导。

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

SERVLET复习完了,把重要的几点内容记录一下。

1.Servlet的线程安全问题。

Servlet容器对于每个Servlet只产生一个Servlet实例,那么当有多个请求时,又是如何处理的呢?原来Servlet容器有一个线程池,线程池中有个调度线程,调度线程对于每个请求分配一个工作者线程,工作者线程调用Servlet的service方法进行响应。也就是说,当有多个请求时,Servlet的service方法运行于多个工作者线程中。这样就涉及到多线程问题,多线程问题最麻烦的就是多个线程对共享公共变量的修改,这容易出问题。解决的办法:1.将变量定义在方法类,使之成为本地变量,这样每个线程都有这个变量的一个拷贝,就不存在共享变量的问题。2.用synchronized关键字对方法进行同步,但这样会导致请求排队(实际上成了串行)。

ServletContext可以被所有servlet访问,很明显,它不是线程安全的;HttpSession虽然只能被属于同一个Session的请求访问,但如果用户用同一个浏览器打开多个页面,它们属于同一个Session,故HttpSession不是线程安全的。ServletRequest是线程安全的。

2.Servlet异常处理

最重要的是,在web.xml中配置

<error-page>

<error-code>404</error-code>

<location>/errorProcess.html</location>

</error-page>

这样就可以对异常进行处理。而不是显示一大堆错误信息给用户。显得程序比较健壮。

3.Cookie和HttpSession

叫做会话跟踪,其实就是缓存。HttpSession是保存在服务器端,不过为了标志是哪个HttpSession,服务器会给HttpSession分配Session Id,这个是保存在Cookie中,不过这个Cookie不是在影盘上而是在浏览器内存中。当有用户请求时,取出Session ID,放给服务器,服务器就知道对应哪个HttpSession。Cookie是保存在用户硬盘上,不是很安全,存储前最好对信息进行编码。

如果用户浏览器禁用Cookie,那么这两种方法没法用,只能用URL重写。response.encodeUrl和response.encodeRedirectUrl。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值