欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Daily notes--2018.6.6-2018.6.7

程序员文章站 2022-03-08 22:37:04
...


Daily notes--2018.6.6

1.什么是servlet?

可以从两方面去看servlet:

a、API:有一个接口servlet,它是servlet规范中定义的用来处理客户端请求的程序需要实现的*接口。

b、组件:服务器端用来处理客户端请求的组件,需要在web.xml文件中进行配置

2.servlet的生命周期,并说出servlet和CGI的区别?

//what is CGI ?

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

这个生存期由javax.servlet.servlet接口中的init、servlet、destroy方法表达。

web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service( )方法实现。

根据请求的不同调用不同的do**()方法。结束服务,web容器调用servlet的destroy()方法。

Daily notes--2018.6.6-2018.6.7

区别:

Servlet处于服务器进程中,它通过多线程运行service()方法,一个实例可以服务于多个请求,并且实例一般不会被销毁;而CGI对每个请求都产生一个新的进程,服务完成后就销毁,所有效率低于servlet。

3.servlet的基本架构

public class ServletName extends HttpServlet {
    
    @Override
    public void init() throws ServletException {
        super.init();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    public void destroy() {
        super.destroy();
    }
}

4.Forward和Redirect的区别

Forward(直接转发):客户端和浏览器只发出一次请求,servlet、HTML、jsp或其他信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。地址栏中的地址不会发生改变

Daily notes--2018.6.6-2018.6.7

上图所示的forward请求的过程如下:

1.浏览器向Servlet1发送访问请求

2.Servlet1调用forward( )方法,在服务器端将请求转发给Servlet2。

3.最终由Servlet2做出响应

直接转发方式用的更多一些,一般说的请求转发指的就是直接转发方式。Web应用程序大多会有一个控制器。由控制器来控制请求应该转发给哪个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式。

实例代码:

//servlet里处理get请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求转发器对象,该转发器的指向通过getRequestDispatcher()的参数设置
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("资源的URL");
        //调用forward()方法,转发请求
        requestDispatcher.forward(request,response);
    }

javax.servlet.RequestDispatcher接口是请求转发器必须实现的接口,由web容器为Servlet提供实现该接口对象,通过调用该接口的forward( )方法达到请求转发的目的。


Redirect(间接转发):重定向。实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。地址栏中的地址发生改变

Daily notes--2018.6.6-2018.6.7

上图所示的Redirect转发请求的过程如下:

1.浏览器向Servlet1发送访问请求

2.Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2

3.浏览器向servlet2发出请求

4.最终由servlet2做出响应。


在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向访问指定的URL,代码如下:

//servlet里处理get请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //请求重定向到另外的资源
        response.sendRedirect("资源的URL");
    }


问:Forward和Redirect的原理及区别是什么?

答:Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。

对于直接方式,客户端和浏览器只发出一次请求,servlet、HTML、jsp或其他信息资源,由第二个信息资源响应该请求,两个信息资源共享同一个request对象。

对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。


Daily notes--2018.6.7

1.I/O流

按照流所操作的基本数据单元来分,可以将流分为字节流和字符流。

字节流:所操作的基本数据单元是8位的字节(byte),无论是输入还是输出,都是直接对字节进行处理。

字符流:所操作的基本数据单元是16位的字符(Unicode),无论是输入还是输出,都是直接对字符进行处理。

Daily notes--2018.6.6-2018.6.7

对象的序列化(Serialize)是指将对象数据写到一个输出流中的过程。对象的反序列化是指从一个输入流中读取一个对象。

Daily notes--2018.6.6-2018.6.7

在java中,如果需要将某个对象保存到磁盘或通过网络传输,则该对象必须是可以序列化的(Serializable)。一个类的对象是可序列化的,则该类必须实现java.lang包下的Serializable接口或Externalizable接口。


2.JDBC

DriverManager是数据库驱动管理类,用于管理一组JDBC驱动程序的基本服务。

Connection接口用于连接数据库。每个Connection对象代表一个数据库连接会话。

Statement接口一般用于执行SQL语句,在JDBC中要执行SQL查询语句有三种方式:一般查询(Statement)、参数查询(PreparedStatement)、和存储过程(CallableStatement)。

Daily notes--2018.6.6-2018.6.7

ResultSet接口用于封装结果集对象,该对象包含访问查询结果的方法。


事务是由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。

事务具有ACID四个特性:

  • Atomicity原子性:事务是应用中最小的执行单位,事务中的全部操作要么全部执行,要么都不执行。
  • Consistency一致性:事务执行之前和执行之后,数据库都必须处于一致性状态,即从执行前的一个一致状态变为另一个一致性的状态。
  • Isolation隔离性:各个事务的执行互不干扰。并发的事务之间不能看到对方的中间状态,并发事务互不影响。
  • Durability持久性:事务一旦提交,对数据库所做的任何改变都会永久的记录到存储器中,即保存到物理数据库中,不被丢失。
事务处理过程中会涉及到事务的提交、中止和回滚三个概念:
  • “事务提交”是指成功执行完毕事务,事务提交又分为两种方式:显式提交(commit)和自动提交(正常执行完毕);
  • “事务中止”是指未能成功完成事务,执行中断。
  • “事务回滚”对于中止事务所造成的变更需要进行撤销处理,即事务所做的修改全部失效,数据库返回到事务执行之前的状态。事务回滚有两种方式:显式方式(rollback)和自动回滚(系统错误或强行退出)


相关标签: java面试题