8.08 Day37---jsp javaweb 面试题

目录

jsp javaweb 面试题:

JSP和Servlet的区别:

JSP的九大内置对象:

JSP四大作用域:(只讲红色背景的)

HTTP协议:

请求报文和响应报文的结构:

http请求方法有哪些?(只讲红色加粗的)

GET和POST的区别:

GET和POST请求方式的区别:

Servlet生命周期:

转发与重定向的区别:

Cookie与Session的区别:

拦截器技术:

前后端交互方式

使用Form表单

使用超链接

使用ajax(阿甲克思)&json

MVC三层架构:

设计模式:

单例模式:

工厂模式:

代理模式:



jsp javaweb 面试题:

JSP和Servlet的区别:

JSP和Servlet的主要作用的相同的,都是充当JavaWeb工程的中间层,接受HTTP客户端的请求,调用Model层后返回响应。

JSP全称是Java Servlet Page,JSP中可以写html, css, js代码,并且可以在<%%>中嵌入Java代码,当JSP第一次被请求时,会由Tomcat把JSP翻译为Java源代码文件,再编译为Class字节码文件,最终向HTTP客户端输出HTML格式的响应结果。因此JSP是运行在服务器端的。

由Tomcat把JSP翻译的Java源代码文件就是一个Servlet,因此JSP本质是就是Servlet

JSP可以充当MVC三层中的Controller控制器层和View视图表示层,但是这不是一种好的编程体验,也违反了程序设计的单一职责原则,因此我们将控制器和视图表示层分层,控制器层交给Servlet,视图层交给JSP。由控制器层Servlet接受HTTP客户端的请求,调用Model层拿到数据后再把数据转发给视图层JSP,JSP中通过jstl标签和el表达式把数据取出后生成动态的HTML,最终输出给HTTP客户端。

另一种说法:

Servlet

  • 一种服务器端的Java应用程序
  • 由 Web 容器加载和管理
  • 用于生成动态 Web 内容
  • 负责处理客户端请求

Jsp

  • 是 Servlet 的扩展,本质上还是 Servlet
  • 每个 Jsp 页面就是一个 Servlet 实例
  • Jsp 页面会被 Web 容器编译成 Servlet,Servlet 再负责响应用户请求

区别

  • Servlet 适合动态输出 Web 数据和业务逻辑处理,对于 html 页面内容的修改非常不方便;Jsp 是在 Html 代码中嵌入 Java 代码,适合页面的显示
  • 内置对象不同,获取内置对象的方式不同

JSP的九大内置对象:

九大内置对象:

request请求对象       封装了来自客户端、浏览器的各种信息。
response响应对象    封装了服务器的响应信息。

page对象             指向了当前jsp程序本身。
session会话对象         用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数据
application对象   代表了当前应用程序的上下文。可以在不同的用户之间共享信息。

pageContext对象  提供了对jsp页面所有对象以及命名空间的访问。

out对象               用于向客户端、浏览器输出数据。

exception对象    封装了jsp程序执行过程中发生的异常和错误信息。
config对象           封装了应用程序的配置信息。

JSP四大作用域:(只讲红色背景的)

四大作用域分别对应了4个内置对象

每个对象都有setAttibute()方法和getAttibute()方法

page作用域:在当前jsp共享

数据只在当前JSP能够取到

一个页面对应一个page

request作用域:在当前请求中共享

数据在本次请求未结束前都能取到

一次请求对应一个request对象

session作用域:在当前客户端共享

数据在session对象未失效前(默认是30分钟失效)都能取到

一个客户端对应一个session会话

application作用域:所有的客户端共享

数据 在应用程序未退出前都能取到

所有的客户端共享

作用域大小:

page<request<session<application

用el表达式取数据的时候需要指定在哪个作用域中取:

${pageScope.name}

${requestScope.name}

${sessionScope.name}

${applicationScope.name}

如果不指定作用域也可以,el表达式默认会从最低作用域开始依次找,直到找到

HTTP协议:

请求报文和响应报文的结构:

一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据

HTTP响应报文也由三部分组成:响应行、响应头、响应体

http请求方法有哪些?(只讲红色加粗的)

1、GET方法-查

2、POST方法-增

3、HEAD方法;

4、PUT方法-改

5、DELETE方法-删

6、CONNECT方法;

7、OPTIONS方法;

8、TRACE方法。

GET和POST的区别:

1.携带数据的位置和大小不同

