Daily notes--2018.6.6-2018.6.7


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()方法。


区别:

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中,保存的对象对于每个信息资源是共享的。地址栏中的地址不会发生改变


上图所示的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请求重定向到登录页面,让用户登录以后再访问。地址栏中的地址发生改变


上图所示的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),无论是输入还是输出,都是直接对字符进行处理。


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


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


2.JDBC

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

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

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


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


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

事务具有ACID四个特性:

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


猜你喜欢

转载自blog.csdn.net/Ontheroad_/article/details/80599482