JAVAWEB

本文深入讲解Servlet执行原理、web.xml作用、Servlet生命周期等关键概念,对比GET与POST、forward与redirect,剖析Cookie与Session机制,探讨JSP与Servlet关系及JSP内置对象,详解过滤器生命周期,解答Servlet单例与多线程同步问题,阐述MVC架构元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、简述Servlet执行原理?

(1)当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
(2)查找web.xml文件,是否有对应的<url-pattern>标签体内容。
(3)如果有,则在找到对应的<servlet-class>全类名
(4)tomcat会将字节码文件加载进内存,并且创建其对象
(5)调用其方法

在这里插入图片描述


2、描述web.xml的作用?

web.xml文件并不是web工程必须的。web.xml文件是用来初始化配置信息。
(1)指定欢迎页面,错误处理页面。
(2)命名与定制URL,定制初始化参数。
(3)设置过滤器和监听器,会话(Session)过期时间。


3、简述Servlet的生命周期?

servlet 被实例化后,调用 init 方法。请求到达时,运行 service()方法,调用 doGet()、doPost()等方法。当服务器决定将实例销毁时调用 destroy()方法。

init():第一次请求资源的时候,执行且只执行一次 init 方法。

service():第二次往后,执行 service 方法,执行多次。在这个方法内部,根据请求方式的不同,进而继续调用不同的 doGet 和 doPost 方法。

destory():当 Servlet 服务器正常关闭时,执行 destroy 方法,只执行一次。


4、简述post和get的区别?

(1)get传输的数据量小,主要是因为它受约于URL长度的限制,而post可以传输大量的数据,所以我们在传文件的时候会用post。

(2)get不太安全,因为get请求的参数直接暴露在URL上,所以不能用来传递敏感信息。post相对安全,请求参数在请求体中。

(3)get数会被完整保留在浏览器历史记录里,而post中的参数不会被保留

(4)对参数的数据类型,get只接受ASCII字符,而post没有限制。

(5)get在浏览器回退时是无影响的,post会再次提交请求


5、简述forward 和 redirect 区别

(1)重定向的特点:redirect

① 地址栏发生变化
② 重定向可以访问其他站点(服务器)的资源
③ 重定向是两次请求。不能使用request对象来共享数据

(2)转发的特点:forward

① 转发地址栏路径不变
② 转发只能访问当前服务器下的资源
③ 转发是一次请求,可以使用request对象来共享数据

在这里插入图片描述


6、Cookie实现原理

基于响应头set-cookie和请求头cookie实现
第一次请求服务器,服务器设置cookie将cookie存储到响应头中。最终存储到浏览器中。在一定时间内,再次请求服务器,request中会携带cookie,带给服务器。
在这里插入图片描述


7、session的原理?

在服务器第一次调用request.getSession()方法的时候,会在内存中创建一个session对象。此对象具有一个唯一的id值,id将会以cookie(JSESSIONID)的形式发送给浏览器,浏览器以后每次请求都会携带着此cookie,服务器就利用这个cookie区分是否是同一session作用域。


8、cookie与session的区别?

(1)session存储数据在服务器端,Cookie在客户端
(2)session没有数据大小限制,Cookie有
(3)session数据安全,Cookie相对于不安全

应用场景

(1)可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
(2)session一定时间内保存在服务器上。当访问增多,会占用服务器的性能,考虑到减轻服务器性能,应当使用cookie。


9、JSP和Servlet是什么关系?

Servlet: 是一个特殊的Java程序,运行在服务器的JVM中,依靠服务器的支持向浏览器显示内容。

JSP本质: 上是Servlet的简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。

Servlet和JSP最主要的不同点

(1)Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。JSP是Java和HTML可以组合成一个扩展名为.jsp的文件。

(2)JSP侧重于视图,Servlet更侧重于控制逻辑。


