java Servlet 和 Webx

Java Servlet,Java的服务器端小程序。这个容易让我们想起applet,实际上servlet和applet有很多共同之处,首先,它们是非独立的Java应用程序,不能由用户或者程序员来调用,而是由容器进行管理。不同的是,applet是有图形化界面的,实际它继承于java.awt.Panel类,因此它有Panel的方法,常常需要重写的paint方法,也是来自Container,另外applet是运行在客户端浏览器中。而Servlet没有图形化界面,它存在于服务器的Servlet容器中,运行在服务器端。


Servlet被编写成字节码,动态加载到支持Java的服务器中。所谓Servlet容器,又说Servlet引擎,用来包容和管理Servlet,是服务器的一部分,用来在发送和响应请求的时候提供一些服务,包含网络服务,解码,格式化等等。

 

而,从用户发送请求到获取信息的过程一般是这样,首先客户端浏览器发送一个HTTP请求,这个请求是符合HTTP规范的,便于服务器端对请求进行解析和处理,请求到达服务器,服务器将请求分发给Servlet容器,由Servlet容器来加载对应的Servlet实例,Servlet实例获取客户端请求,进行相应的处理和响应,Servlet容器负责将HTTP响应正确送出,并到达客户端。此过程如下图:

 

那么,现在我们来分析一下这整个过程,并看一看Webx框架中,是如何处理的

 

1.应该使用哪一个Servlet实例来处理?

 

(服务器将请求分发给Servlet容器,由Servlet容器来加载对应的Servlet实例)

首先拿到一个URL,服务器会根据URL选择对应的Web应用,这部分URL被成为Context Path;然后在对应的Web应用中,会在web.xml文件中去查找对应的Servlet,经过这个过程服务器从一个请求,可以决定加载哪一个Servlet实例来处理这个请求。在web.xml中通过配置servlet-mapping来配置Servlet,这部分URL被成为Servlet Path

 

而在Webx框架中,使用WebxControllerServlet来处理

<servlet-name>WebxController</servlet-name>
        <servlet-class>com.alibaba.webx.WebxControllerServlet</servlet-class>

...

    <servlet-mapping>
        <servlet-name>WebxController</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>WebxController</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

...

 

2.Servlet生命周期

Servlet实现了javax.servlet.Servlet接口,这个接口有五个方法

1)public ServletConfig getServletConfig(),是Servlet的配置信息,以名值对的形式提供初始化参数,包含Servlet名称,InitParameter, ServletContext(用于和其他Servlet通信)

2)public String getServletInfo(),获取Servlet的相关信息

3)public void init(ServletConfig config) throws ServletException

Servlet初始化。Servlet容器通过调用这个方法来实现Servlet的初始化,完成一些工作,例如建立数据库连接,获取配置信息等,init方法只被调用一次,在Servelt容器装入对应Servlet时执行。可以自己写init,可使用super.inti()来完成一些启动配置工作。

4)public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException

处理请求,在这之前要确保init()完成。Servlet容器将用户请求封装到ServletRequest中,Servlet从中获取信息,处理后,使用ServletResponse传回客户端。

HttpServlet对象的service()方法中,主要调用两个方法:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException;

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException;

还有doPut,doDelete,doOptions,doHead...,对应于不同的请求

5)public void destroy()

终止。当服务器不需要Servlet时或者重新装入新实例时,调用这个方法,释放资源,保存数据到持久设备等等。

destroy方法仅仅执行一次,在执行前,Servlet容器会看对应的service方法中是否还有线程执行,如果有会等待其执行完毕或者等待服务器设定的超时值到达。

destroy之后,该Servlet不再使用,Servlet容器不会将请求发送给这个对象。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值