Servlet开发入门

Servlet开发入门

一个java类只要继承了GenericServlet或HttpServlet就是一个Servlet。

继承GenericServlet类的Servlet


package servlet;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ServletDemo1 extends GenericServlet{

    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        res.getOutputStream().write("hello servlet !!!".getBytes());

    }

}

继承HttpServlet类的Servlet

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo2 extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            response.getOutputStream().write("hello HttpServlet!!!!!".getBytes());
    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    }

Servlet的注册

  • Servlet程序必须通过web服务器和Servlet引擎启动来运行。

  • Servlet程序必须在Web应用程序的Web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。


1.注册Servlet
在Web.xml文件中,一个<Servlet>元素用于注册一个Servlet
如下所示:

    <servlet>
        <servlet-name>ServletDemo1</servlet-name>
        <servlet-class>servlet.ServletDemo1</servlet-class>
    </servlet>

<servlet>
    <servlet-name>ServletDemo2</servlet-name>
    <servlet-class>servlet.ServletDemo2</servlet-class>
  </servlet>


<servlet-class> :指定当前注册的Servlet的完整类名。
<servlet-name> :指定注册名。

2.映射Servlet
在Web.xml文件中,一个<Servlet-maping>元素用于映射一个已注册的Servlet的一个对外访问路径。
如下所示:

    <servlet-mapping>
        <servlet-name>ServletDemo1</servlet-name>
        <url-pattern>/ServletDemo1</url-pattern>
    </servlet-mapping>

 <servlet-mapping>
        <servlet-name>ServletDemo2</servlet-name>
        <url-pattern>/servlet/ServletDemo2</url-pattern>
  </servlet-mapping>

<servlet-name>:设置值是某个已注册的Servlet注册名。
<url-parrtern>:访问路径必须以正斜杠(/)开头。

  • 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以使同一个Servlet的注册名。

  • 在Servlet映射到的URL中也可以使用*通配符,但是有两种固定的格式:

    1. *.扩展名格式,在*前面不能有目录分隔符“/”。
    2. 另一种是以正斜杠(/)开头并以”/*”结尾的。

对于如下的一些映射关系:


Servlet1 映射到 /abc/* 
Servlet2 映射到 /* 
Servlet3 映射到 /abc 
Servlet4 映射到 *.do 

问题:

当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet2。
当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
    Servlet引擎将调用Servlet2。


通过配置好Web.xml文件,就可以对Servlet进行访问了。以上面继承GenericServlet类的Servlet和继承HttpServlet类的Servlet两个为例子:
这里写图片描述

这里写图片描述


Servlet激活器

一个web应用程序的部署描述符处理包含该应用程序内部的Web.xml文件的设置信息外,还包含<Tomact 主目录>/conf目录下的Web.xml文件中的全局信息,在这个Web.xml文件中你可以看到下面一段内容:

<servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
  • 可见,注册名为invoker的Servlet是在全局Web.xml文件中设置的,这样做的好处在于:如果有多个web应用程序要使用这个Servlet,我们不必再每个Web应用程序中都单独注册这个Servlet,而只需在想使用这个Servlet的web应用程序中映射其访问路径就可以了。

  • 注册名为invoker的Servlet的作用就是去激活和调用任何其他的Servlet,故被称为Servlet激活器。

  • 每个Servlet激活器所映射的访问路径可以各不相同,但是必须以“/*”结尾。

  • 经过这样的设置之后,即使某个Servlet没有再Web.xml文件中进行注册,我们只需要将Servlet激活器所映射的访问路径中的通配符(*)替换为这个Servlet的完整类名,这样就可以通过Servlet激活器来调用这个Servlet程序。

例如在应用程序的web.xml文件中增加下面内容:

<servlet-mapping>
    <servlet-name>invoker</servlet-name>
    <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

缺省Servlet

  • 如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet

  • 缺省Servlet用于处理所有其他Servlet都不处理的访问请求,凡是在web.xml中找不到匹配的<servlet-mapping>元素的URL,都交给缺省Servlet处理。

  • 当访问Tomact服务器中的某个静态HTML文件和图片时,实际上就是在访问这个缺省Servlet,这个缺省Servlet的处理方式通常是把静态资源中的内容原封不动地读出来,然后再按字节流原封不动地传递给客户端。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值