• 修炼Servlet


    修炼Servlet

    一、Servlet简单认识

    1、Servlet是什么

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,我们可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

    2、Servelet构架

    借鉴与W3C,显示servlet在web应用程序中的位置

    img

    3、Servlet主要任务

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

    4、Servlet涉及的包

    Servlet 可以使用 javax.servletjavax.servlet.http 包创建

    二、Servlet生命周期

    Servlet 生命周期可被定义为从创建直到毁灭的整个过程。

    以下是 Servlet 遵循的过程:

    (1)、Servlet通过调用init ()方法进行初始化。
    (2)、Servlet调用service()方法来处理客户端的请求。
    (3)、Servlet通过调用destroy()方法终止(结束)。
    (4)、最后Servlet由JVM的垃圾回收器进行垃圾回收的。
    

    1、init()方法

    init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。知道这一点即可。

    看一下定义:

    public void init() throws ServletException {
    	//初始化代码
    }
    

    2、service()方法

    service 是执行实际任务的主要方法 ,用来处理来自客户端的请求,并把格式化的响应写回给客户端。会在适当的时候调用 doGet、doPost、doPut,doDelete 等方法 。

    看一下定义:

    public void service(ServletRequest request, ServletResponse response) throws ServletException,IOException{
    }
    

    上面说到会去调用一些方法,所以,我们不用对 service() 方法做任何动作,只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。

    ①doGet()方法:

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        // Servlet 代码
    }
    

    doGet 请求来自于一个 URL 的正常请求,或者未指定 METHOD 的 HTML 表单 .

    ②doPost()方法:

    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        // Servlet 代码
    }
    

    doPost请求来自于一个特别指定了METHOD 为 Post的 HTML 表单

    3、destroy()方法

    destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用 。 一般会使Servlet关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

    看一下定义:

    public void destroy() {
        // 终止化代码...
    }
    

    三、Servlet简单实例

    来个最原始的 Servlet 输出 Hello World

    写在前面,我用的IDEA创建了一个web项目,在写Servlet时可能没有javax.servlet和javax.servlet.http包,该怎么办呢?很好解决,File->Project Structure->Library->上面会有一个java,点击后出现New Project Library,我们选择java,然后去我们的tomcat目录下找到libservlet-api.jar导入即可。

    img

    开始代码模式了!

    package wzm;
    
    import java.io.*;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class HelloWorld extends HttpServlet {
        private String message;
    
        @Override
        public void init() throws ServletException {
            message="Hello World";
        }
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
            //设置响应内容
            response.setContentType("text.html");
            //实际逻辑
            PrintWriter out = response.getWriter();
            out.println("<h1>" + message + "</h1>");
        }
    
        @Override
        public void destroy() {
            //nothing
        }
    }
    
    

    这里只是熟悉一遍Servlet周期

    四、IDEA部署Servlet

    1、方法一:web.xml

    在WEB-INF目录下web.xml文件的 web-app标签中添加如下内容:

    <servlet>  
        <servlet-name>HelloWorld</servlet-name>  
        <servlet-class>wzm.HelloWorld</servlet-class>  
    </servlet>  
      
    <servlet-mapping>  
        <servlet-name>HelloWorld</servlet-name>  
        <url-pattern>/HelloWorld</url-pattern>  
    </servlet-mapping> 
    

    2、方法二:注解法

    在HelloWorld文件的类前面加上:@WebServlet("/HelloWorld")


    Servelet应该仍是web的核心,在这里大体知道它是如何工作的,并知道service的一些方法使用就好。

  • 相关阅读:
    [资料]PHP中的__autoload
    [转]php 5.3新增的闭包语法介绍function() use() {}
    [资料]PHP中的ReflectionClass
    [资料]PHP中的命名空间
    Mysql Event
    PHP转换成对像
    [转]Win7自带便签怎么恢复内容
    [转]Windows7便笺妙用
    [转]ASP.NET下MVC1.0>2.0>3.0>4.0
    PHP类动态属性问题
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/11881559.html
Copyright © 2020-2023  润新知