【03 Servlet 学习笔记】

一、Servlet

1.Servlet的介绍

在这里插入图片描述

2.Servlet动态资源案例

在这里插入图片描述

2.1 实现Servlet接口


import javax.servlet.*;
import java.io.IOException;

/**
 * Servlet 入门程序
 **/
public class StudentServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * 所有客户端请求都会经过service方法
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("This is My 第一个servlet入门案例");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

在这里插入图片描述
控制台:页面请求就会调用service方法
在这里插入图片描述

2.2 继承GenericServlet类

import javax.servlet.*;
import java.io.IOException;

/**
 * Servlet 入门程序
 **/
public class StudentServlet extends GenericServlet {

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        System.out.println("service() running");
    }
}

web.xml配置与上述相同

2.3 继承HttpServlet类


import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Servlet 入门程序
 **/
public class StudentServlet extends HttpServlet {

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

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

3.Servlet执行过程

在这里插入图片描述

4.Servlet关系视图

在这里插入图片描述

5.Servlet生命周期

在这里插入图片描述


import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class StudentServlet extends HttpServlet {

    /**
     * 对象创建的过程,对象只创建一次
     **/
    @Override
    public void init() throws ServletException {
        System.out.println("对象创建并初始化成功");
    }
    /**
     * 对象服务的过程
     **/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("接收到了客户端请求");
    }

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

    /**
     * 对象销毁的过程
     **/
    @Override
    public void destroy() {
        System.out.println("对象销毁了");
    }


}

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

6.Servlet线程安全(线程不安全)

在这里插入图片描述


import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 线程安全测试
 **/
public class StudentServlet extends HttpServlet {
    //1. 定义一个用户成员变量
    private String username;

    @Override
    public void init() throws ServletException {
        System.out.println("对象创建并初始化成功");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决线程安全问题,1.第一种将成员变量变为局部变量,
        //String username=null;
        //2.同步代码块synchronized()
        synchronized (this) {
            //2.获取用户名
            username = req.getParameter("username");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //3.将用户名响应给浏览器
            PrintWriter pw = resp.getWriter();
            pw.println("welcome" + username);
            pw.close();

        }
    }

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

    /**
     * 对象销毁的过程
     **/
    @Override
    public void destroy() {
        System.out.println("对象销毁了");
    }


}

7.Servlet不同的映射方式

在这里插入图片描述

7.1 指定具体名称

在这里插入图片描述

7.2 /开头 +通配符的方式

在这里插入图片描述
成功:
在这里插入图片描述

7.3 通配符+固定格式结尾的方式

在这里插入图片描述
成功:
在这里插入图片描述

8.Servlet多路径映射

使用场景:
在这里插入图片描述


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 多路径映射
 */
public class DemoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.定义商品金额
        int money=1000;

        //2.获取访问资源路径

        String path = req.getRequestURI();
        path = path.substring(path.lastIndexOf("/"));

        //3.条件判断
        if ("/vip".equals(path)){
            System.out.println("商品原价为"+money+"优惠后价格:"+(money*0.9));
        }else if ("/vvip".equals(path)){
            System.out.println("商品原价为"+money+"优惠后价格:"+(money*0.5));
        }else {
            System.out.println("商品价格为"+money);
        }


    }

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

在这里插入图片描述
结果:
+

9.Servlet创建时机

在这里插入图片描述
当为加载时创建时,不访问但是对象已经创建成功
在这里插入图片描述

在这里插入图片描述

10. 默认的Servlet

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝阔落的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值