Servlet与Jsp的学习(内含验证码的操作)

本文详细介绍了ServletContext对象的功能,包括获取MIME类型、共享数据以及获取文件服务器路径。接着讲解了会话技术,重点讨论了Cookie的创建、原理、注意事项和作用。此外,还探讨了JSP的基本概念、原理、脚本、内置对象以及Session的使用。最后,文章提到了EL表达式和JSTL标签在简化JSP开发中的作用,以及过滤器的配置和执行流程。
摘要由CSDN通过智能技术生成

1. ServletContext对象

1.1 概述

ServletContext 对象代表整个web应用,可以和程序的容器(服务器进行通信)。

1.2 获取该对象

  1. 通过Request对象获取
    • request.getServletContext()
  2. 通过HttpServlet获取(实际是他的父类实现了该方法)
    • this.getServletContext()

演示案例:

@WebServlet("/scd")
public class ServletContextDemo extends HttpServlet {
   

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext servletContext = req.getServletContext();
        ServletContext servletContext1 = this.getServletContext();
        System.out.println(servletContext);
        System.out.println(servletContext1);
        System.out.println(servletContext == servletContext1);
        //两种方式获取的是一个ServletContext对象
    }
}

1.3 功能

1. 获取MIME类型:
  • MIME 类型:在互联网通信过程中定义的一种文件数据类型
  • 格式:大数据类型/小数据类型 比如:text / html , image/jpeg
  • 获取:String getMimeType(String file):通过文件名(包含扩展名)获取MIME的值
    • 扩展名对应的MIME可以去tomcat — conf - web.xml中查看

演示案例:

@WebServlet("/scd2")
public class ServletContextDemo2 extends HttpServlet {
   

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext servletContext = req.getServletContext();
        //定义一个文件名
        String fileName = "index.html";
        //获取MIME
        String mimeType = servletContext.getMimeType(fileName);
        System.out.println(mimeType);
    }
}
2. 域对象:可以共享数据
  • 功能:所有域对象都有该功能

    • void setAttribute(String name,Object obj) : 存储数据
    • Object getAttitude(String name) : 通过键获取值
    • void removeAttribute(String name) : 通过键移除键值对
  • 作用域:

    最大范围,所有用户的所有数据

演示案例:定义两个Servlet,不经过转发获取数据

@WebServlet("/scd3")
public class ServletContextDemo3 extends HttpServlet {
   

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext servletContext = req.getServletContext();
        servletContext.setAttribute("info", "牛逼");
    }
}
@WebServlet("/scd4")
public class ServletContextDemo4 extends HttpServlet {
   

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext servletContext = req.getServletContext();
        Object info = servletContext.getAttribute("info");
        System.out.println(info);
    }
}
3. 获取文件的服务器真实存储路

演示案例:

  1. 分别在src,web,WEB-INF 下创建a.txt, b.txt , c.txt

image-20210122021628423

  1. 测试案例
@WebServlet("/scd6")
public class ServletContextDemo6 extends HttpServlet {
   

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
        ServletContext servletContext = req.getServletContext();
        //获取web目录下的资源
        String realPath = servletContext.getRealPath("/b.txt"); 
        System.out.println(realPath);

        //获取WEB-INF下的资源:到文件夹中找对应文件对比着写. 
        realPath = servletContext.getRealPath("/WEB-INF/c.txt");
        System.out.println(realPath);

        //src下的文件都会被放到WEB-INF下的classes路径中
        realPath = servletContext.getRealPath("/WEB-INF/classes/a.txt");
        System.out.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值