Web技术3——servlet

写一个入门需求:

在IDEA编写Servlet,发布到Tomcat. 在浏览器输入路径请求, 控制台打印Hello…

步骤:

1.导入jar包:
在这里插入图片描述
2.新建一个类实现Servlet接口,并重写方法
在这里插入图片描述
3.web.xml里面配置Servlet的映射地址/在类上面添加@WebServlet(“访问路径”)

代码

web.xml方式:

访问地址:http://localhost:8080/day08_01_web_war_exploded/demo1

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("Hello...");
    }

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

    @Override
    public void destroy() {

    }
}


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">

    <!--配置ServletDemo1的映射地址-->
    <servlet>
        <!--任意名字,建议是类名首字母改小写-->
        <servlet-name>servletDemo1</servlet-name>
        <!--Servlet这个类的全限定名-->
        <servlet-class>com.gavin.servlet.ServletDemo1</servlet-class>
    </servlet>

    <servlet-mapping>
        <!--必须和Servlet标签下的servlet-name标签符名字一样-->
        <servlet-name>servletDemo1</servlet-name>
        <!--配置访问路径-->
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

</web-app>

注解方式:

访问地址:http://localhost:8080/day08_01_web_war_exploded/demo2

@WebServlet("/demo2")
public class ServletDemo2 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() {

    }
}

servlet路径原理

在这里插入图片描述

Servlet路径的配置url-pattern

url-pattern配置方式共有三种:
• 完全路径匹配: 以 / 开始.
注意:访问的路径不能多一个字母也不能少一个字母
o 例如:配置了/demo1 请求的时候必须是:/demo1
• 目录匹配"以 / 开始需要以 * 结束.
注意:Servlet里面用的不多,但是过滤器里面通常就使用目录匹配
o 配置:/* 访问:/a /b /asdc;配置/aa/* 访问:/aa/a /aa/b /aa/abc
• 扩展名匹配不能以 / 开始, 以 * 开始的 .
正确的写法:.action 访问:a.action b.action 错误写法:/.do *.jsp *.html

注意:

  1. 一个路径只能对应一个Servlet,但是一个Servlet可以有多个路径
  2. tomcat获得匹配路径时,优先级顺序:完全路径匹配>目录匹配>扩展名匹配

servlet路径解析原理

在这里插入图片描述

servlet原理和体系

servlet的体系:

根接口api:servlet(里面有init(),destory(),service()等定义好的方法,service()方法有request,response参数)
实现类api:HttpServlet
在这里插入图片描述

(实现了servlet并实现了方法,其中在service()方法里使用request对象处理好了不同请求方式的逻辑,!!!@并写了doGet(),doPost()等请求方式的方法,但是是空的,需要子类去覆盖重写,什么请求方式在什么方法里写处理!!!@这就是我们需要写的内容)

Request,Response的体系

根接口api:ServletRequest
接口api:HttpServletRequest(里面写好了http传进来的参数!!!流的各种处理方法,这里封装了http协议)
实现类:RequestFacade(由Tomcat定义的实现类)

根接口:ServletResponse
接口:HttpServletResponse
实现类:ResponseFacade
在这里插入图片描述
在这里插入图片描述

整个访问流程(servlet生命周期)

首先:http格式的请求数据流进入tomcat
然后:tomcat使用req把http请求流给拆了封装好成方法,留着后面用哪个数据直接方法获取。(tomcat创建实现类RequestFacade,和他的对象,把请求流数据处理好)
然后:tomcat创建实现类HttpServlet的对象,调用init()方法初始化对象,完成一些加载配置文件,创建连接等初始化工作,init()方法只调用一次。
然后外部每一次url请求,就会调用service()方法,并把上面处理好的req对象传进来。(获取http传过来的数据做我们想做的处理)
最后,需要释放内存或tomcat关闭时,Tomcat调用destory()方法完成资源释放,destory()方法调用了之后,容器会释放service实例(所有req,resp,servlet的对象一起没了,然后对象会被java的垃圾收集器收回)

总结注意点:

1Servlet对象是有服务器创建(反射)
2) request与response对象也是由tomcat服务器创建,对象的类也是服务器创建。
3) service()方法也是服务器调用的
4)来了第一次请求, 会调用init()方法进行初始化(只调用这一次);任何一次请求 都会调用service()方法处理这个请求;服务器正常关闭或者项目从服务器移除, 调用destory()方法进行销毁(只调用这一次)
5)Servlet对象默认第一次请求进来时候创建;如果想让Servlet提前创建(服务器启动的时候), 这个时候就可以使用启动项

1

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值