10、JSP九大内置对象?
变量名真实类型作用
pageContextPageContext当前页面共享数据,还可以获取其他八个内置对象
requestHttpServletRequest一次请求访问的多个资源(转发)
sessionHttpSession一次会话的多个请求间
applicationServletContext所有用户间共享数据
responseHttpServletResponse响应对象
pageObject当前页面(Servlet)的对象 this
outJspWriter输出对象,数据输出到页面上
configServletConfigServlet的配置对象
exceptionThrowable异常对象
一共有9个:在jsp页面中不需要创建,直接使用的对象

11、四个作用域对象及其生命周期?
作用域对象作用范围功能
pageContext当前页面解决了在当前页面内的数据共享问题。 获取其他内置对象。
request一次请求一次请求内的servlet的数据共享。 通过请求转发将数据流转给下一个servlet
session一次会话一个用户的不同请求的数据共享问题。 将数据从一次请求流转给其他请求。
application项目内不同用户的数据共享问题。将数据从一个用户流转给其他用户。

(1)Request生命周期

request对象的生命周期是:针对一次请求,当请求完毕之后,request里边的内容也将被释放,一个请求开始时创建,请求结束后销毁。

(2)Session的生命周期

创建 当程序第一次调用到request.getSession()代码时,此时创建session。

销毁
超时销毁:默认情况下如果session超过30分钟没人使用,服务器认为这个session超时了,销毁session。可以在web.xml中配置的session超时时间。

立即销毁:明确的调用session.invalidate(),session立即销毁。
服务器异常关闭或web应用被移除出容器,此时随着web应用的销毁session销毁

服务器正常关闭,session会被钝化.当下次服务器启动时,没有超时的session会被活化回来。


12、过滤器生命周期和作用?

生命周期

(1)init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。
(2)doFilter:每一次请求被拦截资源时,会执行。执行多次。
(3)destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。

过滤器作用

(1)init: 做一些初始化工作。
(2)destory: 用于释放资源。
(3)doFilter: 为过滤器中最核心的方法,对请求和响应进行拦截,当过滤器拦截到资源时,服务器会自动调用该方法执行过滤代码。 我们只需要在这个方法中设计过滤器的逻辑代码即可


13、Servlet的单例问题?

Servlet的创建和销毁

通常状况下,针对客户端的多次请求,Servlet只会创建一个实例对象,一旦创建它就会驻留在内存中,为以后的请求提供服务,直至退出web应用为止。也就是当我们关闭了浏览器之后我们的Servlet就终止了。

引入: 当Servlet第一次访问的时候,就被加载到内存中,以后该实例对各个请求服务,每次请求都会调用一次service方法。

这样会出现什么问题:因为Servlet是单例的,所以会出现线程安全问题。


14、Servlet的多线程同步问题?

Servlet本身是单实例的,这样当有多个用户同时访问某个Servlet时,会访问该唯一的Servlet实例中的成员变量,如果对成员变量进行写入操作,那就会导致Servlet的多线程问题,即数据不一致。
  
(1)解决Servlet多线程同步问题的最好方式:去除实例变量,使用局部变量。因为局部变量是各个线程私有的。
  
(2)使用同步代码块synchronized{}
  
(3)Servlet实现javax.serlvet.SingleThreadModel,Servlet2.4中已经废弃了该接口,此时Servlet容器将保证Servlet实例以单线程方式运行,也就是说,同一时刻,只会有一个线程执行Servlet的service()方法。效率低。


15. MVC三层架构元素及其含义?

(1) M:模型(Model)---->JavaBean

  • 完成具体的业务操作,如:查询数据库,封装对象

(2)V:视图(View)---->JSP

  • 展示数据

(3)C:控制器(Controller)。Servlet

  • 获取用户的输入
  • 调用模型
  • 将数据交给视图进行展示

16、web目录结构,下列说法错误的是?

A.WEB-INF 目录存在于 web 应用的根目录下
B.WEB-INF 目录与 classes 目录平行
C.web.xml 在 WEB-INF 目录下
D.Web 应用程序可以打包为 war 文件

解析:classes 目录位于 WEB-INF 目录之下,故选B。
在这里插入图片描述











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值