1.servlet是什么?与jsp的区别联系?
在web容器中运行的服务器端Java程序,主要用来响应http请求。在MVC模式中,一般用于controller(控制器)部分。
首先:jsp是servlet的简化,jsp本质上就是servlet;
其次,jsp更偏向于外部的页面表达,servlet则更倾向于逻辑控制。以MVC设计模式为例子,其中M-modle(javabean), V-view(jsp), C-controller(servlet);
最后,jsp有内置对象(九大内置对象),并且内置对象都是通过HttpServletReques,HttpServletResponse,HttpServlet获得。 servlet则没有内置对象。
2.servlet的生命周期?
实例化--初始化(init方法)--响应请求(调用service方法中对应的doget或dopost方法)--消亡(调用destroy方法)
init方法至始至终只执行一次,因此servlet对象是单实例。
servlet实例化方式?
(1)客户端第一次请求某个Servlet时,系统创建该Servlet的实例,大部分Servlet都是这种Servlet。
(2)在 web.XML 文件中的<Servlet></Servlet>之间添加<loadon-startup>1</loadon-startup>, tomcat 启动时就会实例化 servlet 对象。
3.jsp九大内置对象?
(1)session: 会话级别,与请求有关的会话期
(2)application: 应用程序级别,servlet正在执行的内容
(3)page: jsp页面本身
(4)pageContext: 页面属性管理
(5)config: web应用的配置对象
(6)requst: 封装客户端用户请求,包括post,get
(7)response: 封装服务器对客户端的响应
(8)out: 用于传送回应的输出
(9)exception: 封装页面抛出异常的对象
4.jsp的四种作用域?
page-- request-- session-- application--
page(页面作用域):jsp默认的作用域是page,有效范围是当前页面,即该作用域对象只能在该页面使用,借助pageContext的getAttribute()和setAttribute()方法去传值。页面作用域的对象自客户端请求页面时创建,在页面响应客户端或者请求转发到其他资源时消亡。
request(请求作用域):request在一次请求的全过程中有效,存放于HttpServletReques。其生命周期从客户端发起请求,服务器处理响应,或者将请求forward(转发)到其他页面进行处理而结束。转发的时候,请求的参数和属性依然保有,并不会因为转发而丢失。request作用域对象只能存在于一次请求中,有效范围是当前请求周期。
session(会话作用域):从向服务器发送第一个请求开始,只要页面未关闭,或者会话未过期(默认30min)或者未调用HttpSession的invalidate方法,都属于同一个会话周期。在jsp中,当我们向服务器发送请求,服务器响应请求时会在客户端的cookie中记下一个sessionID,接下来每次请求时都会将sessionID带着发送到服务器,服务器就会比对这个sessionID来判断是否处于同一个会话周期内。只要关闭浏览器,sessionID就会更改。
application(应用程序作用域)application的有效范围是最广的,从应用启动到应用结束。只要tomcat未重启,那么数据在任意一个页面,请求,会话中都是共享的。
5.session和cookie、application的区别?
session和cookie:
(1)session存放于服务器端,cookie存放于客户端;
(2)cookie相较于session来说不是很安全,他人可以通过分析本地cookie来进行cookie欺骗,一般建议比较重要的权限信息存放于session,一般信息存放于cookie;
(3)由于session一段时间内是存放于服务器端上,当访问增多时,会比较占用服务器性能。若考虑减轻服务器性能方面,推荐使用cookie;(4)单个cookie保存数据不超过4k,很多浏览器限制一个站点最多存放20个cookie。
session和application:
(1)对象作用范围不同,session是会话级别的,application是应用程序级别的;
一个用户一个session,每个用户的session都是不同的,同一个用户所访问的网站页面之间共享一个session。
一个应用程序一个application,每个应用程序的application都是不同的,对于同一个应用程序,多个用户之间共享一个application。
(2)生命周期不同,session是只要不关闭浏览器就一直存活,application是不关闭服务器(即应用程序一直开启)就一直存活。
5.Http请求中的get和post方式?
(1)get是从服务器获取数据,post是向服务器传输数据;
(2)get请求是把参数包含在URL中,对用户是可见的,因此不安全;
(3)post请求则是把参数放在request body中,对用户不可见,因此相对安全;
(4)get在URL中携带的参数是有长度限制的,而post没有;
(5)浏览器回退时,get是无害的,而post则会再次提交请求;
(6)get
方式请求,浏览器会把http header
和data
一并发送出去,服务器响应200;
(7)post
方式请求,浏览器先发送header
,服务器响应100 continue
,浏览器再发送data
,服务器响应200(并不是所有浏览器都会在POST
中发送两次包,Firefox
就只发送一次)。