JavaWeb中Servlet的由来和发展

Servlet 解释说明

Servlet 是服务器端的程序,动态生成 html 页面发送到客户端,但是这样程序里会有很多 out.println(),java 与 html 语言混在 一起很乱,
所以后来 sun 公司推出了 JSP.其实 JSP 就是 Servlet,每次运行的时候 JSP 都首先被编译成 servlet 文件,然后再被编译成.class 文件运行。
有了 jsp,在 MVC 项目中 servlet 不再负责动态生成页面,转而去负责控制程序逻辑的作用,控制 jsp 与 javabean 之间的流转

JSP 和 servlet 有什么区别?

JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于,servlet 的应用逻辑是在 Java 文件中,
并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑

说一说 Servlet 的生命周期?

Servlet 生命周期包括三部分:
初始化: Web 容器加载 servlet,调用 init()方法
处理请求: 请求到达时,运行其 service()方法。service()自动派遣运行与请求相对应的 doXXX(doGet 或者 doPost)方法。
销毁: 服务结束,web 容器会调用 servlet 的 distroy()方法销毁 servlet

Servlet 的基本架构

public class ServletName extends HttpServlet { 
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ } 
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } 
}

JSP 有哪些内置对象?作用分别是什么?

JSP 有 9 大内置对象:

request封装客户端的请求,其中包含来自 get 或 post 请求的参数;
response封装服务器对客户端的响应;
pageContext通过该对象可以获取其他对象;
session封装用户会话的对象;
application封装服务器运行环境的对象;
out输出服务器响应的输出流对象;
configWeb 应用的配置对象;
pageJSP 页面本身(相当于 Java 程序中的 this);
exception封装页面抛出异常的对象;

说一下 JSP 的 4 种作用域?

page代表与一个页面相关的对象和属性。
request代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域
session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
application代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

简单说:
Page:一个页面
Request:一次请求
Session:一次会话
Application:服务器从启动到停止的整个Web应用程序

session 和 cookie 有什么区别?前后端分离后如何进行会话跟踪的?

session cookie
存储位置服务器端浏览器端
安全性安全性一般,在浏览器存储,可以被伪造和修改
容量和个数限制有容量限制,每个站点下的 cookie 也有个数限制
存储的多样性可以存储在 Redis 中、数据库中、应用程序中只能存储在浏览器中

前后端分离后如何进行会话跟踪?:

一般是使用token来模拟sessionID来模拟保持会话。
附:
问:如何传递token?
答:传统模式下sessionID是存储在cookies中的,并且会在请求中默认传递。为了模拟session保持会话,token就相当于sessionID,我们需要在每次发送请求的时候传递token,因为前后分离的模式下,使用ajax来请求后台数据,我们可以将token存放在参数中,或者我们可以将token放在请求头中向后台传递,这样做仅仅是为了保证token尽可能的不被恶意读取到。
问:后台如何使用token保持会话?
答:token值在生成的时候,并发不大的情况下,可以将用户的登录信息存入数据库,设置有效时间,token作为其唯一标识。当请求来了,通过token去查询用户信息,并判断是否过期。如果并发量大,可以考虑使用redis缓存,此时token作为key值,将用户的信息保存在redis当中,redis本身可以设置过期时间。
问:使用token如何保证安全?有没有存在恶意拿到token去模拟用户登录进而获取用户重要信息?
答:个人猜测:这种情况是可能的,因为前后分离的网站,都设置了跨域,所以浏览器的同源策略就失去了效果。这个我想到的就是自己手动模拟同源,但是没有实验过,项目没有必要这么使用。

说一下 session 的工作原理?

session 的工作原理是:
客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。

这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。

如果客户端禁止 cookie 能实现 session 还能用吗?

可以,session 只是依赖 cookie 存储 sessionid,如果 cookie 被禁用了,可以使用url 中添加 sessionid 的方式保证 session 能正常使用。

Jwt的优势是什么?

去中心化,就是用户的账号信息没有保持到服务器

另附:JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)

作者:扬俊的小屋

https://blog.csdn.net/qq_19782019/article/details/80292110.

1


  1. 编写不易,如果有帮助到的话,可以关注,点赞和收藏哦~ ↩︎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值