Java Servlet相关面试题

news/2024/12/22 20:10:31/

一、什么是servlet?

Servlet是运行在java服务器中的小型Java程序。

作用:接收用户请求,并对请求作出处理,将处理结果相应给客户端。

Servlet是JavaWeb三大组件(Servlet、过滤器,监听器 )之一,它属于动态资源。Servlet的作用是处理请求,服务器(Tomcat等)会把接收到的请求交给Servlet来处理,在Servlet中通常要完成以下三步:接收请求、处理请求、完成响应。

举个栗子:客户端发出登陆请求,服务器通过请求路径映射到对应的Servlet,将请求交由Servlet来处理,Servlet需要由我们自己编写,实现一个Servlet接口可以继承 javax.servlet.http.HttpServlet类。

 

二、实现Servlet有哪些方式?

  1. 实现javax.servlet.Servlet接口;
  2. 继承javax.servlet.GenericServlet类;
  3. 继承javax.servlet.http.HttpServlet类。

三、请你说说Servlet的声明周期。

        先看一个简单的Servlet样例

public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();writer.println("hello world!");}@Overridepublic void init() throws ServletException {super.init();}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {super.service(req, res);}@Overridepublic void destroy() {super.destroy();}
}
  1. 初始化:默认情况下,服务器会在第一次访问时创建对应的Servlet,如果需要在服务器启动时创建Servlet,需要在web.xml配置文件中配置load-on-startup参数,如<load-on-startup>0</load-on-startup>,数值越小,越先被启动。Servlet创建成功后,会调用init方法,我们在编写Servlet程序时,可以重写init方法,在init方法中进行一些初始化的处理。
  2. Servlet服务:服务器接到一次Servlet请求,就会调用一次service方法,所以我们要将Servlet的逻辑代码写在service方法中。如果是通过继承javax.servlet.http.HttpServlet的方式实现Servlet,service方法又分成了doGet,doPost等方法,我们可以根据不同的请求方式将代码写在对应的方法中,如doGet,doPost等。
  3. 销毁:Servlet通常在服务器关闭时销毁,在销毁之前会去调用servlet的destroy方法,我们可以把对某些资源释放的代码放在destroy方法中。

四、Servlet是线程安全的吗?

        Servlet是单例的,对于具体的一个Servlet来说,无论多少个请求过来,都是同一个Servlet对象在处理,所以是存在线程安全问题的,所以我们不应该在Servlet类中随便创建成员变量,因为可能存在一个线程对这个变量进行写操作。

五、如何让某个Servlet在服务器启动时就创建?

        默认情况下,Servlet是在第一次请求的时候创建,可以在web.xml文件中配置load-on-startup参数,使Servlet在服务启动时创建,如:

<servlet><servlet-name>hello</servlet-name><servlet-class>com.llg.servlet.HelloServlet</servlet-class><load-on-startup>0</load-on-startup>
</servlet>

六、Servlet get和Servlet post的区别是什么?

  1. get方式请求

    1. get方式提交的请求,参数通过url路径拼接的方式传递;
    2. 不安全的提交方式;
    3. 提交的参数大小是有限制的,最多只能传递1024个字节,并且只能传递文本类型的参数;
    4. 提交后调用的是Servlet的doGet方法。
  2. post方式请求

    1. post方式提交的请求,参数放在请求体中;
    2. 相对安全的提交方式;
    3. 参数大小没有限制,不仅可以提交文本格式的参数,还可以提交二进制格式的参数;
    4. 提交后调用的是Servlet的doPost方法。

七、重定向和转发的区别是什么?

  1. 重定向是指服务器返回一个重定向指令,告诉浏览器,使用新的路径再发起新的请求,新请求和原来的请求相互独立,互不影响,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。response.sendRedirect()的默认Location重定向用的是302状态码。在Servlet中可以使用ServletResponse的sendRedirect方法实现重定向;重定向会改变浏览器的地址栏。
  2. 转发是指服务器内部转发,当一个Servlet接收到一个请求时,他可以转发给另外一个Servlet处理,可以使用req.getRequestDispatcher("路径").forward(req, resp)实现转发,转发不会改变浏览器的地址栏。

八、实操-动手写一个Servlet程序。

        请参考另一篇博文:Java Web 编写第一个Servlet程序全过程_lilianggui的博客-CSDN博客


http://www.ppmy.cn/news/90129.html

相关文章

Ansys Zemax | 如何将高斯光整形为平顶光

概要 本文展示了如何设计光束整形器将激光器产生的高斯分布的光转换为平顶分布的光输出。&#xff08;联系我们获取文章附件&#xff09; 介绍 光束整形光学元件可以将入射光的光强分布转换为其他特定的分布输出。最常见的例子就是将激光器产生的高斯分布的光转换为平顶&#x…

基于Spring Boot的仿豆瓣平台

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 后端为了提高性能和用户体验&#xff0c;该系统平台使用Spring Boot集合Spring&#xff0c;Spring MVC和MyBatis框架做基础&#xff0c;并且集成Spring Data框架&#xff0c;MySQL做数据持久化&#xff0c;Redis缓存提高速度&…

中国人民大学与加拿大女王金融硕士国际班——全方位培养金融人才,你心动了吗

中国人民大学与加拿大女王大学中外合作办学的金融硕士项目有国际班&#xff08;使用英文授课&#xff0c;无工作经验要求&#xff09;和高管班&#xff08;使用中文授课&#xff0c;一般需在中国金融行业拥有至少7年以上的工作经验&#xff09;两个班次&#xff0c;属于滚动式录…

C++第六章:函数

函数 一、函数基础1.0 简介形参和实参形参列表函数的返回类型 1.1 局部对象自动对象局部静态对象 1.2 函数声明在头文件中进行函数声明 1.3 分离式编译编译和链接多个源文件 二、参数传递2.1 传值参数指针形参 2.2 传引用参数使用形参返回额外信息 2.3 const形参和实参指针或引…

(一)微服务中间键工作原理——nacos客户端服务注册原理说明及源码解读

前言 本节内容我们主要介绍一下中间键nacos的客户端服务注册原理及其源码解读&#xff0c;便于我们理解nacos作为服务注册中心的具体实现。在springcloud的微服务体系中&#xff0c;nacos客户端的注册是通过使用spring的监听机制ApplicationListener实现的。学习本节内容&…

《Spring Guides系列学习》guide21 - guide25

要想全面快速学习Spring的内容&#xff0c;最好的方法肯定是先去Spring官网去查阅文档&#xff0c;在Spring官网中找到了适合新手了解的官网Guides&#xff0c;一共68篇&#xff0c;打算全部过一遍&#xff0c;能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

认识SpringBoot

什么是Spring Spring是一个开源框架&#xff0c;2003年兴起的一个轻量级的java开发框架&#xff0c;作者&#xff1a;Rod Johnson Spring是为了解决企业级应用开发的复杂性而创建&#xff0c;简化开发 Spring是如何简化Java开发的 为降低Java开发的复杂性&#xff0c;Spring…

借军工经验开拓消费市场,三星显示收购eMagin浅析

前不久三星显示&#xff08;Samsung Display&#xff09;宣布&#xff0c;拟支付2.18亿美元收购微显示方案商eMagin全部普通股&#xff0c;收购完成后eMagin将并入三星显示&#xff0c;以加速XR显示业务发展。 据青亭网了解&#xff0c;eMagin成立于1996年&#xff0c;该公司多…