JavaWeb-Servlet入门

Servlet: 运行在服务器上的小程序。
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则,我们也可以自定义来实现这个接口。

整个JavaWeb的核心体系都是围绕着Servlet来转的。

使用Servlet

首先新建Tomcat的项目,
然后创建ServletDemo01继承Servlet接口

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

    /**
     * 获取Servlet的一些信息,版本,作者等等... (一般不会用)
     * @return
     */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

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

    /**
     * 获取ServletConfig对象
     * ServletConfig: Servlet的配置对象
     * @return
     */
    @Override
    public String getServletInfo() {
        return null;
    }

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

在web.xml中添加配置


<servlet>
    <servlet-name>demo1servlet-name>
    <servlet-class>com.heiko.ServletDemo01servlet-class>
servlet>

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

点击运行
浏览器url中增加url-pattern
比如http://localhost:8080/MyTomcatTest_war_exploded2/demo1_path,回车
可以看到logcat中打印了日志

init.....
service.....

Servlet的生命周期

1.被创建:执行init方法,只执行一次
* 指定Servlet的创建时机
1.第一次被访问时,的值为负数
2.在服务器启动时,的值为0或正整数
* Servlet的init方法,只执行一次,说明一个servlet在内存中只存在一个对象,servlet是单例的
多个用户同时访问时,可能存在线程安全问题。
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要修改值
2.提供服务:执行service方法,可以执行多次(刷新)
3.被销毁:执行destroy方法,只执行一次

Sevlet执行原理

  1. 当服务器接收到客户端浏览器的请求后,会解析请求URL路径,获取访问对应的Servlet类
  2. tomcat会将字节码文件加载进内存,并且创建其对象
  3. 调用其方法

Servlet3.0

Servlet3.0支持用注解的方式,可以不用xml配置。JavaWeb-Servlet入门_第1张图片
新建类,添加注解

@WebServlet("/demo2")
public class ServletDemo implements Servlet {
    //...省略
    
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service!!!!");
    }
}

访问页面

http://localhost:8080/MyServletTest_war_exploded/demo2

看到打印日志

service!!!!

Servlet体系结构

  • servlet - 接口
    • GenericServlet - 抽象类 : 只需实现service方法
      • HttpServlet - 抽象类 : 对HTTP协议的封装和描述 doGet()、doPost() 等
@WebServlet("/demo3_path")
public class ServletDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
        System.out.println("doGet...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doPost(req, resp);
        System.out.println("doPost...");
    }
}

Servlet相关配置

  • @WebServlet: 设置访问路径
    • 一个Servlet可以定义多个路径: @WebServlet({"/S1","/SS2","/SSS3"})
    • 路径定义规则
      • /xxx : 普通方式
      • /xxx/xxx : 多层路径,目录结构
      • *.do : 比如 http://localhost/demo4.do

其他

文中代码 详见 https://github.com/EthanCo/JavaWebTest

你可能感兴趣的:(javaEE,1024程序员节,javaWeb,Servlet,入门,配置)