get请求直接把参数用?拼接在url后面,大小上限是2KB-4KB

post请求把数据放在请求体里面,大小上限是15MB

GET和POST请求方式的区别:

第一层 GET和POST的行为区别(只讲第一层红色加粗的)

- GET参数通过URL传递,POST放在Request body中。

- GET请求在URL中传送的参数是有长度限制的,而POST没有。

- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

- GET在浏览器回退时是无害的,而POST会再次提交请求。

- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制

- GET请求会被浏览器主动cache缓存,而POST不会,除非手动设置。

- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

Servlet生命周期:

1.初始化阶段:当Servlet第一次被请求,会初始化Servlet实例,重写init方法可以参与这个阶段

2.判断请求方式阶段,当请求进来后,会调用service方法来判断当前请求方式,从而决定调用哪个处理请求的方法,如果是get请求就会调用doGet方法,如果是post请求就会调用doPost方法,其他几种请求也有响应的doXxx()方法

3.销毁阶段,当Tomcat退出运行的时候,会销毁Servlet实例,重写destory()方法可以参与这个阶段

转发与重定向的区别:

1.发生的位置不同

转发请求:发生在服务端

定向请求:发生在客户端

2.请求次数不同

转发请求:请求在后端转发多次,仍然属于同一次定向请求

重定向请求:是两次定向请求

3.地址栏不同

转发请求不会改变浏览器的地址栏

重定向请求会改变浏览器的地址栏

4.是否共享request作用域

转发请求可以共享作用域中携带的数据

重定向请求不可以共享request作用域中的数据

5.跳转限制

转发只能发生在当前站点

重定向可以发生在当前站点内,也可以到外部的站点

Cookie与Session的区别:

Cookie和Session都是会话跟踪技术

1.存储位置不同:

Cookie存储在客户端浏览器中

Session存储在服务端

Session依赖名为JSESSIONID的COOKie

2.大小不同:

单个Cookie保存的数据最大为4KB,一个站点最多可以存在20个Cookie

Session的大小没有上限

3.隐私策略不同

Cookie是存储在客户端浏览器的,会遭受XSS攻击导致数据泄露,隐因此Cookie是不安全的,不适合存储敏感数据

Session是存储在服务端的,安全性比较高,但会消耗服务端性能,不适合存储太多数据

4.存储类型不同

Cookie中只能存储ASCll字符串

Session中可以存储任意对象

拦截器技术:

前后端交互方式

使用Form表单

action属性指定请求url地址

method属性指定请求方式,默认是get请求

表单元素的name和value是数据名和数据值,后端可以根据name取value

提交按钮是submit类型的按钮

<form action="请求url" method="请求方式">
    <input name="" value=""/>
    <button type="submit"></button>
</form>

使用超链接

href属性指定请求url地址,使用?在后面拼接请求参数,格式是name=value,用&分隔

使用ajax(阿甲克思)&json

无刷技术

用ajax技术发出的http请求,后端返回的是数据,而不是页面,当前页面不会刷新

异步http请求

局部刷新

在ajax的回调函数中,根据后端返回的数据,更新页面的局部区域,不会影响到其他区域

ajax的请求方式get和post

@ResponseBody注解的作用:控制器不做转发,而是直接把数据给ajax

MVC三层架构:

是一种代码分层架构思想

  • M:Model,业务模型,处理业务
  • V:View,视图,界面展示
  • C:Controller,控制器,处理请求,调用模型和视图

控制器(serlvet)用来接收浏览器发送过来的请求,控制器调用模型(javaBean)来获取数据,比如从数据库查询数据;控制器获取到数据后在交由视图(JSP)进行数据展示。

设计模式:

单例模式:只有一个实例

  懒汉式:当调用getInstance的时候,才会初始化这个单例。

  饿汉式:一旦加载好类,就把单例初始化完成。

  双检锁式:先判断对象是否已经被初始化,再决定要不要加锁。

  枚举:可被列举的集合,具有不可变性。

工厂模式:

最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。

代理模式:为真实对象提供代理,供其他对象通过代理访问真实对象

  静态代理:程序运行前就已经存在代理类的字节码文件。

  动态代理:在Java运行时生成代理类的技术

     Java代理:客户端不直接和服务端打交道, 而是通过一个中间层来访问, 这个中间层就是Java代理。

     cglib代理:在内存中构件一个子类对象,从而实现对目标对象的功能拓展。



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值