javaWeb阶段面试题汇总

一、servlet的生命周期


        Javaweb的生命周期是由servlet容器来控制,而servlet作为Javaweb应用的最核心的组件,其生命周期也是有servlet容器来控制。sevlet的生命周期可以分为三个阶段:初始化阶段、运行时阶段和销毁阶段。在javax.servlet.Servlet接口中定义了三个方法:init()、servlet()、destroy(),它们将分别在Servlet不同阶段被servlet容器调用


1.初始化阶段

Servlet的初始化阶段包括四个步骤

  1. 加载servlet类
  2. 创建servletConfig对象
  3. 创建servlet对象
  4. 调用servlet对象的init(servletConfig config)方法

在下列情况之一,servlet会进入初始化阶段

  1. 当前web应用处于运行时阶段,特定servlet被客户端首次请求访问。多数servlet都会在这种情况下被servlet容器初始化。
  2. 如果在web.xml文件中为一个servlet设置了<load-on-startup>元素,那么当Servlet容器启动Servlet所属的web应用时,就会初始化这个servlet。
  3. 当web应用被重新启动时,web应用中的所有Servlet都会在特定的时刻被重新初始化。

2.运行时阶段

这是Servlet的生命周期中最重要阶段。在这个阶段,Servlet可以随时响应客户端的请求。当Servlet容器接收到要求访问特定Servlet的客户请求,Servlet容器创建针对于这个请求的ServletRequest对象和ServletResponse对象,然后调用相应的Servlet对象的Servlet()方法。servlet()方法从servletRequest对象中获得客户请求信息并处理该请求,通过servletRequest对象生成响应结果。

当servlet容器吧servlet生成的响应结果发送给了客户,servlet容器就会销毁servletRequest对象和ServletResponse对象

3.销毁阶段

当web应用被终止时,servlet容器会先调用web应用中所有的destroy()方法,然后再销毁这些servlet对象。


二、session和cookie的区别?

 

  1. 二者都是会话技术,但不同的是Cookie是暂时性的保存在客户端的会话技术,而session是运行在服务器端的会话技术。
  2. cookie的大小是有限制的,浏览器所储存的临时cookie个数也有限制,但是session的大小限制取决于服务器内存的大小
  3. cookie存在安全隐患,cookie是可以通过拦截或者本地文件来找到cookie后进行攻击的
  4. session会在服务器端保存一段时间才会自动销毁,如果保存了过多的session后服务器会增大压力。

三、get请求和post请求的区别

① get 请求用来从服务器上获取资源;而 post 请求通常是用来向服务器提交数据的;

② get 请求是将表单中的数据按 name=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用 "?" 的方式连接,而各个变量之间使用 "&" 连接;post 是将表单中的数据放在 HTTP 协议的请求头或消息体中,传递到 action 所指向 URL;

③ get 传输的数据受到 URL 长度的限制(因浏览器不同最大字符长度也有所不同),而 post 请求则没有这方面的约束;

④ 使用 get 发送请求时,参数会显示在地址栏上,如果这些数据不是敏感数据,那么允许使用 get,但对于敏感数据,还是建议使用 post;

⑤ get 使用 MIME 类型为 application/x-www-form-urlencoded 的 URL 编码(也叫百分号编码)文本格式进行传递参数,保证被传送的参数遵循规范的文本组成,例如:一个空格的编码是 "%20"。

四、http协议有哪些请求方式

HTTP协议的八种请求方法

HTTP协议中的请求方法(有时也叫“动作”),用来表明对Request-URL指定的资源的不同操作方式。
HTTP1.0中定义了三种请求方法:GET,POST和HEAD。
HTTP1.1中新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT。
在这里插入图片描述

五、http状态码有哪些?

常用的http状态码:

200 OK 服务器成功处理了请求(这个是我们见到最多的)

204 No Content  请求成功处理,没有实体的主体返回

206 Partial Content  GET范围请求已成功处理

301/302 Moved Permanently(重定向)请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置

303 See Other  临时重定向,期望使用GET定向获取

304 Not Modified  发送的附带条件请求未满足

307 Temporary Redirect  临时重定向,POST不会变成GET

400 Bad Request  请求报文语法错误或参数错误

401 Unauthorized  需要通过HTTP认证,或认证失败

403 Forbidden  请求资源被拒绝

404 Not Found(页面丢失)未找到资源

500 Internal Server Error  服务器故障或Web应用故障

501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务

503 Service Unavailable  服务器超负载或停机维护

六、转发和重定向的区别

七、四大作用域

转发:https://blog.csdn.net/Ou19981024

名称作用域
 application在所有应用程序中有效(全局)
 session在当前会话中有效
   request当前请求中有效
   page当前页有效

       所谓“作用域”指的是信息共享范围,通俗讲就是一个信息在多大的范围内有效。

       web交互最基本的单位是HTTP请求,当一个用户进入网站时就形成了一个会话,在服务器运行中有多少个用户进入网站就形成了多少个会话,

       1,application作用域

  application作用域上的信息传递是通过ServletContext实现的,他形成的时间是服务器启动到关闭的整段时间,这段时间作用域形成的信息能被所有应用程序使用。

它提供的主要方法如下所示:

  Object getAttribute(String name):从application中获取信息。

  void setAttribute(String name, Object value):向application作用域中设置信息。

        2,session作用域

       session的作用域是比较容易理解的,就是浏览器对服务器进行访问的多次访问时传递信息,这就形成了session的作用域。

session是通过httpsession接口实现的。

    Object HttpSession.getAttribute(String name):从session中获取信息。

   void HttpSession.setAttribute(String name, Object value):向session中保存信息。

  HttpSession HttpServletRequest.getSession():获取当前请求所在的session的对象。

 

     它提供的主要方法如上所示;

判断session开始时比较容易的,从第一个请求会话开始就已经开启了,如果想主动让会话结束可以使用httpsession的invalidate()方法强制结束当前session。

          3, request作用域

 

  Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的。

  void setAttribute(String name, Object value):将对象value以name为名称保存到request作用域中。

  Object getAttribute(String name):从request作用域中取得指定名字的信息。

  JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的 setAttribute()方法即可传递信息。

  那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。

  RequestDispatcher ServletContext.getRequestDispatcher(String path):取得Dispatcher以便转发。path为转发的目的Servlet。

  void RequestDispatcher.forward(ServletRequest request, ServletResponse response):将request和response转发。

  因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forward()方法进行跳转,最后在跳转到的Servlet中通过使用getAttribute()方法即可实现信息传递。

  PHP的程序员可能不太好理解这一段,因为PHP中没有转发的概念,一个请求只能由一个PHP文件来处理,所以PHP中根本没有request作用域的概念。而Servlet则不同,请求可以在应用程序中任意转发,所以用request作用域在不同Servlet之间传递信息。

  需要注意两点:

  转发不是重定向,转发是在Web应用内部进行的。PHP支持重定向但没有转发。

  转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。

  4. page作用域

  page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。对page对象的引用通常存储在pageContext对象中。

  以上介绍的作用范围越来越小,request和page的生命周期都是短暂的,它们之间的区别:一个request可以包含多个page页。

 

八、九大内置对象

内置对象名类型
requestHttpServletRequest
responseHttpServletResponse
configServletConfig
applicationServletContext
sessionHttpSession
exceptionThrowable
pageObject(this)
outJspWriter
pageContextPageContext

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值