• Java Servlet相关面试题


    一、什么是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样例

    1. public class HelloServlet extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    4. resp.setContentType("text/html;charset=utf-8");
    5. PrintWriter writer = resp.getWriter();
    6. writer.println("hello world!");
    7. }
    8. @Override
    9. public void init() throws ServletException {
    10. super.init();
    11. }
    12. @Override
    13. public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
    14. super.service(req, res);
    15. }
    16. @Override
    17. public void destroy() {
    18. super.destroy();
    19. }
    20. }
    1. 初始化:默认情况下,服务器会在第一次访问时创建对应的Servlet,如果需要在服务器启动时创建Servlet,需要在web.xml配置文件中配置load-on-startup参数,如0,数值越小,越先被启动。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在服务启动时创建,如:

    1. <servlet>
    2. <servlet-name>helloservlet-name>
    3. <servlet-class>com.llg.servlet.HelloServletservlet-class>
    4. <load-on-startup>0load-on-startup>
    5. 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博客

  • 相关阅读:
    Docker----harbor服务
    01背包(换汤不换药)
    Java类的初始化过程
    广告业务存储神器:华为云GaussDB(for Redis)
    解决Java时间戳转换成时间之后一直显示1970年的原因
    Paper Reading:《Consistent-Teacher: 减少半监督目标检测中不一致的伪目标》
    kubernetes架构及核心组件简单介绍
    【ArcGIS Pro二次开发】(77):ArcGIS Pro中图层的获取与解析
    ref的使用
    vcenter server (部署较大服务器)
  • 原文地址:https://blog.csdn.net/lilianggui/article/details/130859320