java web----servlet概念

servlet概念

  狭义的Servlet 是指Java 语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的(servlet通俗理解就是所有实现了servlet接口的实现类,程序员自己写了类继承了HTTPServlet,而HttpServlet继承了这个servlet接口,实现了这个接口,所有支持servlet标准的容器(服务器),就可以认识和处理我们写了servlet类了),一般情况下,人们将Servlet理解为后者。
  Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet 只用来扩展基于HTTP协议的Web服务器 

特点

  • Servlet的运行必须要支持Servlet标准的Web容器,像Tomcat、Jboss、Weblogic、WebSphere、Jetty等都支持。
  • Servlet的实现遵循了服务器能够识别的规则,也就是服务器会自动的根据请求调用对应的servlet进行请求处理。
  • 简单方便,可移植性强

运行流程

  • 浏览器发送请求到服务器,服务器根据请求URL地址中的URI信息在webapps目录下找到对应的项目文件夹,然后在web.xml中检索对应的servlet类(找到继承了servlet接口的类),通过反射实例化这个类。调用service方法,通过service方法来调用doget、dopost方法(注意,这个其他的方法,都是通过service方法来调用的,因为tomcat默认只会调用service方法)

Servlet生命周期

1、生命周期(默认)

  当第一次servlet(类)被实例化加载到内存之后(默认第一次请求到来,才加载到内存),一直到服务器关闭

2、生命周期(配置)

  在web.xml中设置了load-on-startup

<servlet>
        <servlet-name>ServletDemo</servlet-name>
        <servlet-class>com.zy.servlet.ServletDemo</servlet-class>
        <load-on-startup>1</load-on-startup>  //设置随服务器启动,就将servlet加载到内存,数字越小,越优先加载到内存中
</servlet>
<servlet-mapping>
        <servlet-name>ServletDemo</servlet-name>
        <url-pattern>/my</url-pattern>
</servlet-mapping>
  • 1.加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet 
  • 2.创建:通过调用Servlet的构造函数来创建一个Servlet实例
  • 3.初始化:通过调用Servlet的init()方法来完成初始化工作,这个方法是在Servlet已经被创建,但在向客户端提供服务之前调用。(只初始化一次)
  • 4.处理客户请求:Servlet创建后就可以处理请求,当有新的客户端请求时,Web容器都会创建一个新的线程(在并发编程下servlet是线程不安全的)来处理该请求。接着调用Servlet的Service()方法来响应客户端请求(Servic方法中根据请求的method属性来调用doGet()和doPost()) 
  • 5.卸载:容器在卸载Servlet之前需要调用destroy()方法,让Servlet释放其占用的资源。

Servlet使用

请求的数据如果出现乱码

请求中文乱码解决:
使用公共配置
    get方式:
        步骤一:req.setcharacterEncoding("utf-8");
        步骤二:
              在tomcat的目录下的conf目录中修改server.xml文件:在Connector标签中增加属性<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true"/>  //多加了一个useBodyEncodingForURI="true";
              或者参考:https://www.jb51.net/article/145741.htm
    post方式:
        req.setCharacterEncoding("utf-8");

  

原文地址:https://www.cnblogs.com/yanxiaoge/p/13803166.html