javawebJSPHTML的区别

1.JSP是什么?JSP和HTML区别是什么

JSP全程 java server page,java服务端页面(JSP运行在服务端,JSP运行后生成的HTML页面,以及页面中链接的CSS和JS代码是输送到客户端浏览器运行的)

JSP运行时依赖Tomcat环境,会由Tomcat将JSP翻译为java文件,再编译为class文件

JSP中可以写Java代码,可以使用JSTL动态标签库和EL表达式,JSTL和EL表达式都会被翻译为java代码

当JSP被请求的时候,Tomcat会执行JSP对应的字节码文件,向客户端输出HTML代码

正因为JSP具有这种特性,我们可以实现在servlet中请求数据库,拿到数据,转发到JSP,在JSP中取出servlet转发过来的数据,生成带有数据的完整HTML代码,转发给浏览器

纯HTML文件中不支持写java代码,因此也就无法获取servlet中转发过来的数据

2.JSP和Servlet区别是什么

JSP和Servlet本质上没有区别,都是一个java类,servlet本身就是java类。JSP会被翻译为java类

JSP和Servlet都可以被HTTP客户端请求,JSP的文件名就是JSP的URL地址,servlet可以通过注解设置URL地址

在MVC三层架构中 JSP属于视图层,Servlet属于控制层

3.说说你对MVC三层架构的理解

MVC优点:每一层分工明确 职责单一 代码结构清晰 代码可维护性和可扩展性更好

V-View 视图层 --JSP页面

数据展示层,直接与用户交互

C-Controller 控制器层--Servlet

中间层,承上启下,负责处理用户请求,调用Model层与数据库交互,并转发到V层

M-Model 数据模型层--Service+Dao

数据模型层,业务逻辑层+数据持久层组合

4.request和response的区别是什么?

request代表请求报文对象,response代表响应报文对象

request对象可以通过setAttribute()方法携带数据进行请求转发,response对象不可携带数据

转发是通过request对象实现,重定向是通过response对象实现的

5.转发与重定向的区别?

转发是服务端跳转,客户端地址栏不变(因为客户端没有发出新的请求),request中携带的数据不会丢失,转发只能跳转到本站点(转发的地址只能是当前工程的地址)

重定向是客户端跳转,客户端地址栏会变(因为客户端会发出一次新的请求,所有的重定向是两次请求,转发是一次请求)。request()对象中携带的数据会丢失(因为第二次请求会生成新的request对象)重定向可以跳转到外部站点。

6.说说请求报文和响应报文的结构

请求报文

请求行 :method请求方法 URL请求地址 HTTP协议版本

请求头 : Cookie会自动携带在请求头中传输到服务器

还有很多其他的头

请求体 : POST请求数据放在请求体中

响应报文

状态行 : 状态码(200成功 404资源路径找不到 500后端报错) HTTP协议版本

响应头 : Cookie会防止响应头中进行返回,返回的浏览器后自动转入到浏览器中

还有很多其他的头

响应体 : 响应报文中返回的数据

7.GET请求和POST请求的区别

答出第一层就算过关,能答出第二 第三层 就很亮眼

第一层 GET和POST的行为区别

- GET参数通过URL传递,POST放在Request body中。 - GET请求在URL中传送的参数是有长度限制的,而POST么有。 - GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 - GET在浏览器回退时是无害的(不会重复发请求),而POST会再次提交请求。 - GET请求会被浏览器主动cache缓存,而POST不会,除非手动设置。 - GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 - 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

第二层 GET也可以将参数放请求体, POST也可以将参数放url。但不能这么干

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

在大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

在大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

第三层 GET请求发一次数据包, POST发两次

GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

\1. GET与POST都有自己的语义,不能随便混用。

\2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

\3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

8.request和session的区别

request对象是请求报文对象

session对象是会话对象

这两个对象都可以存储数据,但因为他们的生命周期不一样

每次发出新的请求会生成新的request对象,所有request对象中存储的数据只在本次请求中有效

session对象的生命周期比request对象要长,默认是30分钟,30分钟内同一个客户端的多次请求共享同一个session对象的,如果想要在多处请求中共享数据,则可以存储在session对象中

9.cookie与session的区别

区别CookieSession
存储位置存储在客户端浏览器中 (客户端机器磁盘文件)存储在服务端内存中
数据结构cookie是key-value结构 key是String类型 value也是String类型session是key-value类型 key是String类型 value是Object类型
数量一个客户端会话可以存在多个cookie, 可以有几百个一个客户端会话只存在一个session
可存储的数据大小cookie是通过响应头返回给客户端浏览器的, 而响应报文的响应头是有长度限制的, 几KBsession 是存储在服务端的, 可存储的数据大小的上限是服务端的JVM虚拟机内存
安全性cookie存储在客户端是不安全的 可能会受到XSS攻击 (网络安全) 黑客可以通过XSS恶意代码盗取用户的cookiesession存储在服务端是安全的
生命周期cookie在服务端创建, 随着响应头返回到客户端,种入到浏览器中,以后客户端每次发HTTP请求都会在请求头中携带cookie发送到服务器端,服务器端可以在请求头中取出cookie 服务器端在创建cookie的时候可以设置cookie的有效时间,当cookie到期时,客户端浏览器会自动删除cookiesession在服务端创建, 存储在服务端, 每个session对象创建都会生成一个sessionID,然后存储在cookie中返回给客户端浏览器 客户端以后每次发送HTTP请求都会携带存有sessionID的cookie到服务器端,服务端取出cookie中的sessionID可以找到对应的session,当session到期时服务端会自动删除session

10.Servlet的生命周期

Servlet生命周期分为三个阶段:初始化阶段、响应客户请求阶段、终止阶段

初始化阶段:当Servlet第一次被请求的时候,Servlet对象初始化,会调用一次init()方法。

响应客户请求阶段:请求到达Servlet后,先进入Servlet的service方法,service方法根据请求方式是GET或POST调用doGet()doPost()方法

终止阶段:当Tomcat停止运行的时候,调用Servlet的destory()方法

11.什么是Ajax

Ajax是jQuery中封装的一个基于HTTP协议发请求报文和接受响应报文的方法

Ajax是异步刷新技术

当我们请求Servlet,Servlet拿到数据后转发到JSP,JSP返回带有完整数据的页面,浏览器页面是全局刷新

当一个页面加载成功后,想要局部刷新某一处,可以使用Ajax技术

可以通过Ajax发送HTTP报文,后端处理后直接返回JSON格式数据,在Ajax的回调函数中将数据拼接为HTML代码片段,然后对页面的局部区域做更新

怎么理解异步刷新和同步刷新

异步刷新:当Ajax发出后,后端还没有返回处理结果,我们的页面上还可以做其他事情

同步刷新:当请求Servlet,Servlet转发到JSP,在JSP未返回之前,页面上什么都做不了

怎么理解局部刷新和全局刷新?

局部刷新:使用Ajax发出异步请求,然后做页面中某一局部进行更新

全局刷新:请求Servlet,转发到JSP,页面做全局刷新


版权声明:本文为weixin_43942210原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。