其他分享
首页 > 其他分享> > 初识servlet

初识servlet

作者:互联网

CGI

在服务端以进程方式对客户端请求进行处理,多进程方式进行

 

 

 

缺点:   对每一个客户端请求都需要启动一个进程运行程序,当用户数量增加时,服务端资源被大量占用

    由于开发人员对操作系统和进程的不深刻理解,导致经常产生一些错误

      进程与进程之间相互隔离,不同的CGI之间不能共享资源

FastCGI

对CGI模式的改进,采用pooling技术,事先将进程初始化后放到pool池中,一定程度改善性能,但仍然是基于进程运行,不能从根本解决问题

 

 

 

Servlet

1.概念

  1)全名Server Applet,称为服务端小程序,基于java语言编写;

  2)javaEE平台下的技术规范,定义如何处理客户端请求以及为客户端进行响应的技术,由服务器厂商实现;

  3)由于Web容器与应用服务器实现了Servlet标准,因此Servlet需运行在web容器与应用服务器,包括Tomcat容器也实现了该技术

2.技术特点

  使用单进程(tomcat)多线程(servlet)方式运行

 

 

 

3.在应用程序中的位置

  基于Web服务器和数据库之间

 

 

4.编写第一个servlet程序

 

1)记事本编写HelloServlet.java

 

//必须继承HttpServlet
public class HelloServlet extends HttpServlet{

    public void doGet(HttpServletRequest request,HttpServletResponse reponse) throws ServletException,IOException{


        PrintWriter pw=reponse.getWriter();
        //向客户端浏览器输出内容
        pw.println("<!DOCTYPE html>");
        pw.println("<html lang='en'>");
        pw.println("<head>");
        pw.println("<title>Title</title>");
        pw.println("</head>");
        pw.println("<body>");
        pw.println("<font color='#deb887'>HelloServlet!</font>");
        pw.println("</body>");
        pw.println("</html>");
        pw.flush();
        //关闭流对象
        pw.close();

    }

}

 

2)用命令行编译HelloServlet.java

 

3)创建web.xml

  web.xml是Web项目的部署描述文件,JavaWeb的配置文件,可在其配置servlet、filter等技术。Tomcat启动时会先解析该配置文件获取项目配置信息。

web.xml文件头信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
        
xsi:schemaLocation="http://xmlns.jcp.org/xml/
ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/webapp_4_0.xsd"
         version="4.0">
</web-app>

 

4)在web.xml中配置servlet

  配置servlet全名

        <!--配置servlet全名-->
        <servlet>
         <!--servlet别名-->
        <servlet-name>servlet1</servlet-name>
        <servlet-class>com.it.servlet.HelloServlet</servlet-class>
        </servlet>

  配置servlet的URL

        <!--配置servlet的URL-->
        <servlet-mapping>
        <!--将哪个servlet绑定URL-->
        <servlet-name>servlet1</servlet-name>
        <!--请求资源时所对应的URL-->
        <!--为与jsp做区分,可加'.do',也可不加-->
        <url-pattern>/hello.do</url-pattern>
        </servlet-mapping>

  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
            xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
            http://xmlns.jcp.org/xml/ns/javaee/webapp_4_0.xsd"
            version="4.0">

        <!--配置servlet全名-->
        <servlet>
         <!--servlet别名-->
        <servlet-name>servlet1</servlet-name>
        <servlet-class>com.it.servlet.HelloServlet</servlet-class>
        </servlet>

        <!--配置servlet的URL-->
        <servlet-mapping>
        <!--将哪个servlet绑定URL-->
        <servlet-name>servlet1</servlet-name>
        <!--请求资源时所对应的URL-->
        <!--为与jsp做区分,可加'.do',也可不加-->
        <url-pattern>/hello.do</url-pattern>
        </servlet-mapping>

</web-app>
5)部署servlet

  将servlet放到tomcat当中

  web工程目录结构:

 

 

 

 

 

 

 

 

启动tomcat

 Tomcat运行过程

 

 

1)当用户访问localhost:8080/test/HelloWord.do,请求被发送到Tomcat,被监听8080端口并处理HTTP/1.1协议的Connector获得;

2)Connector将请求交给它所在的Service的Engine处理,并等待Engine的回应;

3)Engine获得请求localhost:8080/test/HelloWord.do,匹配所有的虚拟主机Host

4)Engine匹配到名为localhost的Host虚拟主机来处理test/HelloWord.do请求(匹配不到时会交给默认Host处理)

5)匹配到的Context获得请求/HelloWord.do

6)构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用HelloWorld的doGet ()或doPost().执行业务逻辑、数据存储等程序。

7)Context把执行完之后的结果通过HttpServletResponse(处理响应)对象返回给Host

8)Host把HttpServletResponse返回给Engine

9)Engine把HttpServletResponse对象返回Connector

10)Connector把HttpServletResponse对象返回给客户Browser

 Servlet继承结构

 

 

 

 

 

 

 

 

 

 

Servlet接口

ServletConfig接口

 GenericServle抽象类

  GenericServlet是实现了Servlet接口的抽象类。在GenericServlet 中进一步的定义了Servlet接口的具体实现,其设计的目的是为了和 应用层协议解耦,在GenericServlet中包含一个Service抽象方法。

HttpServlet类

  继承自 GenericServlet,针对于处理 HTTP 协议的请求所定制。在 HttpServlet的service() 方法中已经把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse。 直接使用 HttpServletRequest 和 HttpServletResponse, 不再需要强转。实际开发中, 直接继承 HttpServlet, 并根据请求方式复写 doXxx() 方法即可。

Servlet生命周期

Servlet生命周期由Tomcat容器管理,(由Tomcat实例化),经以下三个阶段:

单例模式:只实例化一次

  init():客户端第一次请求Servlet时,容器(并不是启动时就实例化Servlet)会实例化该Servlet,然后调用init(),只调用一次

  service():在第一次执行service方法处理请求完毕后,容器不会销毁该Servlet,而是做缓存处理,当客户端浏览器再次请求该Servlet时,容器会从缓存中直接找到该Servlet对象,并在新的进程中执行Service方法

  destroy():当容器在销毁Servlet之前会调用一次destroy方法

Servlet处理请求的原理

 Servlet的作用

以上图片来源:https://www.itbaizhan.com/

标签:web,请求,servlet,方法,初识,Servlet,pw
来源: https://www.cnblogs.com/chaplu/p/16044702.html