Java-Web基础与数据处理
1.请说明Servlet执行流程
一:Servlet执行流程
1、客户端向tomcat服务器发送http请求(该请求包含了访问servlet的映射地址和要传递的参数)
2、tomcat解析web应用程序的web.xml文件,找到与之匹配的url同时找到对应的servlet-name;
通过web.xml配置的servlet-name找到FirstServlet类,对该servlet类进行实例化和初始化
3、tomcat执行FirstServlet实例的service()方法(细分为doGet()和doPost()方法),执行其中的服务代码
4、service()方法执行完成之后,通过响应将内容返回给浏览器,浏览器接收到servlet生成的代码,并显示到浏览器
二:Servlet是什么时候被实例化的?
Servlet默认情况下是第一次访问的时候实例化的;也可以通过web.xml配置load-on-startup(0),使其在服务器启动的时候实例化。
三:Servlet在tomcat中有几个对象?
Servlet全局在tomcat中有且只有唯一的一个对象(在第一次访问时创建对象,之后就不再创建),tomcat并不会创建多个实例;
四:在并发情况下Servlet是如何处理的?
Servlet处理是基于单利多线程,利用多线程技术来提供web服务。
注意线程安全的问题:因为所有的线程都共享了一个Servlet的实例,因此在使用Servlet的时候,不允许在Servlet内创建存在状态的变量或者对象,否则在并发访问时出现无法预期的结果。
2.Servlet的5个生命周期
1、装载-web.xml:第一次启动装载web.xml,这时并不会创建servlet对象
2、创建-构造函数:对servlet类进行创建(new)
3、初始化-init():对servlet进程初始化
4、提供服务-service():重写service方法,service方法下面派生出doGet()、doPost()方法
5、销毁-destroy():web应用(tomcat)重启或关闭,servlet则会执行destroy()方法,销毁servlet对象
3.请求与响应的结构
一:请说明HTTP请求的结构
1、HTTP请求包含三个部分:请求行、请求头、请求体
二:请说明响应的结构
1、HTTP响应包含三个部分:响应行、响应头、响应体
4.说明请求转发与响应重定向的区别
一:请求转发
请求转发是服务器跳转,tomcat全局只会产生一次请求。
请求转发语句是:request.getRequestDispatcher("/direct/index").forward(request, response);
请求转发是在tomcat内部完成的:
二:响应重定向
重定向则是客户端浏览器端跳转,tomcat全局会产生两次请求;Servlet1和Servlet2接到的请求是完全不同的,因此两次请求之内的数据无法共享。
响应重定向语句是:response.sendRedirect("/servlet-advanced/direct/index");
原理:
5.请阐述Session的原理
一:session用户会话介绍
Session(用户会话)用于保存与“浏览器窗口”对应的数据。
Session的数据存储在tomcat服务器的内存中,具有时效性。
Session通过浏览器cookie的sessionId值提取用户数据。
二:session实现原理
浏览器向tomcat发送请求,tomcat发送该请求是全新的请求,在tomcat内存中开辟一个存储空间,并给其一个ID号(SessionId:7U809JP),在7U809JP的存储空间中设置name=张三 属性,tomcat处理完成后需返回响应,而SessionId:7U809JP会随着响应返回给浏览器,浏览器会将session存储在cookie中;
只要该cookie还在有效期内这个SessionId:7U809JP 会随着请求一并发送给tomcat,tomcat收到请求后通过sessionId查询到内存中有该值则将其返回。
6.JSP九大内置对象
&& request与response是成对出现的。
&& application(ServletContext) 可以存放全局的变量,因此可以实现用户之间的数据共享;它的声明声明周期与服务器的生命周期是一样的,服务器启动application对象被创建,服务器关闭application对象被销毁。
7.Statement和PreparedStatement的区别
一:区别
- PreparedStatement是预编译的sql语句,效率高于Statement
- PreparedStatement支持 ?号 操作符,相对于Statement更灵活
二:PreparedStatement介绍
1、PreparedStatement预编译statement是statement的子接口
2、PreparedStatement对sql进行参数化,预防sql注入攻击
3、PreparedStatement比statement执行效率更高
4、编码对比如下
使用statement编写的原始代码:
PreparedStatement预编译修改代码:
相关的类:HumanResourceApplication、Commad、PstmtQueryCommad
8.请说明JDBC使用步骤
1、加载JDBC驱动
Class.forName(driverName)
2、创建数据库连接(Connection)
Connection conn = DriverManager.getConnection(SQL URL, username, password)
3、创建命令(Statement/PreparedStatement)
Statement ps = conn.createStatement();
4、处理结果(ResultSet)
ResultSet rs = ps.executeQuery(sql);
5、关闭连接()
conn.close();