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

}

原文地址:https://www.cnblogs.com/inspred/p/10885221.html