Servlet基础:容器

一、容器概述

        Servlet是一种运行在服务器上的小插件,Servlet最常见的用途是扩展Web服务器的功能,Servlet具有以下的特点:

  • 提供了可被服务器动态加载并执行的程序代码,为来自客户端的请求提供相应的服务。
  • Servlet完全使用Java语言编写,因此要求运行Servlet的服务器必须支持Java语言
  • Servlet完全在服务器端运行,因此他的运行不依赖于浏览器。

        Tomcat作为运行Servlet的容器,其基本的功能是负责接收和解析来自客户端的请求,同时把客户端的请求传递给相应的Servlet,并把Servlet的相应结果返回给客户

        如果Web服务器应用得到一个指向某Servlet的请求,此时,服务器不是把这个请求交给Servlet本身,而是交给部署该Servlet的容器。由容器向Servelt提供Http请求和响应,而且要由容器调用Servlet的方法,如doGet()或doPost()。流程如下图所示:

二、容器提供什么

        如前文所述,要由容器用来管理和运行Servlet,这是为什么呢?容器到底带给我们什么呢?如下所示,是容器提供给我们的,也是使用容器的原因:

  • 通讯支持利用容器提供的方法,可以轻松的让servlet与web服务器对话,无需自己建立ServerSocket、监听端口、创建流等。容器知道自己与Web服务器之间的协议。
  • 生命周期的管理:控制着Servlet的生与死。
  • 多线程支持容器会自动的为其接收的每个Servlet请求创建一个新的Java线程。
  • 声明方式实现安全:利用容器,可以使用XML部署描述文件来配置和修改安全性,而不必将其硬编码写入到Servlet(或其他)类代码中。
  • JSP支持:将JSP翻译成Java。

        总而言之,有了容器,我们可以更专注于自己的业务逻辑,而不必考虑为请求监听、线程管理、安全性及网络通讯编写代码。

下图为容器处理请求的过程:

 Servlet示例代码:

/**
 * 创建一个简单的Servlet类
 */
public class Ch1Servlet extends HttpServlet {

    /**
     * get请求
     * @param request  容器创建的请求
     * @param response 容器创建的响应。 Servlet从此处获取到容器创建的请求和响应。
     * @throws IOException
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        PrintWriter out = response.getWriter();

        Date today = new Date();
        //获取到客户请求之后,响应一个HTML页面给客户
        out.println("<html>\n" +
                "<!-- 简单的Html页面 -->\n" +
                "<head>\n" +
                "    <title>A Login Page</title>\n" +
                "</head>" +
                "<body>\n" +
                "<h1 align=\"center\"> wangy login page</h1>\n" +
                "<br>" + today+
                "</body>\n" +
                "\n" +
                "</html>");
    }

}

三、 Servlet的三个名字

        容器如何找到某个需要的Servlet呢?作为客户端请求的一部分,URL会以某种方式映射到服务器上的一个特定的servlet。我们需要配置这种映射,这牵扯到Servlet的三个名字

1)客户知道的URL名(公共URL名):

        Servley有一个公共的URL名,这是客户所知道的名字,这个名字写在HTML中,当用户点击一个指向该servlet的链接时,就可以把这个公共URL名放在HTTP请求中,发送给服务器。公共URL只是一个虚构的名字,完全为客户提供的

2)部署人员知道的秘密内部名:

        部署人员可以造一个名字,这个名字只有他自己知道,这个名字也是虚拟的,只用于部署Servlet

3)实际的文件名:

        开发人员的servlet类有一个完全限定名,其中包括类名和包名。servlet类文件有一个实际的路径和文件名。这取决于其在服务器上的文件位置。

下面是将URL映射到servle

t的部署文件(web.xml)示例:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<!-- 部署描述文件 -->
<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <!-- servlet部署 -->
  <servlet>
    <servlet-name>Chapter1 servlet</servlet-name> <!-- servlet 部署时的内部名 -->
    <servlet-class>com.wyf.servlet.Ch1.Ch1Servlet</servlet-class> <!-- servlet实际文件名 -->
  </servlet>

  <!-- 将servlet与url映射 -->
  <servlet-mapping>
    <servlet-name>Chapter1 servlet</servlet-name>
    <url-pattern>/Servl</url-pattern> <!-- servlet 客户使用的URL名-->
  </servlet-mapping>

</web-app>

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值