前端之Servlet

Servlet

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

使用流程

  1. 创建JavaEE项目
  2. 定义一个类实现Servlet接口
  3. 实现接口方法
  4. 配置Servlet,在web.xml中配置Servlet:
<!--  配置Servlet  -->
<servlet>
    <servlet-name>demo1</servlet-name>
    <servlet-class>servlet.ServletDemo1</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>demo1</servlet-name>
    <url-pattern>/demo1</url-pattern>
</servlet-mapping>

Servlet执行流程

  1. 访问地址http://localhost:8080/day08_web/demo1,找到服务器和端口,再找到项目,然后资源demo1
  2. 找是否有标签<url-pattern>与资源路径匹配
  3. <servlet-name>->找到对应全类名<servlet-class>
  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>
    <servlet-name>demo1</servlet-name>
    <servlet-class>servlet.ServletDemo1</servlet-class>

    <!--  指定Servlet创建时机
        1.第一次访问时创建 <load-on-startup>为负数
        2.在服务器启动时创建 <load-on-startup>为0或正数
    -->
    <load-on-startup>0</load-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()方法,进行复写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值