• 创建一个servlet


    servlet:

      它是web应用程序的核心类,可以直接处理和相应用户请求,又或者将处理工作委托给应用中的其他部分的类。

      让servlet继承HttpServlet的原因是:

        1.HttpServlet继承了javax.servlet.GenericServlet,并实现了只接收Http请求的service()方法。

        2.HttpServlet提供了每种http请求的空实现

        3.当用户以http的方法提交请求时,我们可以在HttpServlet的基础上,根据请求的类型,把处理工作放入重写的相应方法中。假如用户以post的方法提交表单数据,那么可以重写HttpServlet中的doPost()方法,然后编写处理逻辑。

      servlet的生命周期:

        1.初始化状态:调用init()方法

          时间:第一种情况:当servlet构建完成后,并在第一个请求到达之前

             第二种情况:若servlet被设置在web应用部署和启动时自动启动,那么它的init()方法也会被调用;这种设置有两种实现方式,一是在部署描述文件/WEB-INF/web.xml中为该servlet添加一项说明<load-on-startup>level</load-on-startup>,level表示启动顺序的优先级;二是在servlet类中使用注解,在注解中添加一项说明 loadOnStartup = level;

        2.处理请求:调用service()方法,或者根据请求类型分别调用相关的doXXX()

          时间:用户的请求到达

        3.销毁:调用destory()方法

          时间:当servlet不再接收请求后,立即调用;通常发生在web应用被停用或卸载或web容器关闭

    例子:创建一个简单的servelt,在用户以get的方式发出请求时,在用户的浏览器中显示“Hello World”

     1 package cn.example;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintWriter;
     5 
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 public class HelloServlet extends HttpServlet{
    12     
    13     /*
    14      * 处理Http中的Get请求
    15      */
    16     @Override
    17     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    18         // 获取字符输出流
    19         PrintWriter writer = resp.getWriter();
    20         // 向字符输出流中输入一段文字
    21         writer.write("Hello, world");
    22         
    23     }
    24     
    25     /*
    26      * 初始化方法,当servlet构建完成后,在第一个请求到达之前调用
    27      * 在调用init()时,servlet中的所有属性都已经设置完成,并提供了对ServletConfig和javax.servlet.ServletContext对象的访问
    28      */
    29     @Override
    30     public void init() throws ServletException {
    31         // 向终端输入一段文字,表示该方法被调用
    32         System.out.println("Servlet " + this.getServletName() + " has started");
    33     }
    34     
    35     /*
    36      * 销毁方法,当Servlet不再接收请求之后立即调用,这种情况通常发生在Web应用被停止或者卸载,或者web容器关闭。
    37      */
    38     @Override
    39     public void destroy() {
    40         // 向终端输入一段文字,表示该方法被调用
    41         System.out.println("Servlet " + this.getServletName() + " has stopped");
    42     }
    43 }

    编写完servlet后,需要告诉web容器如何部署应用程序中的servlet,有两种方式:

      1.在web.xml中部署

      2.使用注解

    在web.xml中部署servlet:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
        id="WebApp_ID" version="3.1">
        
      <!-- 
          web.xml文件将指示web容器如何部署应用程序
       -->
       <!-- 应用程序在服务器中显示的名字 -->
      <display-name>Hello-World</display-name>
        
        <!-- 声明servlet,包括servlet的名字,在哪里可以定位到该servlet -->
        <servlet>
            <servlet-name>helloServlet</servlet-name>
            <servlet-class>cn.example.HelloServlet</servlet-class>
        </servlet>
        
        <!-- 
            该servlet应该对哪些请求URL做出相应
            所有访问应用程序相对URL/greeting,URL/salutation,URL/wazzup的请求都可以被helloServlet处理,在这里的请求URL可以有多个 
        -->
        <servlet-mapping>
            <servlet-name>helloServlet</servlet-name>
            <url-pattern>/greeting</url-pattern>
            <url-pattern>/salutation</url-pattern>
            <url-pattern>/wazzup</url-pattern>
        </servlet-mapping>
        
        
    </web-app>

    完成这两项工作之后,就可以运行servlet

  • 相关阅读:
    html中的浮动
    Html中元素的分类
    前端标签命名规范
    meta详解
    CSS的嵌套方法
    html标签
    W3C标准
    AE待整理
    AE小知识点备忘录
    Maximum Subarray
  • 原文地址:https://www.cnblogs.com/aristole/p/7999837.html
Copyright © 2020-2023  润新知