创建简单web程序了解servlet

1、创建简单web项目

1.1 创建工程


1.2 创建servlet实现类

package cn.it.web;

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

public class MyServlet 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("hello");
    }

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

    @Override
    public void destroy() {

    }
}

1.3 在web.xml中配置servlet和servlet-mapping

<?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-name>MyServlet</servlet-name>
        <servlet-class>cn.it.web.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>
</web-app>

执行原理:
1、当tomcat服务器受到客户端浏览器的请求后,会解析请求url路径,获取访问的servlet资源路径
2、查找web.xml文件,是否有对应的标签内容
3、如果有则找到相应的全类名
4、tomcat将加载字节码文件到内存创建其对象
5、调用其方法

servlet的方法及生命周期

servlet接口一共有以下几个方法:

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}
1、void init(ServletConfig var1) throws ServletException;
  初始化方法,当servlet创建时执行,只会执行一次

2、ServletConfig getServletConfig();
  获取配置方法

3、void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
  提供服务的方法,每次执行都会执行,执行多次

4、String getServletInfo();
  获取信息方法 

5、void destroy();
  销毁方法,只有servlet被杀死时才会执行,例如tomcat关闭,执行一次

示例:

public class MyServlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init function");
    }

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

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

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

    @Override
    public void destroy() {
        System.out.println("destroy function");
    }
}



*Servlet中的生命周期:
1、被创建执行init方法执行一次
2、提供服务,service方法每次执行
3、destroy关闭服务时执行一次

servlet生命周期详解

*Servlet中的生命周期:
1、被创建执行init方法执行一次
servler什么时候被创建?
默认情况下是第一次访问
可以配置成在tomcat启动时创建
在web.xml里的servlet标签配置
"1"
""的为>=0为启动创建,默认复数访问时创建
servlet是单例的,在内存中同一servlet只会存在一个,多个用户访问时可能存在线程安全问题
*解决方法:尽量不要在servlet中定义成员变量,即使定义了成员变量也不要对其赋值

<?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-name>MyServlet</servlet-name>
        <servlet-class>cn.it.web.MyServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>
</web-app>

2、提供服务,service方法每次执行
3、destroy关闭服务时执行一次

servlet3.0

好处:
支持注解配置,可以不需要web.xml了
步骤:
1、创建javaee项目,在3.0以上版本可以不创建web.xml
2、定义一个类,实现servlet接口
3、复写方法
4、在类上使用webSer
示例:创建一个servlet实现类

@WebServlet(name = "index2",urlPatterns = "/index2")
public class MyServlet2 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("servlet2");
    }

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

    @Override
    public void destroy() {

    }
}

webServlet注解:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WebServlet {
    String name() default "";

    String[] value() default {};

    String[] urlPatterns() default {};

    int loadOnStartup() default -1;

    WebInitParam[] initParams() default {};

    boolean asyncSupported() default false;

    String smallIcon() default "";

    String largeIcon() default "";

    String description() default "";

    String displayName() default "";
}
posted @ 2020-08-05 21:49  Kingfan  阅读(246)  评论(0编辑  收藏  举报