【java面试题-Web篇-2023】

##java面试题大全

详细面试题-持续更新中-点击跳转

点赞、收藏、加关注
·
·

1、什么是 Servlet,什么是 Jsp?区别是什么

Servlet:
是由 Java 提供用于开发 Web 服务器应用程序的一个组件,运行在服务端,由 Servlet 容器管理,用来生成动态内容。一个 Servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 Servlet 均必须实现 Servlet 接口

Jsp:
本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 Jsp页面都是一个 Servlet 实例

区别:

  1. Servlet 侧重逻辑控制;Jsp 侧重页面显示;MVC 设计思想中 Jsp 位于视图层,Servlet 位于控制层
  2. Servlet 没内置对象;Jsp 有九大内置对象

2、Cookie 和 Session 的区别与联系

  1. Cookie 数据存放在客户的浏览器上;Session 数据放在服务器上
  2. Cookie 并不是很安全,别人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗;安全应当使用 Session
  3. Session 会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能;考虑到减轻服务器性能方面,应当使用 Cookie
  4. 单个 Cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 Cookie
  5. Cookie 将持久化的存放在客户端;Session 会在浏览器关闭或者一段时间内销毁
  6. 一般情况下,Session 生成的 SessionId 都是保存在 Cookie 中
  7. Cookie 中只能保管 ASCII 字符串,并需要通过编码方式存储为 Unicode 字符或者二进制数据;Session 中能够存储任何类型的数据,包括且不限于 String,Integer,List,Map 等

3、Cookie 被用户禁用怎么办

使用 URL 地址重写是对客户端不支持 Cookie 的解决方案。URL 地址重写的原理是将该用户 Session 的 id 信息重写到 URL 地址中。服务器能够解析重写后的 URL 获取 Session 的 id。这样即使客户端不支持 Cookie,也可以使用 Session 来记录用户状态

4、HTTP 请求中怎样选择 Get 和 Post 方式

使用 Get 的情况:
查询资源时

使用 Post 的情况:

  1. 新增资源时
  2. 对安全性有要求时
  3. 传递大数据时

Get 和 Post 的区别:

  1. Get 一般用于资源获取;Post 一般用于向服务器上提交资源
  2. Get 请求的数据会附在 URL 之后;Post 提交的数据则放置在 HTTP 报文实体的主体里,所以 Post 方法的安全性比 Get 方法要高
  3. Get 传输的数据量在特定的浏览器和服务器中对 URL 的长度有限制,一般限制在 2KB;Post 对于数据大小是无限制的,真正影响到数据大小的是服务器处理程序的能力
  4. Get 执行效率却比 Post 方法好。Get 是 Form 提交的默认方法

5、JSP 的九大内置对象及作用分别是什么

request:
就是 Servlet 中的 HttpServletRequet,代表的是来自客户端的请求

response:
就是 Servlet 中的 HttpServletResponse,代表的是对客户端的响应,也就是说可以通过 response 对象来组织发送到客户端的数据。响浏览器输出内容

out:
输出到浏览器,out.println(“在浏览器中输出的内容”)

session:
代表服务器与客户端所建立的会话,当需要在不同的 JSP 页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。Session 对象建立在 Cookie 的基础上,所以使用时应注意判断一下客户端是否打开了 Cookie。在当前会话中有效,新会话中无效

application:
就是 ServletContext 的一个对象实例,代表当前 Web 应用,对象负责提供应用程序在服务器中运行时的一些全局信息。在当前 Web 应用中有效

config:
此对象提供配置信息。获取 Jsp 在 web.xml 文件中配置的初始化参数
如:<%= config.getInitParameter(“test”) %> //获取配置信息

pagecontext:
称作“页面上下文”对象,代表的是当前页面运行的一些属性。可以通过它获取到其他8个变量对应的对象

page:
代表了正在运行的由 Jsp 文件产生的对应的 Servlet 类对象

exception:
显示异常信息,此对象不能在一般 Jsp 文件中直接使用,特殊情况下才能使用,只能在使用了 <%@ page isErrorPage=“true”%> 的 Jsp 文件中使用

6、Jsp 四大作用域及其作用

PageContex:
只能应用在当前面页的一次请求中

Request:
只要在同一个请求中,不论该请求经过 N 个动态资源,只能是转发

Session:
只要在一次新会话中(浏览器不关),不论该请求经过 N 个动态资源,不论转发还是重定向

Application:
只要在当前 Web 应用中,不论该请求经过 N 个动态资源,不论转发还是重定向,不论多个新会话

7、Servlet 的生命周期及常用方法

在这里插入图片描述
init:
Servlet 对象被创建时执行,且只执行一次,作用是做初始化,init(ServletConfig arg) 带 ServletConfig 参数

service:
被多次调用,每次在浏览器刷新请求都会调用一次 service 方法,实际用于对请求的响应,带有 ServletRequest 和 ServletResponse 参数

destroy:
只被调用一次,当前 Servlet 所在的 Web 应用被卸载前执行,用于释放 Servlet 占用的计算机资源

