##java面试题大全
点赞、收藏、加关注
·
·
javaWeb 面试题
- ##java面试题大全
- 1、什么是 Servlet,什么是 Jsp?区别是什么
- 2、Cookie 和 Session 的区别与联系
- 3、Cookie 被用户禁用怎么办
- 4、HTTP 请求中怎样选择 Get 和 Post 方式
- 5、JSP 的九大内置对象及作用分别是什么
- 6、Jsp 四大作用域及其作用
- 7、Servlet 的生命周期及常用方法
- 8、转发和重定向区别
- 9、Ajax 书写方式及内部主要参数都有哪些
- 10、过滤器(Filter)和拦截器(Interceptor)的区别
- 11、Ajax 提交请求默认是异步还是同步?怎么修改
- 12、项目中使用过哪些 JSTL 标签
- 13、Jsp 常用的动作标签及作用
- 14、如何防止表单重复提交问题
- 15、分别说出 http、https、ftp、telnet 的默认端口
- 16、什么是 Token
- 17、如何解决跨域问题
1、什么是 Servlet,什么是 Jsp?区别是什么
Servlet:
是由 Java 提供用于开发 Web 服务器应用程序的一个组件,运行在服务端,由 Servlet 容器管理,用来生成动态内容。一个 Servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 Servlet 均必须实现 Servlet 接口
Jsp:
本质上就是一个 Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 Jsp页面都是一个 Servlet 实例
区别:
- Servlet 侧重逻辑控制;Jsp 侧重页面显示;MVC 设计思想中 Jsp 位于视图层,Servlet 位于控制层
- Servlet 没内置对象;Jsp 有九大内置对象
2、Cookie 和 Session 的区别与联系
- Cookie 数据存放在客户的浏览器上;Session 数据放在服务器上
- Cookie 并不是很安全,别人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗;安全应当使用 Session
- Session 会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能;考虑到减轻服务器性能方面,应当使用 Cookie
- 单个 Cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 Cookie
- Cookie 将持久化的存放在客户端;Session 会在浏览器关闭或者一段时间内销毁
- 一般情况下,Session 生成的 SessionId 都是保存在 Cookie 中
- 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 的情况:
- 新增资源时
- 对安全性有要求时
- 传递大数据时
Get 和 Post 的区别:
- Get 一般用于资源获取;Post 一般用于向服务器上提交资源
- Get 请求的数据会附在 URL 之后;Post 提交的数据则放置在 HTTP 报文实体的主体里,所以 Post 方法的安全性比 Get 方法要高
- Get 传输的数据量在特定的浏览器和服务器中对 URL 的长度有限制,一般限制在 2KB;Post 对于数据大小是无限制的,真正影响到数据大小的是服务器处理程序的能力
- 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、转发和重定向区别
行为不同:
- 转发:是一种服务器行为,转发时 request 对象会被保存,request 对象是同一个。又由于这个过程是服务端行为,所以客户端的地址栏不会发生改变,从始到终请求只有一次
- 重定向:是一种客户端行为,实际上期间发生的是两次请求,前一次的请求 request 对象不会作保存,两个 Servlet 里的 reuqest 对象不是同一个,且地址栏地址会发生改变
可达资源不同:
- 转发:只能转发到 Web 应用内部的资源
- 重定向:可以到任何资源。
代码中的 / 表示不同:
- 转发:/ 表示 Web 应用的根目录
- 重定向:/ 是站点的根目录
9、Ajax 书写方式及内部主要参数都有哪些
常用:
$ .ajax()、$ .getJson()
主要参数:
- url:要求为 String 类型的参数,发送请求的地址
- method:要求为 Stirng 类型,请求方式 Post 或 Get
- timeout:要求为 Number 类型,设置请求超时时间(毫秒)
- async:要求为 Boolean 类型,异步为 true,同步为 false
- cache:要求为 Boolean 类型,从游览器缓存中是否加载信息
- data:要求为 Object 或 Stirng 类型,发送到服务器的数据
- dataType:要求为 String 类型,预期服务器返回的数据类型
- beforeSend:要求为 Function 类型的参数,发送请求前运行的函数
- success:function(result):当请求成功时运行的函数
详情请看:
Ajax的使用
10、过滤器(Filter)和拦截器(Interceptor)的区别
- 过滤器是基于函数回调;拦截器是基于 java 的反射机制的
- 过滤器接口 Filter 定义在 javax.servlet 包中;拦截器接口 HandlerInterceptor 定义在 org.springframework.web.servlet 包中
- 过滤器依赖与 Servlet 容器;拦截器不依赖与 Servlet 容器
- 过滤器不能够使用 Spring 容器资源;拦截器是一个 Spring 的组件,归 Spring 管理,配置在 Spring 文件中,因此能使用 Spring 里的任何资源
- 过滤器在只在 Servlet 前后起作用;拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具有更大的弹性
- 过滤器定义在 web.xml 中
11、Ajax 提交请求默认是异步还是同步?怎么修改
async 属性默认设置为 true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false
$.ajax({
url:"url",
type:"post",
async:false,
success:function(){代码}
});
同步请求和异步请求的差别:
- 同步请求:(false)同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据
- 异步请求:(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 常用的动作标签及作用
- < jsp:forward>:用于请求转发
- < jsp:param> :用于页面传递数据
- < jsp:include>:作用与 Jsp 中 include 指令功能是一样的,区别是指令静态包含,包含的是内容;而此标签动态包含,包含的是结果。静态包含不可以传递参数,而动态包含可以传递参数
14、如何防止表单重复提交问题
- 数据库主键唯一
- 提交成功后重定向
- 使用 JavaScript 解决,使用标记位,提交后隐藏或不可用提交按钮
- 使用 Session 解决,生成唯一的 Token 给客户端,客户端第一次提交时带着这个 Token,后台与 Session 中的进行对比,一样则提交成功并清除 Session 中的 Token,不一样则提交失败
15、分别说出 http、https、ftp、telnet 的默认端口
- http:80
- https:443(安全协议)
- ftp:21(文件传输协议)
- telnet:23(远程控制登录协议)
- tomcat:8080
- mysql:3306
- redis:6379
16、什么是 Token
Token 的引入:
Token 是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token 便应运而生
Token 的定义:
Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上这个 Token 前来请求数据即可,无需再次带上用户名和密码
使用 Token 的目的:
Token 的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。Token 一般都需要在后端服务保存一份,比如使用 Redis 保存。如果不想保存,可以使用 jwt 方案
17、如何解决跨域问题
解释:
跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。所谓同源指的是:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源
解决方案:
- 使用 ajax 的 jsonp
- Nginx 转发:利用 Nginx 反向代理,将请求分发到部署相应项目的 Tomcat 服务器,当然也不存在跨域问题
- 使用 Cors:写一个配置类实现 WebMvcConfigurer 接口或者配置 FilterRegistrationBean,网关也可以配置跨域,如果网关配置了跨域,后边微服务一般不需要配置