常见问题
1、http 的长连接和短连接?
2、GET 和 POST 的区别?
3、http 中重定向和请求转发的区别?
4、Cookie 和 Session 的区别。
5、在单点登录中,如果 cookie 被禁用了怎么办?
6、什么是jsp,什么是Servlet?jsp和Servlet有什么区别?
7、jsp 有哪些域对象和内置对象及他们的作用。
8、简述tomcat的目录结构和部署应用的部署。
9、Filter和Listener的使用场景和原理。
10、(必须掌握)如何增加一个自定义的servlet、Filter、JSP、Listener。
蘑菇应答
1、HTTP 协议有 HTTP/1.0 版本和 HTTP/1.1 版本。HTTP1.1 默认保持长连接(HTTP persistent connection,也翻译为持久连接),数据传输完成了保持 TCP 连接不断开(不发 RST 包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。在 HTTP/1.0 中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次 HTTP操作,就建立一次连接,任务结束就中断连接。从 HTTP/1.1 起,默认使用的是长连接,用以保持连接特性。
2、从表面现像上面看 GET 和 POST 的区别:
GET请求的数据会附在 URL 之后(就是把数据放置在 HTTP 协议头中),以?分割 URL 和传输数据,参数之间以&相连,如:login.action?name=zhagnsan&password=123456。POST 把提交的数据则放置在是 HTTP 包的包体中。
GET方式提交的数据最多只能是 1024 字节,理论上 POST 没有限制,可传较大量的数据。其实这样说是错误的,不准确的:“GET 方式提交的数据最多只能是 1024 字节",因为 GET 是通过URL 提交数据,那么 GET 可提交的数据量就跟URL 的长度有直接关系了。而实际上,URL 不存在参数上限的问题,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox 等,理论上没有长度限制,其限制取决于操作系统的支持。POST 的安全性要比 GET 的安全性高。注意:这里所说的安全性和上面 GET 提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的 Security 的含义,比如:通过 GET 提交数据,用户名和密码将明文出现在 URL 上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET 提交数据还可能会造成 Cross-site request forgery 攻击。
Get是向服务器发索取数据的一种请求,而 Post 是向服务器提交数据的一种请求,在 FORM(表单)中,Method默认为"GET",实质上,GET 和 POST 只是发送机制不同,并不是一个取一个发!
3、本质区别:转发是服务器行为,重定向是客户端行为。
重定向特点:两次请求,浏览器地址发生变化,可以访问自己 web 之外的资源,传输的数据会丢失。
请求转发特点:一次强求,浏览器地址不变,访问的是自己本身的 web 资源,传输的数据不会丢失。
4、Cookie是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie。Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
Cookie和 session 的不同点:无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie。在存储的数据量方面:session 能够存储任意的 java 对象,cookie 只能存储 String 类型的对象。
5、单点登录的原理是后端生成一个 session ID,然后设置到 cookie,后面的所有请求浏览器都会带上 cookie,然后服务端从 cookie 里获取 session ID,再查询到用户信息。所以,保持登录的关键不是 cookie,而是通过cookie 保存和传输的 session ID,其本质是能获取用户信息的数据。除了 cookie,还通常使用 HTTP 请求头来传输。但是这个请求头浏览器不会像 cookie 一样自动携带,需要手工处理。
6、jsp 本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个 servlet实例。Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。
区别:jsp 是 html 页面中内嵌的Java 代码,侧重页面显示;Servlet 是 html 代码和 Java 代码分离,侧重逻辑控制,mvc 设计思想中 jsp 位于视图层,servlet 位于控制层
JVM只能识别 Java 类,并不能识别 jsp 代码!web 容器收到以.jsp 为扩展名的url 请求时,会将访问请求交给tomcat 中 jsp 引擎处理,每个 jsp 页面第一次被访问时,jsp 引擎将 jsp 代码解释为一个 servlet 源程序,接着编译servlet 源程序生成.class 文件,再有 web 容器 servlet 引擎去装载执行 servlet 程序,实现页面交互。
7、四大域对象:
(1)pageContext page 域-指当前页面,在当前 jsp 页面有效,跳到其它页面失效。
(2)request request 域-指一次请求范围内有效,从 http 请求到服务器处理结束,返回响应的整个过程。在这个过程中使用 forward(请求转发)方式跳转多个 jsp,在这些页面里你都可以使用这个变量。
(3)session session 域-指当前会话有效范围,浏览器从打开到关闭过程中,转发、重定向均可以使用。
(4)application context 域-指只能在同一个 web 中使用,服务器未关闭或者重启,数据就有效。
九大内置对象,请自己补充。
8、学习tomcat的部署
第一步需要记住tomcat的目录
第二步记住Tomcat的功能结构图
第三步技术Tomcat的server.xml的关键配置点
为啥要记上一张图,server.xml就是配置这些组件的,从而connector能侦听不同的端口,context配置应用目录提供服务。网上找一个server.xml的配置说明,然后对照图理解,最重要的事动手配置一下。
9、Filter对访问的请求和响应进行拦截。在servlet被调用之前截获请求和相应;在servlet被调用之前检查servlet request;根据需要修改request头和request数据;根据需要修改response头和response数据;在servlet被调用之后截获相应。监听器Listener就是在ServletContext,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。它监听是这些事件,而不关心具体的消息。两者常见使用场景请参考思维导图。
10、容器的四大对象,当然是通过容器配置文件Web.xml来实现,当然有了注解大家喜欢用注解,但注解分散在各个代码里面,注解和xml的优劣自己体悟这里不做过多讨论,但xml的方式建议作为必知必会的内容。
Servlet配置
JSP配置
Filter配置
监听器配置
这里只帮大家回顾最基本的配置方式,比如jsp-config方式,这里不介绍了。
领取专属 10元无门槛券
私享最新 技术干货