8、转发和重定向区别

行为不同:

  1. 转发:是一种服务器行为,转发时 request 对象会被保存,request 对象是同一个。又由于这个过程是服务端行为,所以客户端的地址栏不会发生改变,从始到终请求只有一次
  2. 重定向:是一种客户端行为,实际上期间发生的是两次请求,前一次的请求 request 对象不会作保存,两个 Servlet 里的 reuqest 对象不是同一个,且地址栏地址会发生改变

可达资源不同:

  1. 转发:只能转发到 Web 应用内部的资源
  2. 重定向:可以到任何资源。

代码中的 / 表示不同:

  1. 转发:/ 表示 Web 应用的根目录
  2. 重定向:/ 是站点的根目录

9、Ajax 书写方式及内部主要参数都有哪些

常用:
$ .ajax()、$ .getJson()

主要参数:

  1. url:要求为 String 类型的参数,发送请求的地址
  2. method:要求为 Stirng 类型,请求方式 Post 或 Get
  3. timeout:要求为 Number 类型,设置请求超时时间(毫秒)
  4. async:要求为 Boolean 类型,异步为 true,同步为 false
  5. cache:要求为 Boolean 类型,从游览器缓存中是否加载信息
  6. data:要求为 Object 或 Stirng 类型,发送到服务器的数据
  7. dataType:要求为 String 类型,预期服务器返回的数据类型
  8. beforeSend:要求为 Function 类型的参数,发送请求前运行的函数
  9. success:function(result):当请求成功时运行的函数

详情请看:
Ajax的使用

10、过滤器(Filter)和拦截器(Interceptor)的区别

  1. 过滤器是基于函数回调;拦截器是基于 java 的反射机制的
  2. 过滤器接口 Filter 定义在 javax.servlet 包中;拦截器接口 HandlerInterceptor 定义在 org.springframework.web.servlet 包中
  3. 过滤器依赖与 Servlet 容器;拦截器不依赖与 Servlet 容器
  4. 过滤器不能够使用 Spring 容器资源;拦截器是一个 Spring 的组件,归 Spring 管理,配置在 Spring 文件中,因此能使用 Spring 里的任何资源
  5. 过滤器在只在 Servlet 前后起作用;拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具有更大的弹性
  6. 过滤器定义在 web.xml 中

11、Ajax 提交请求默认是异步还是同步?怎么修改

async 属性默认设置为 true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false

$.ajax({
	url:"url",
	type:"post",
	async:false,
	success:function(){代码}
});

同步请求和异步请求的差别:

  1. 同步请求:(false)同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据
  2. 异步请求:(true) 异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax 发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响

12、项目中使用过哪些 JSTL 标签

使用准备:
想要使用 JSTL,首先需要给项目导入 JSTL 的架包(jstl.jar和standard.jar)
在 Jsp 页面上添加这样一行代码:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

常用标签:
常见的有 Core 标签库里面的 c 标签的使用。有输出标签 <c:out>,判读标签 <c:if> 和迭代标签 <c:forEach>,多重判断标签 <c:choose> 等

13、Jsp 常用的动作标签及作用

  1. < jsp:forward>:用于请求转发
  2. < jsp:param> :用于页面传递数据
  3. < jsp:include>:作用与 Jsp 中 include 指令功能是一样的,区别是指令静态包含,包含的是内容;而此标签动态包含,包含的是结果。静态包含不可以传递参数,而动态包含可以传递参数

14、如何防止表单重复提交问题

  1. 数据库主键唯一
  2. 提交成功后重定向
  3. 使用 JavaScript 解决,使用标记位,提交后隐藏或不可用提交按钮
  4. 使用 Session 解决,生成唯一的 Token 给客户端,客户端第一次提交时带着这个 Token,后台与 Session 中的进行对比,一样则提交成功并清除 Session 中的 Token,不一样则提交失败

15、分别说出 http、https、ftp、telnet 的默认端口

  1. http:80
  2. https:443(安全协议)
  3. ftp:21(文件传输协议)
  4. telnet:23(远程控制登录协议)
  5. tomcat:8080
  6. mysql:3306
  7. redis:6379

16、什么是 Token

Token 的引入:
Token 是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token 便应运而生

Token 的定义:
Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上这个 Token 前来请求数据即可,无需再次带上用户名和密码

使用 Token 的目的:
Token 的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。Token 一般都需要在后端服务保存一份,比如使用 Redis 保存。如果不想保存,可以使用 jwt 方案

17、如何解决跨域问题

解释:
跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。所谓同源指的是:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源

解决方案:

  1. 使用 ajax 的 jsonp
  2. Nginx 转发:利用 Nginx 反向代理,将请求分发到部署相应项目的 Tomcat 服务器,当然也不存在跨域问题
  3. 使用 Cors:写一个配置类实现 WebMvcConfigurer 接口或者配置 FilterRegistrationBean,网关也可以配置跨域,如果网关配置了跨域,后边微服务一般不需要配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄天灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值