@WebServlet

一、Servlet简介

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。(B-S开发的基础)

Servlet 能做些什么

  • 1.读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 2.读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 3.处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 4.发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 5.发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

Servlet 生命周期

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 通过调用 init () 方法进行初始化。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 通过调用 destroy() 方法终止(结束)。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
    生命周期附图

二、遇到的问题

1.@WebServlet("/路径")

很多时候我们会在许多代码中出现 @WebServlet("/CheckBox")注释内容,我在学习Servlet时,就在思考这句代码有什么作用,为什么要放在这里。 查阅了许多博客之后,大致搞清了缘由。
以下代码建立小型模型(假定已经配置Web项目)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Servlet</title>
</head>
<body>
<form action="CheckBox" method="POST" target="_blank">
    <input type="checkbox" name="baidu" checked="checked" /> 百度
    <input type="checkbox" name="google"  /> Google
    <input type="checkbox" name="taobao" checked="checked" /> 淘宝
    <input type="submit" value="选择站点" />
</form>
</body>
</html>


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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/CheckBox")
public class CheckBox extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();
        String title = "读取复选框数据";
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>百度标识:</b> "
                + request.getParameter("baidu") + "\n" +
                "  <li><b>Google 标识:</b> "
                + request.getParameter("google") + "\n" +
                "  <li><b>淘宝标识:</b> "
                + request.getParameter("taobao") + "\n" +
                "</ul>\n" +
                "</body></html>");
    }

    // 处理 POST 方法请求的方法
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
    }

首次启动Tomcat后,服务器由于没有Servlet实例,Tomcat会自动实例化一个容器。在这个容器中,我们有一个简单的H5页面表单
在这里插入图片描述
表单采用POST方式提交, 点击按钮发起HTTP请求,通过action属性提交到Servlet 程序。
此时就涉及上面提到的问题,收到HTTP请求后Servle会如何处理?

一般,我们通过Web.xml配置文件指定

<servlet>
          <!--类名-->
          <servlet-name>CheckBox</servlet-name>
          <!--所在的包-->
          <servlet-class>CheckBox</servlet-class>
     </servlet>

     <servlet-mapping>
          <servlet-name>CheckBox</servlet-name>
          <!--访问基于项目的路径-->
          <url-pattern>/CheckBox</url-pattern>
     </servlet-mapping>

其中/CheckBox表示访问该servlet的 url 映射(路径)(此处为相对路径,即 “项目名称/CheckBox” )。

注释@WebServlet("/CheckBox") 同样可以起到上述配置文件的作用,等价于 在web.xml中配置的该servlet的元素中的配置。

经过测试,web.xml与@Webservlet(‘/路径’)作用大致相同。

猜你喜欢

转载自blog.csdn.net/weixin_44111477/article/details/86351127
今日推荐