Java Web+数据处理面试题

一,请阐述HTTP请求的结构:

  1. HTTP请求包含三部分:请求行、请求头、请求体
    请求行–通常在HTTP的第一行,说明了发送的方式(get/post),发送的地址、和HTTP的版本号。
    请求头–说明了,从浏览器到服务器发送到辅助信息。
    Accept-Language:zh-CN 说明浏览器优先使用中文
    User-Agent:代表了用户的使用环境(判断用户使用的是手机还会电脑进行的访问,然后根据浏览器的规格不停进行不同的展现)
    Content-Type:说明了提交的表单的格式
    请求体–由浏览器向服务器发送的真实数据,请求题中,数据使用键值对的形式“键”和“值”之间使用“=”连接。多个键值对之间使用“&”进行分隔。(请求体,只有在post请求中才会存在,get请求中是没有请求体这一项的)请求体会被附加在url 后面发送到服务器。
    在这里插入图片描述
  2. 响应–有服务器返回给浏览器的结果
    HTTP响应包含3部分内容:响应行、响应头、响应体。
    响应行–通常在响应的第一行,包含http版本、状态码、状态码的英文描述
    200–表示访问成功
    404–表示资源未找到
    500–代表的是服务器的内部错误。
    响应头–表述了返回数据的一些辅助信息,使用了哪种web服务器、
    Service–表示使用了哪种web服务器、
    Content-Type:表示数据返回给浏览器以后,浏览器采用什么样的方式进行处理呢。(text/html–表示把返回的数据解释成html进行显示)
    Date–响应数据产生的时间
    响应体–服务器向浏览器返回的真实数据,(html片段、二进制的内容、xml)

二,请说明Servlet执行流程?

  • 客户端向tomcat服务器发送http请求,包含servlet映射地址和要传递的参数–》tomcat解析每一个web.xml文件,找到与之匹配的url和对应的servlet name–》根据servlet name找到对应的servlet,并对这个servlet进行实例化和初始化–》tomcat执行servlet实例中的service()方法–》方法运行后把程序执行结果通过响应返回浏览器–》浏览器接收到这段代码后进行解释。
    在这里插入图片描述

三,Servlet实例化时机:
servlet默认情况下是第一次访问的时候实例化的,也可以通过web.xml配置loadon-startup,使其在十五期启动时候实例化

四,servlet在并发环境下是如何处理的?
servlet是基于单例多线程处理的并发情况。利用多线程技术提供web服务。

五,多线程处理的情况下,如何解决线程安全问题?
所有的线程,都共享一个servlet实例。所以我们在使用servlet时,不允许在servlet内创建,存在状态的变量和对象。因为这样会在并发访问时产生无法预期的结果。

六,Servlet声明周期是什么?

  1. 装载–java应用程序启动的时候,tomcat会扫描web.xml文件,得知当前有哪些servlet.(装载时并不会实例化Servlet)(创建时java层面的对象创建)
  2. 创建–当 url 第一次访问servlet地址的时候进行创建。同时执行构造函数。
  3. 初始化–servlet在创建对象以后,马上执行init()初始化函数,对servlet进行初始化。(初始化,是servlet自身专门用于初始化servlet执行资源的方法)
  4. 提供服务–service()方法。
    servlce()方法–对于发来的请求(无论是post/get),一律使用servlet方法接收处理。
    如果将请求细化,service()方法下还可以细化为doGet()/doPost()方法。doGet()–只处理get请求,
    doPost()–只处理post请求。
  5. 销毁–在web应用重启或关闭时使用destory()方法将servlet的资源彻底销毁。

七,请求转发与响应重定向之间的区别

javaweb中有两种资源跳转的方式:

  1. 请求转发–是服务器跳转,只会产生一次请求。会将请求原封不动的转发给下一个请求。(服务器跳转)
  • 语法:request.getRequestDispatcher().forward();
  • 执行过程:浏览器向tomcat发送一个请求–》tomcat收到请求后,使用对应servlet对请求进行处理–》并在处理完后执行request.getRequestDispatcher().forward();–》把请求原封不动派发给另一个servlet–》servlet对请求进行处理后,产生响应对象–》通过tomcat把对应响应结果发送给浏览器–》浏览器看到最终响应结果(全局有且只有1个请求,且资源的跳转是在服务器内部产生的,浏览器感觉不到)
  • 地址栏:请求转发只会显示唯一请求的url
    在这里插入图片描述
  1. 响应重定向:是浏览器端的跳转,会产生2次请求
  • 语法:response.sendRedirect()
  • 执行过程:浏览器向tomcat发起请求–》送达后servlet1调用response.sendRedirect()方法,返回一个响应通过tomcat发给浏览器,告诉浏览器创建一个新的请求–》浏览器接收到信息,发送第二个请求给servlet2–》servlet2对请求2进行处理,并把结果返回给浏览器–》浏览器显示结果
  • 地址栏:只会显示第二次响应的url
    在这里插入图片描述
    八,session的工作原理
    session–又被称为用户会话,与客户端浏览器窗口绑定的,且存储在服务器内部的用户数据。
    session 的工作原理是客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器的cookie中。只要浏览器没关闭,这个cookie是一直存在的。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。
    在这里插入图片描述
    八,JSP九大内置对象:
    在这里插入图片描述

数据处理

1. JDBC 中使用Statement 和 PreparedStatement的区别

  1. PreparedStatement是预编译的SQL语句,效率高于Statement。尤其执行复杂SQL语句或频繁执行某一SQL时,执行效率优势更明显。

  2. PreparedStatement是支持参数化操作的,相比于Statement使用字符串连接阻止SQL语句更加灵活。可读性更好

  3. PreparedStatement可以防止SQL注入,安全性高于Statement

2. 请说明JDBC使用步骤:

  1. 加载JDBC驱动

  2. 创建于数据库的链接(Connection)

  3. 创建命令(PreparedStatement/Statement)

  4. 对于查询的处理结果,要使用ResultSet对象进行接收,并通过遍历将结果进行处理。

  5. 关闭数据库连接

猜你喜欢

转载自blog.csdn.net/qq_36792120/article/details/114198225