zoukankan      html  css  js  c++  java
  • JavaWeb系列之:Servlet

    一,什么是Servlet

    Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过 请求-响应 编程模型来访问这个在服务器内存里的Servlet程序。

    (Servlet可以指任何实现了Servlet接口的类。)

    二,编写一个Serlvet的步骤

    1,创建普通Java类,并继承HttpServlet(该类实现了Serlvet接口)

    2,重写service方法

    3,在web.xml中配置servlet

    三,运行流程

      浏览器发送请求到服务器,服务器根据请求URL地址中的URI信息在webapps目录下找到对应的项目文件夹,然后在web.xml中检索对应的servlet,找到后调用并执行Servlet。

    url:http://localhost:8080/project/user  -----> 服务器地址:端口号 / webapps下的文件夹名称(虚拟项目名) / 要执行的servlet的url-parten

    四,Servlet生命周期

    1,从第一次调用到服务器关闭

    2,如果在web.xml配置了 <load-on-startup> 1</load-on -startup>,生命周期为从服务器启动到服务器关闭。(服务器启动即初始化Servlet)

    注意:

      init()方法:Servlet初始化方法,在Servlet第一次加载进内存时执行

      destory()方法:Servlet销毁方法,服务器关闭时执行。

    五,Servlet中的方法的区别

    1,service():

      可以处理get/post请求,如果servlet中同时有service(),doGet(),doPost()方法,优先执行service()方法。

    2,doGet():

      处理get方式的请求

    3,doPost():

      处理post方式的请求

    注意:

      如果在重写的service方法中调用了父类的service方法(super.service(arg0,arg1)),那么service方法处理完后,会再次根据请求方式相应的调用doGet , doPost方法。(一般情况下,不在重写的service中调用父类的service方法的,避免出现405错误。)

     六,request对象

    服务器接收到浏览器请求后,会创建一个Request对象,对象中存储了此次请求相关的请求数据。服务器(tomcat)在调用Servlet时会将创建的Request对象作为实参传递给Servlet的方法,比如:service方法。

    注意:

      request对象中封装了当前请求的所有请求信息

      request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。

    获取数据:

    1,获取请求头数据(键值对)

      String mehtod = request.getMethod();//获取请求方法

      String url = req.getRequestURL();//获取请求URL

      String uri = req.getRequestURI();//获取URI

      String h = req.getScheme();//获取协议

    2,获取请求行数据

      String value = req.getHeader("user-agent");//获取指定的请求行信息

      Enumeration e = req.getHeaderName(); //获取所有的请求行的键的枚举

      while(e.hasMoreElements()){

        System.out.println(e.nextElement());

      }

    3,获取用户数据

      String name = req.getParameter("username");//获取指定的用户数据

      req.getParameterNames();//获取所有用户数据的键的枚举

    七,response对象:

    服务器在调用指定的Servlet进行请求处理时,会给Servlet的方法传递两个实参 request,response。其中request中封装了请求相关的请求数据,response是用来进行响应的对象

    八,ServletContext对象

    1,问题:

      Request解决了一次请求内的数据共享问题,session解决了用户不同请求的数据共享问题,那么不同的用户的数据共享如何处理?(比如每个用户都可以看到网站的访问量),

    2,解决:使用ServletContex对象。

    3,原理:

      ServletContext对象由服务器创建,一个项目只有一个对象。不管在项目的任意位置进行获取,得到的都是同一个对象,那么不同用户发起的请求时,获取到的也就是同一个对象了,该对象由用户共同拥有。由服务器进行创建。

    生命周期:服务器启动到服务器关闭

    4,作用域:项目内

    5,如何使用:

      获取ServletContext对象

        ServletContext sc = this.getServletContext();方法一

        ServletContext sc  = req.getSession().getServletContext();//方法二

      使用ServletContext对象完成数据共享

        sc.setAttribute("name","yaming");//数据存储

        String name = sc.getAttrubitu("name");//数据获取

    6,ServletContext的其他功能 

      6.1,获取web.xml中的全局配置

        <context-param>

          <param-name>name</param-name>

          <param-value>yaming</param-value>

        </context-param>

        String name = sc.getInitParameter("name");

      6.2,获取webroot下项目资源流对象

          InputStream is = sc.getResourceAsStream("/doc/1.txt");

      6.3,获取webroot下资源绝对路径

        String path = sc.getRealPath("/doc/1.txt");//获取的路径为项目根目录,参数为项目根目录中的路径。

    7,实现计数器

    ServletContext sc = this.getServletContext();

    if(sc.getAttribute("name") != null){

      int nums = sc.getAttribute("nums");

      nums+=1;

      sc.setAttribute("nums",nums);

    }else{

      sc.setAttribute("nums",1);

    }

  • 相关阅读:
    将Ubuntu18.04安装到U盘,实现即插即用
    小技巧之 前端自适应
    web笔记之 环境搭建
    C++学习笔记之 单例模式
    推荐一款Markdown编辑器:typora
    C++学习笔记之 类和对象
    C++学习笔记之 函数
    C++学习笔记之 内联函数
    C++学习笔记之 引用
    C++学习笔记之 const
  • 原文地址:https://www.cnblogs.com/inspred/p/10885221.html
Copyright © 2011-2022 走看看