javaweb--servlet

什么是Servlet

Servlet是java开发的基石,与平台无关的服务器组件,他是运行在Servlet容器/Web应用服务器/Tomcat,负责与客户端进行通信

Servlet功能

  1. 创建并返回基于客户请求的动态HTML页面
  2. 与数据库进行通信

如何使用Servlet

Servlet本身是一组接口,自定义一个类,并且实现Servlet接口,这个类就具备了接收客户端请求并做出响应的功能

实现Servlet接口:

package com.bijing.servlet;

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

/**
 * @author 毕晶
 * @date 2022/9/15 14:24
 */
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 {
        String id = servletRequest.getParameter("id");
        System.out.println("我是Servlet,我已经接收到了客户端发来的请求!id="+id);
        PrintWriter printWriter = servletResponse.getWriter();
        //不同的ContentType 会影响客户端所看到的效果.默认的ContentType为 text/html 也就是网页格式
        servletResponse.setContentType("text/html;charset=utf-8");
        printWriter.write("hello client!");
        printWriter.flush();
    }

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

    @Override
    public void destroy() {

    }
}

浏览器不能直接访问Servlet文件,只能通过映射的方式来间接访问Servlet,映射需要开发者手动配置,有两种配置

  • 基于xml文件的配置方式

web.xml:

<?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>
<!--        全类名,tomcat内部会利用反射机制调用无参构造器实例化对象-->
        <servlet-class>com.bijing.servlet.MyServlet</servlet-class>
    </servlet>
<!--    servlet-name标签中的名字相同才能进行映射-->
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
<!--        地址-->
        <url-pattern>/myServlet</url-pattern>
    </servlet-mapping>


</web-app>
  • 基于注解方式

//注解方式映射Servlet,括号里面是浏览器中的路径,不要漏了'/'
@WebServlet("/myServlet")
public class MyServlet  implements Servlet {

注解中完整写法

@WebServlet(asyncSupported = true, name = "myServlet", description = "name描述", loadOnStartup = 1, urlPatterns = {
        "/myServlet", "/*" }, initParams = {
        @WebInitParam(name = "编程帮", value = "www.biancheng.net", description = "init参数1"),
        @WebInitParam(name = "京东", value = "www.jd.com", description = "init参数2") })
        public class MyServlet  implements Servlet {

Servlet的生命周期

  1. 当浏览器访问Servlet时,Tomcat会查询当前Servlet的实例化对象是否存在,如果不存在则通过反射机制动态创建对象,如果存在直接执行第三步
  2. 调用init方法完成初始化操作
  3. 调用service方法完成业务逻辑操作
  4. 关闭Tomcat时会调用destroy方法,释放当前对象所占用的资源

Servlet的生命周期方法:无参构造器、init、service、destroy方法

  • 无参构造函数只调用一次,用来实例化对象
  • init只调用一次,初始化对象
  • service调用n次,用来执行业务方法
  • destroy只调用一次,卸载对象.

ServletConfig

该接口是用来描述Servlet的基本信息的
getServletName() — 返回Servlet的名称,全类名形式
getInitParameter(String key) — 获取init参数的值(可以在web.xml中初始化,也可以在注解中初始化)
getInitParameterNames() — 返回所有的initParameter的name值,一般用做遍历初始化参数
getServletContext() — 返回ServletContext对象,它是Servlet的上下文,整个Servlet的管理者

ServletConfig和ServletContext的区别:
ServletConfig作用于某个Servlet实例,每个Servlet都有对应的ServletConfig
ServletContext作用于整个web应用,一个web应用对应一个ServletContext,过个Servlet实例对应一个ServletContext

Servlet的层次结构

Servlet ->GenericServlet ->HttpServlet
HTTP请求有很多中类型,常用的有四种
GET —读取
POST —保存
PUT —修改
DELETE —删除

抽象类GenericServlet实现了Servlet接口,同时为它的子类屏蔽了一些不常用的方法,子类只需重写service方法即可
HttpServlet继承GenericServlet,根据请求类型进行分发处理,Get进入doGet方法,post进入doPost方法
开发者自定义的Servlet类只需继承HttpServlet即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值