一,请阐述HTTP请求的结构:
- HTTP请求包含三部分:请求行、请求头、请求体
请求行–通常在HTTP的第一行,说明了发送的方式(get/post),发送的地址、和HTTP的版本号。
请求头–说明了,从浏览器到服务器发送到辅助信息。
Accept-Language:zh-CN 说明浏览器优先使用中文
User-Agent:代表了用户的使用环境(判断用户使用的是手机还会电脑进行的访问,然后根据浏览器的规格不停进行不同的展现)
Content-Type:说明了提交的表单的格式
请求体–由浏览器向服务器发送的真实数据,请求题中,数据使用键值对的形式“键”和“值”之间使用“=”连接。多个键值对之间使用“&”进行分隔。(请求体,只有在post请求中才会存在,get请求中是没有请求体这一项的)请求体会被附加在url 后面发送到服务器。
- 响应–有服务器返回给浏览器的结果
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声明周期是什么?
- 装载–java应用程序启动的时候,tomcat会扫描web.xml文件,得知当前有哪些servlet.(装载时并不会实例化Servlet)(创建时java层面的对象创建)
- 创建–当 url 第一次访问servlet地址的时候进行创建。同时执行构造函数。
- 初始化–servlet在创建对象以后,马上执行init()初始化函数,对servlet进行初始化。(初始化,是servlet自身专门用于初始化servlet执行资源的方法)
- 提供服务–service()方法。
servlce()方法–对于发来的请求(无论是post/get),一律使用servlet方法接收处理。
如果将请求细化,service()方法下还可以细化为doGet()/doPost()方法。doGet()–只处理get请求,
doPost()–只处理post请求。 - 销毁–在web应用重启或关闭时使用destory()方法将servlet的资源彻底销毁。
七,请求转发与响应重定向之间的区别:
javaweb中有两种资源跳转的方式:
- 请求转发–是服务器跳转,只会产生一次请求。会将请求原封不动的转发给下一个请求。(服务器跳转)
- 语法:request.getRequestDispatcher().forward();
- 执行过程:浏览器向tomcat发送一个请求–》tomcat收到请求后,使用对应servlet对请求进行处理–》并在处理完后执行request.getRequestDispatcher().forward();–》把请求原封不动派发给另一个servlet–》servlet对请求进行处理后,产生响应对象–》通过tomcat把对应响应结果发送给浏览器–》浏览器看到最终响应结果(全局有且只有1个请求,且资源的跳转是在服务器内部产生的,浏览器感觉不到)
- 地址栏:请求转发只会显示唯一请求的url
- 响应重定向:是浏览器端的跳转,会产生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的区别
-
PreparedStatement是预编译的SQL语句,效率高于Statement。尤其执行复杂SQL语句或频繁执行某一SQL时,执行效率优势更明显。
-
PreparedStatement是支持参数化操作的,相比于Statement使用字符串连接阻止SQL语句更加灵活。可读性更好
-
PreparedStatement可以防止SQL注入,安全性高于Statement
2. 请说明JDBC使用步骤:
-
加载JDBC驱动
-
创建于数据库的链接(Connection)
-
创建命令(PreparedStatement/Statement)
-
对于查询的处理结果,要使用ResultSet对象进行接收,并通过遍历将结果进行处理。
-
关闭数据库连接