Java-Servlet

概念

运行在服务器上的小程序

  • Servelt就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则
  • 需要自定义一个类,实现接口复写方法

快速入门

  • 创建JavaEE项目
  • 定义一个类,实现servelt接口
  • 实现接口的抽象方法
  • 配置servelt

简单例子

类实现servelt接口

这里只改写了service方法

package servelt;

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

public class ServeltDemo1 implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    //提供服务的方法
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("tql");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

web.xml添加内容 配置servelt

在web.xml文件下的框里添加内容

   <!-- 配置servlet-->
    <!-- 给类取一个名字-->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>servelt.ServeltDemo1</servlet-class>
    </servlet>

    <!--进行映射-->
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

</web-app>

运行程序:
每次加载这个页面以后 idea输出框都会输出一次tql

工作原理

Servlet的5个方法

package servelt;

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

public class ServeltDemo2 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        /*初始化方法
        * 在Servlet被创建时执行,只会执行一次*/
        System.out.println("init------");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //提供服务方法 每次Servlet被访问时执行,可以执行多次
        System.out.println("service------");
    }

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

    @Override
    public void destroy() {
        //销毁方法
        //在Servlet被销毁时执行,只执行一次
        //在Servlet销毁之前执行,一般用于释放资源
        System.out.println("destoey----");

    }
}

设置Servlet什么时候创建

在web.xml文件下修改

 <!-- 给类取一个名字-->
    <servlet>
        <servlet-name>demo2</servlet-name>
        <servlet-class>servelt.ServeltDemo2</servlet-class>
        <!--指定Servlet的创建时机-->
        <!--1 第一次被访问时创建 为负数
            2 在服务器启动时被创建 为0或正数-->
        <load-on-startup>-1</load-on-startup>
    </servlet>

用servlet3进行配置

package servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
//进行配置路径
@WebServlet("/demo")
public class ServletDemo1 implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("servlet3.0---");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}


Servlet的线程安全问题

由于init方法只执行一次,说明在内存中只存在一个对象,是单例的
多个用户同时访问时,可能存在线程安全问题
因此需要我们尽可能的不在Servlet中定义成员变量,即使定义了也不要去修改这个值

urlpartten配置相关

配置多个虚拟路径

用一个数组包起来
如:

@WebServlet({"/d4","/demo4","/dd4"})

路径定义规则

1./xxx
2./xxx/xxx 多层路径
3.*.xx 没有/

posted @ 2020-11-28 21:08  一个经常掉线的人  阅读(121)  评论(0)    收藏  举报