前端之Servlet

文章目录

    • Servlet
      • 使用流程
      • Servlet执行流程
      • Servlet生命周期
      • Servlet简便用法
        • 注解配置不用xml
        • 使用Servlet继承类
          • GenericServlet
          • HttpServlet

Servlet

获取服务器中的动态资源,也就是java代码,依赖于服务器对java类进行运行,而Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。

使用流程

  1. 创建JavaEE项目
  2. 定义一个类实现Servlet接口
  3. 实现接口方法
  4. 配置Servlet,在web.xml中配置Servlet:

<servlet>
    <servlet-name>demo1servlet-name>
    <servlet-class>servlet.ServletDemo1servlet-class>
servlet>

<servlet-mapping>
    <servlet-name>demo1servlet-name>
    <url-pattern>/demo1url-pattern>
servlet-mapping>

Servlet执行流程

  1. 访问地址http://localhost:8080/day08_web/demo1,找到服务器和端口,再找到项目,然后资源demo1
  2. 找是否有标签与资源路径匹配
  3. ->找到对应全类名
  4. tomcat将对应字节码文件加载进内存
  5. 创建对象
  6. 调用被重写的方法方法service

Servlet生命周期

/**
* 在Servlet创建时执行,只会执行一次
 * @param servletConfig
 * @throws ServletException
 */
@Override
public void init(ServletConfig servletConfig) throws ServletException {
    System.out.println("init...");
}
/**
 * 提供服务方法,每一次Servlet被访问时,执行多次
 * @param servletRequest
 * @param servletResponse
 * @throws ServletException
 * @throws IOException
 */
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("hello Servlet");
}

/**
 * 在服务器正常关闭时执行一次
 */
@Override
public void destroy() {
    System.out.println("destoried");
}
  1. init创建,只执行一次,说明Servlet是单例的只存在一个资源。多个用户同时访问时可能存在安全问题。解决方法是:尽量不要在Servlet中定义成员变量,更不要对其修改,也就是只读

在servlet中配置启动时间


<servlet>
    <servlet-name>demo1servlet-name>
    <servlet-class>servlet.ServletDemo1servlet-class>

    
    <load-on-startup>0load-on-startup>
servlet>
  1. Service执行多次,刷新就多执行一次
  2. destory服务器关闭,Servlet摧毁时执行,只执行一次,只有正常关闭时才执行。一般用于释放资源。

Servlet简便用法

注解配置不用xml

JavaEE 新版本可以使用 注解进行配置,不需要xml文件

@WebServlet(urlPatterns = "/demo")
public class ServletAnnotation implements Servlet{}

使用Servlet继承类

GenericServlet

可以不用实现除service以外的方法,继承Servlet实现类GenericServlet,只需要实现service方法,其他方法已经空实现

@WebServlet(urlPatterns = "/demo")
public class ServletAnnotation extends GenericServlet{

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("继承实现类GenericServlet父类");
    }
}
HttpServlet

对http协议进行实现,对请求方式进行判断req.getMethod()。实现doGet()doPost()方法,进行复写。

你可能感兴趣的:(前端,servlet)