【Servlet 学习笔记】

Servlet 笔记记录

  • 一、Servlet
    • 1.Servlet的介绍
    • 2.Servlet动态资源案例
      • 2.1 实现Servlet接口
      • 2.2 继承GenericServlet接口
      • 2.3 继承HttpServlet接口
    • 3.Servlet执行过程
    • 4.Servlet关系视图
    • 5.Servlet生命周期
    • 6.Servlet线程安全(线程不安全)
    • 7.Servlet不同的映射方式
      • 7.1 指定具体名称
      • 7.2 /开头 +通配符的方式
      • 7.3 通配符+固定格式结尾的方式
    • 8.Servlet多路径映射
    • 9.Servlet创建时机
    • 10. 默认的Servlet

一、Servlet

1.Servlet的介绍

【Servlet 学习笔记】_第1张图片

2.Servlet动态资源案例

【Servlet 学习笔记】_第2张图片

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() {

    }
}

【Servlet 学习笔记】_第3张图片
控制台:页面请求就会调用service方法
【Servlet 学习笔记】_第4张图片

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执行过程

【Servlet 学习笔记】_第5张图片

4.Servlet关系视图

【Servlet 学习笔记】_第6张图片

5.Servlet生命周期

【Servlet 学习笔记】_第7张图片


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("对象销毁了");
    }


}

【Servlet 学习笔记】_第8张图片
【Servlet 学习笔记】_第9张图片

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

【Servlet 学习笔记】_第10张图片


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不同的映射方式

【Servlet 学习笔记】_第11张图片

7.1 指定具体名称

【Servlet 学习笔记】_第12张图片

7.2 /开头 +通配符的方式

【Servlet 学习笔记】_第13张图片
成功:
【Servlet 学习笔记】_第14张图片

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

【Servlet 学习笔记】_第15张图片
成功:
【Servlet 学习笔记】_第16张图片

8.Servlet多路径映射

使用场景:
【Servlet 学习笔记】_第17张图片


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);
    }
}

【Servlet 学习笔记】_第18张图片
结果:
【Servlet 学习笔记】_第19张图片

9.Servlet创建时机

【Servlet 学习笔记】_第20张图片
当为加载时创建时,不访问但是对象已经创建成功
【Servlet 学习笔记】_第21张图片

【Servlet 学习笔记】_第22张图片

10. 默认的Servlet

【Servlet 学习笔记】_第23张图片

你可能感兴趣的:(JavaWeb,servlet,学习,java)