servlet题2
1、servlet安全问题:由于servlet是单例的,当多个用户访问servlet的时候,服务器会为每个用户创建一个线程,当多个用户并发访问servlet共享资源的时候就会出现线程安全问题。
原则:如果一个变量需要多个用户共享,则应该在访问变量的时候加同步机制synchronize(对象){};如果一个变量不需要共享,则直接在doGet\doPost定义,这样不会存在线程安全问题。
2、session和cookie有什么区别?
从存储方式上比较:cookie只能存储字符串,如果要存储非ASC||字符串还要进行编码;session可以存储任何类型的数据,可以把session看成一个容器。
从隐私安全上比较:cookie存储在浏览器中,对客户端是可见的,信息容易泄露出去,如果使用cookie,最好将cookie加密;session存储在服务器上,对客户端是透明的,不存在敏感信息泄露问题。
从有效期上比较:cookie保存在硬盘上,只需要设置maxAge属性为较大正整数,即使关闭浏览器cookie还是存在的;session保存在服务器中,设置maxinactiveinterval属性值来确定session的有效期,并且session依赖名为jsessionid的cookie,该cookie默认的maxage属性为-1,如果关闭了浏览器,该session虽然没有从服务器中消亡,但也失效了。
从对服务器的负担比较:session是保存在服务器上的,每个用户都会产生一个session,如果并发访问的用户非常多,是不能使用session的,session会消耗大量的内存;cookie是保存在客户端的,不占用服务器的资源,一些大型网站都是使用cookie来进行会话追踪的。
从浏览器的支持上比较:如果浏览器禁用了cookie,那么cookie是无用的;如果浏览器禁用了cookie,session可以通过URL重写进行会话跟踪。
从跨域名上比较:cookie可以设置domain属性来实现跨域名;session只在当前域名内有效,不可跨域名。
3、什么是cookie?
Cookie是由W3C组织提出的,最早由netscape社区发展的一种机制
网页之间的交互是通过HTTP协议传输数据的,而HTTP协议是无状态的协议。无状态的协议是指一旦数据提交完后,浏览器和服务器的连接就会关闭,再次交互的时候需要重新建立新的连接。
服务器无法确认用户的信息,所以W3C提出给每一个用户都发一个通行证,无论谁访问都需要携带通行证,这样服务器就可以从通行证上确认用户信息。通行证就是cookie。
4、Tomcat容器是如何创建servlet类实例?用到了什么原理?
当容器启动时,会读取在webapps目录下所有web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。
在servlet注册时加上如果为正数,则在一开始就实例化,,如果不写或为负数,则第一次请求实例化。