-
什么是JDBC?
JDBC(Java DataBase Connectivity),是一套面向对象的应用程序接口(API),制定了统一的访问各类关系数据库的标准接口,为各个数据库厂商提供了标准的实现。通过JDBC技术,开发人员可以用纯Java语言和标准的SQL语句编写完整的数据库应用程序,并且真正地实现了软件的跨平台性。
-
通常情况下使用JDBC完成以下操作:
①同数据库建立连接;
②向数据库发送SQL语句;
③处理从数据库返回的结果; - 驱动(Driver)在JDBC中的角色
jdbc本身是一套接口,驱动其实就是它的实现类,只有提供了驱动才能与对应的数据库建立连接的通道。驱动必须要提供java.sql包下面这些类的实现:Connection, Statement, PreparedStatement,CallableStatement, ResultSet和Driver。 - Class.forName()方法
Class.forName(xxx.xx.xx)的作用是初始化参数指定的类,并且返回此类对应的Class 对象,即要求JVM查找并加载指定的类。forName() + newinstance()
和new
的作用相当,如A a =(A) Class.forName ("pacage.A").newInstance()
这和A a =new A();
是一样的效果。
JDBC中使用class.forname()加载驱动。
-
PreparedStatement比Statement有什么优势?
PreparedStatements作为statement的子类,继承了statement的所有方法
- PreparedStatement是预编译的,性能会比Statement好
- PreparedStatement可以防止sql注入,安全性比Statement高
- PreparedStatements可以写动态参数化的查询,提高了代码的可扩展性与可维护性
数据库连接池是什么意思?
数据库连接的建立、关闭资源消耗巨大。
传统数据库访问方式:一次数据访问对应一个物理连接,每次操作数据库都要打开关闭该物理连接,系统性能严重受损。
解决方案:数据库连接池。系统初始运行时,主动建立足够足够的连接,组成一个池,每次应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接,使用完后,不再关闭,而是归还。什么是RMI?
- 定义:Remote Method Invocation,远程方法调用,是Java所特有的分布式计算技术。其基本原则就是把对象的使用和对象的创建相分离,它允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象的方法。
- 开发步骤:
①定义一个远程接口(远程接口必须继承接口,每个方法必须抛出远程异常,方法参数和方法返回值都必须是可序列化的)
②实现远程接口
③定义使用远程对象的客户程序
④产生远程访问对象的桩和框
⑤注册远程对象
⑥运行服务器和客户程序 - RMI体系结构
①存根和骨架层(Stub and Skeleton layer):这一层对程序员是透明的,它主要负责拦截客户端发出的方法调用请求,然后把请求重定向给远程的RMI服务。
②远程引用层(Remote Reference Layer):RMI体系结构的第二层用来解析客户端对服务端远程对象的引用。这一层解析并管理客户端对服务端远程对象的引用。连接是点到点的。
③传输层(Transport layer):这一层负责连接参与服务的两个JVM。这一层是建立在网络上机器间的TCP/IP连接之上的。它提供了基本的连接服务,还有一些防火墙穿透策略。 -
java.rmi.Naming
类
该类主要用于存储或获取远程对象的引用,参数是是URL格式的String。
bind
和rebind
方法注册对象,把对象与一个名字name绑定。比如,通过Naming.rebind("//localhost/MyServer", new ServerOperation());
将ServerOperation
对象赋给一个URI,让客户端可以通过这个URI访问该对象。其中bind
需要未绑定的地址,否则将会报错。 - 分布式垃圾回收(DGC)
当客户机创建(序列化)远程引用时,会在服务器端 DGC 上调用 dirty()。当客户机完成远程引用后,它会调用对应的 clean() 方法。 -
Marshalling
和demarshalling
Marshalling就是object->xml,把内存对象跨网络传递到另一台主机或者是持久化到存储,demarshalling是其反过程。
-
什么是Servlet?
servlet是基于java语言的web服务器端编程技术,运行在servlet容器中的java类,它能处理客户端的http请求并产生http响应。
- 体系结构:
Servlet类 ← GenericServlet类 ← HttpServlet类 ← MyServlet类(自己建的类) (←代表继承)
①GenericServlet类实现了Servlet和ServletConfig接口。实现了除了service()之外的其他方法,在创建Servlet对象时,可以继承GenericServlet类来简化程序的代码,但需要实现service()方法。
②HttpServlet类继承了GeneriServlet类。实际开发中,通常继承HttpServlet类,重写我们需要的doGet(),doPost()请求即可。 - 使用过程
①init()初试化Servlet
②service()相应Servlet请求
③destroy()销毁Servlet -
doGet
和doPOST
分别用于处理get和post请求。Get是路径传参,效率高,安全性差;POST是实体传参,效率低,安全性好。 - Servlet链(Servlet Chaining):是把一个Servlet的输出发送给另一个Servlet的方法,依次类推。链条上最后一个Servlet负责把响应发送给客户端。提供了将一个servlet的输出重定向为另一个servlet的输入的能力,这样就可以划分工作。
- 判断Servlet请求来源
request.getRemoteAddr();//ipaddr
request.getRemoteHost();//主机名
request.getRequestURL();//返回全路径
request.getRequestURI();//返回除去host(域名或者ip)部分的路径
request.getContextPath();//返回工程名部分,如果工程映射为/,此处返回则为空
request.getServletPath();//返回除去host和工程名部分的路径
- 什么是JSP
- jsp的9个内置对象
request:封装客户端的请求,其中包含来自GET或POST请求的参数;
response:封装服务器对客户端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装用户会话的对象;
application:封装服务器运行环境的对象;
out:输出服务器响应的输出流对象;
config:Web应用的配置对象;
page:JSP页面本身(相当于Java程序中的this);
exception:封装页面抛出异常的对象。
- jsp的4个作用域
page
代表与一个页面相关的对象和属性。
request
代表与Web客户机发出的一个请求相关的对象和属性。
session
代表与某个用户与服务器建立的一次会话相关的对象和属性。
application
代表与整个Web应用程序相关的对象和属性。
- jsp 和 servlet
JSP的本质就是Servlet,是Servlet的一种简化,jsp经编译后就变成了Servlet。
① jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
② Servlet中没有内置对象,Jsp中有内置对象
- session和cookie有什么区别?
- 区别:cookie保存在客户端浏览器中,而session保存在服务器上。
-
cookie
:实际上是一小段的文本信息。服务器还可以根据需要修改cookie的内容。
过程:客户端请求服务——>服务器向客户端浏览器颁发一个cookie——>客户端浏览器保存cookie——>客户端请求服务——>客户端发送请求地址和cookie——>服务器检查该cookie,从而判断用户的状态。
典型的应用如,将用户名和密码信息存入cookie中,下次登录时读取cookie内容能自动填入。 -
session
:另一种记录客户状态的机制。不同的是客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。类似于一个大号的map,里面的键存储的是用户的Session ID。一般Session ID是通过Cookie来传递的。但禁用cookie之后,也可以通过URL传值等方式获取ID从而使用session。
。
- HTTP请求和响应结构
- HTTP响应由三部分组成:状态行、响应头、响应正文:
状态行
:包括协议版本Version、状态码Status Code、回应短语;
响应头
:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;
响应正文
:就是响应的具体数据。 - HTTP请求由状态行、请求头、请求正文三部分组成:
状态行
:包括请求方式Method、资源路径URL、协议版本Version;
请求头
:包括一些访问的域名、用户***、Cookie等信息;
请求正文
:就是HTTP请求的数据。
HTTP隧道
有时候需要访问服务器除了80端口之外的其他端口,但是服务器上装有的防火墙软件 会阻止客户端访问除了80端口之外的其他端口,这个时候需要将访问其他端口的协议“包装”一下 变成访问80端口的http协议,这个就是http隧道。sendRedirect()和forward()方法有什么区别?
forward(转发):是服务器内部的跳转,浏览器的地址栏不会发生变化,同时可以把request和response传递给后一个请求。
sendRedirect(重定向):是浏览器方面的跳转,要发送两次请求,地址栏也会发生变化,同时request和response也会发生变化,重新生成新的对象。