JavaWeb基础-Servlet

本文围绕Java Servlet展开,介绍了MVC模式,将前端页面展现与后端业务分离。阐述了Servlet的三种实现方式、三种请求处理方式,还讲解了Servlet的体系结构、加载流程(懒加载和勤加载)、生命周期(加载、初始化、服务、销毁),以及在Servlet中使用内置对象。

MVC

MVC模式中、model是指业务模型、View是指用户界面、Controller则是指控制器、使用MVC目的是将M和V的实现代码分离、从而使同一个程序可以使用不同的表现形式。用于把前端页面的展现和后端业务分离

Mode业务型

对数据库的操作包含两大包内容

bean 对数据库表的模拟

dao 数据的增删改查操作

View用户界面

也叫视图 程序和用户交互的接口 相当于服务员 实现厨师和餐客之间的信息交流

Controller控制器

用于进行用户的交互 接受用户的请求 并对用户的请求做出响应

控制器中接受用户与界面交互时传过来的数据 根据数据业务逻辑来执行服务的调用 更新业务数据模型的状态 使得模型和实体分离

servlet概述(Controller)

Web容器、Http服务器和Servlet容器
HTTP 服务器负责接收用户请求和对用户的请求做出响应,主要的作用是解析。

Servlet 容器负责加载Servlet Class,并实现对它的管理。

Web 容器其实就是 HTTP 服务器 + Servlet 容器,因为单单 Servlet 容器没有解析 HTTP 请求、通信等相关功能。所以把 Tomcat、Jetty 等实现包含了 HTTP 服务器和 Servlet 容器的功能,称之为 Web 容器。

servlet三种实现方式

实现Servlet 接口
// Servlet的第一种实现方式
// 1、实现Servlet 接口
public class FirstController implements Servlet {

    public FirstController() {
        System.out.println("FirstController对象被创建了!");
    }

    static {
        System.out.println("FirstController类被加载了");
    }

    private ServletConfig servletConfig;

    //2、重写五个方法
    //初始化方法 默认在第一次请求时加载 且只加载一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("FirstController这个Servlet被加载了!");
        this.servletConfig = servletConfig;
    }

    //获得servletConfig对象
    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    //服务方法 每次请求都会执行 Tomcat会传递过来request response对象
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("每次请求其实执行的都是这个方法");
    }

    //获取到当前Servlet介绍
    @Override
    public String getServletInfo() {
        return "我是FirstController";
    }

    //销毁方法 在服务器关闭时会执行
    @Override
    public void destroy() {
        System.out.println("FirstController被销毁了");
    }
}
继承GenericServlet
// 注解实现
// 3、注册Servlet
@WebServlet("/second")
//1、继承GenericServlet
public class SecondController extends GenericServlet {
    // 2、实现方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("我是SecondServlet方法");
        servletRequest.getRequestDispatcher("index.jsp").forward(servletRequest, servletResponse);

    }
}
继承HttpServlet*
该方式只能处理HTTP协议
// Servlet的第三种实现方式 一般都使用这种方式 只能处理HTTP协议
//3、注解  注册Servlet
@WebServlet("/third")
//1、继承HttpServlet
public class ThirdController extends HttpServlet {
    //重写Service方法 request和response是由Tomcat传递过来的
//    @Override
//    protected void service(HttpServletRequest request, HttpServletResponse response)
//            throws ServletException, IOException {
//        System.out.println("ThirdController被调用了");
//
//        //设置响应编码集 必须在out对象产生之前
//        response.setCharacterEncoding("utf-8");
//
//        PrintWriter out = response.getWriter();
//        out.println("<html>");
//        out.println("<head>");
//        out.println("<title>Servlet输出的内容</title>");
//        out.println("</head>");
//        out.println("<body>");
//        int i = (int) (Math.random() * 100 + 1);
//        out.println("<h3>随机数是" + i + "<h3>");
//        out.println("</body>");
//        out.println("</html>");
//    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是doGet请求");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("我是doPost请求");
    }

三种请求处理方式

service

可以处理任何形式的请求

doGet

只能处理 get 请求

doPost

post请求只有四种 目前只接触到表单发送的 其余都是get请求

只能处理 post 请求

servlet体系结构

在这里插入图片描述

servlet加载流程及两种加载方式

加载流程

在这里插入图片描述在这里插入图片描述

两种加载方式

加载流程
懒加载(默认)

servlet默认是懒加载模式 当用户第一次请求servlet时 servlet容器会加载 Servelt Class 产生这个类对象 调用初始化 **inti()**方法 调用service()方法

在后续的请求中 servlet容器不会再重复进行对象初始化了 直接会调用servlce方法

勤加载

勤加载方式 与懒加载不同的是 勤加载方式是在用户请求servlet 之前 服务器启动的时候 就开始加载 Servelt Class 其余和懒加载模式相同

Servlet生命周期*

servet容器的特点是 在所有浏览器中都用的是这个请求 即同一个请求在所有浏览器出来的结构相同

在这里插入图片描述

加载

分为懒加载和勤加载 其实就是servlet容器创建Servlet Class 的过程

初始化

servlet 容器会在浏览器第一次访问Servlet 或服务器启动时为该servlet 创建实例 服务器为Servlet创建实例后,会在第一时间调用init()方法,完成Servlet的初始化操作。注意这个init()方法在Servlet的一生中,只会被服务器调用一次。

服务

当Servlet容器接收到浏览器请求时,会去调用Servlet的service()方法来处理请求,而且每次请求的时候,服务器都会调用service()方法,并且创建新的ServletRequest和ServletResponse对象并传递给service()方法,所以该方法在Servlet的一生中会被调用多次。

销毁

当服务器关闭或者当前web应用被移出服务器时,Servlet会被销毁,在销毁之前,服务器会调用destroy()方法,可以把Servlet的“临终遗言“放在该方法中,例如把对某些资源的释放等代码放在destroy()方法中。

在servlet中使用内置对象

在这里插入图片描述

//在Servlet操纵九大内置对象
public class Test extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //servlet中不能调用pageContext对象
        //request   response 由tomcat提供
        //session
        HttpSession session = request.getSession();
        //out
        PrintWriter out = response.getWriter();
        //application
        ServletContext application = request.getServletContext();
        //config
        ServletConfig config = getServletConfig();
        //exception
        int i = 10 / 0;
        //page
        Object page = this;
    }
}
        ServletContext application = request.getServletContext();
        //config
        ServletConfig config = getServletConfig();
        //exception
        int i = 10 / 0;
        //page
        Object page = this;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值