Servlet和HttpServer

Servlet 是Java Web开发中重要的一个类
该类是一个接口,使用 Servlet 需要实现其中的方法

package study.demo.web;

import javax.servlet.*;
import java.io.IOException;

/**
 * Servlet 是一个接口
 * 使用 Servlet 需要实现其中的方法
 */
public class Servers implements Servlet {

    /**
     * 初始化方法
     * 该方法 在Servlet被创建时执行 只会执行一次
     * 该方法可以指定创建时间:
     * 在 web.xml 中 <servlet>标签下 创建 <load-on-startup> 标签
     *  该标签的值为负数 表示 在第一次访问时创建
     *  该标签的值为正数 表示 在服务器启动后创建
     *
     *  注意:Servlet对象是单例模式,多个用户访问时可能会造成线程安全问题
     *  解决:尽量不要在Servlet中操作成员变量
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init 执行成功");
    }

    /**
     * 获取ServletConfig对象
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * Servlet 入口方法
     * 每一次Servlet被执行时 都会执行
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("我是Servlet的入口方法");
    }

    /**
     * 获取Servlet的一些信息:版本、作者等等
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 销毁方法
     * 在服务器正常关闭时执行一次
     */
    @Override
    public void destroy() {
        System.out.println("Servlet 关闭了");
    }
}

根据web.xml配置的访问路径,可以对请求地址进行自定义

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--servlet的路径-->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>study.demo.web.Servers</servlet-class>
    </servlet>
    <!--servlet访问的地址-->
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>
</web-app>

以上是使用Servlet的方法
但实际中一般使用Servlet的子类:HttpServlet

HttpServlet类继承自Servlet 并且重新了Servlet类的方法
并且 HttpServlet 封装了 HttpServletRequest类和HttpServletResponse类

package study.web.day01;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 通过注解 代替web.xml配置路由
 * @WebServlet() 该注解支持层级目录和通配目录
 * @WebServlet("/xxx/xxx") : 多层级目录
 * @WebServlet("/xxx/*")   :多层级目录,并且文件名可以匹配所有
 * @WebServlet("*.访问后缀") :匹配所有输入的路径,但是后缀需要定义,并且访问时需要匹配后缀
 */
@WebServlet("/demo1")
public class HttpServer extends HttpServlet {
    
    /**
     *
     * @param req HttpServletRequest 请求对象
     * @param resp HttpServletResponse 相应对象
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");
    }

    /**
     *
     * @param req HttpServletRequest 请求对象
     * @param resp HttpServletResponse 相应对象
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post...");
    }

    /**
     * 
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.service(req, resp);
    }
}

仅有一条评论

添加新评论