servlet是否线程安全,如何改造
项目启动过后产生的servlet默认为单例模式,会有线程安全的问题。可以使servlet实现SingleThreadModel接口、可以使用同步代码块、或者不在servlet里边使用共享变量。
session和cookie的区别
由于http协议是无状态协议,服务端没办法识别出每次请求用户的状态,就使用了session机制,用户第一次请求过来的时候,会在服务端创建一个session,可以具体保存在服务器内存中、数据库中等等。对于一些大型的网站,有的还是用缓存服务去存储。另外对于服务端如何识别特定的用户,就用到了cookie,服务端第一次创建session的时候,会把sessionId返回给客户端,客户端将其包在cookie里边,下次请求的时候,把这个sessionId返回给服务端,就能识别了。另外有的浏览器可能会禁用cookie,解决办法就是给请求的url后面
挂参数,类似于?sid=XXX。
get和post的区别
get请求参数可见,且是拼接在url后边的,post请求参数不可见,是放到request body里边。
后退页面之后,post请求会提示是否重复提交,get不会。
get请求参数数目有限制,因为url长度有限制,post请求参数原则上没有限制。
TCP和UDP的区别
tcp和udp都是传输层的协议,HTTP就是利用tcp实现两个主机之间的数据传输。TCP:提供面向连接的,可靠的数据传输服务。UDP:提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)
tcp三次握手建立连接
首先,我让信使运输一份信件给对方,对方收到了,那么他就知道了我的发件能力和他的收件能力是可以的。
于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力是可以。
然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后回馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的。
1.客户端将SYN=1(建立连接标志)和自己生成的序列号seq发送给服务端;2
2.服务端将ACK=1(确认连接标志)和SYN=1和ack(确认序列号)和自己生成的序列号seq发送给客户端;4
3.客户端将ACK=1(确认连接标志)和ack(确认序列号)和自己生成的序列号seq+1发送给服务端,连接建立。3
四次挥手断开连接
1.客户端将FIN=1(释放连接标志)和自己生产的序列号seq发送给服务端;2
2.服务端将ACK=1(确认释放标志)和ack(确认序列号)和自己的序列号seq发送给客户端;3
3.服务端将FIN=1(释放连接标志)和ACK=1(确认释放标志)和ack(确认序列号)和自己生产的序列号seq发送给客户端;4
4.客户端将ACK=1(确认释放标志)和ack(确认序列号)和自己生产的序列号seq发送给服务端,连接中断。3
如何防止表单重复提交
防止表单重复提交的一般思路是把操作的唯一标识在后台保存起来,在下一次请求进来的时候,首先去判断是否已经有这个标识了,有的话,就算重复提交了。实现的方式有很多,可以拦截具体的某个请求,也可以通过AOP在方法执行的前后两个切面去实现这个逻辑。
如何设置请求的编码及响应内容的类型
request.setCharacterEncoding(“utf-8”)
response.setContentType(“text/html; charset=utf-8”)
response.addHeader()
servlet相关接口,servlet里面有哪些方法
1.init()方法,它是在服务器装入 Servlet 时执行的。可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet;
2.service()方法是 Servlet 的核心。每当一个客户请求一个HttpServlet对象,该对象的service()方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。
3.destroy()方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。
4.GetServletInfo()方法是一个可选的方法,它提供有关servlet 的信息,如作者、版本、版权。
5.getServletConfig() 方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和 ServletContext。ServletContext 接口提供有关 servlet 的环境信息。
servlet执行时一般实现哪几个方法
Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;
请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法;
当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy()方法
servlet3中的异步处理指的是什么
servlet3的异步处理主要是针对耗时较长的IO操作类请求,通过request.startAsync()方法获得异步上下文,在并发较高的场景下,就可以提前释放出来占有的tomcat容器线程池资源,提高请求处理的效率。
servlet生命周期?servlet是单例模式吗,为什么是单例,servlet和cgi有什么区别
如果不是单例模式,servlet需要被创建很多个实例,浪费资源,且效率不高。
CGI中每个请求到了web服务器之后,是单独开一个进程处理,servlet是开启一个java线程。且CGI实例会被重新创建多次,而servlet实例是单例模式,只用创建一次。
服务器收到用户提交的表单数据,到底是调用servlet的doGet()还是doPost()方法
FORM表单一般可以指定请求的方式为get or post,在servlet的service方法中会根据这个去具体调用doGet()还是doPost()方法
缓存的优点
支持高并发,高效查询。
说说MVC的各个部分都有哪些技术来实现
M(Model) 模型 javabea、
(View) 视图 html jsp volicity freemaker、
C(Control) 控制器 Servlet,Action
什么是DAO模式
DAO模式就是是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。
主要解决了两个问题,如何访问数据和将得到的数据封装成对象。
请求javaWeb开发中的Model 1和Model 2分别指的是什么
Model1的中心是JSP页面,里边会掺杂业务处理逻辑和具体的HTML标签。
Model2的中心是MVC,界面也就是view只负责展示,不负责具体的业务逻辑。
如何保存会话状态,有哪些方式,区别如何
url重写(通过url末尾添加sid参数的方式)、设置表单隐藏域、
利用localStorage和sessionStorage(sessionStorage在关闭窗口或标签页之后将会删除这些数据,而localStorage则没有这样的特性)