栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet(接口编程)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet(接口编程)

文章目录
  • 一、Servlet
    • 1.1 Servlet简介
      • 1.1.1 Servlet是什么?
      • 1.1.2 Servlet 工作
      • 1.1.3 Servlet 任务
    • 1.2 快速入门
      • 1.2.1 创建项目
      • 1.2.2 pom.xml
      • 1.2.3 web.xml
      • 1.2.4 编写java类
      • 1.2.5 填写web.xml映射
      • 1.2.6 配置Tomcat
    • 1.3 Servlet原理
      • 1.3.1 工作流程
      • 1.3.2 处理请求流程
      • 1.3.3 工作原理
      • 1.3.4 生命周期
    • 1.4 Mapping问题
      • 1.4.1 映射路径
      • 1.4.2 优先级问题


学习视频来自于:秦疆(遇见狂神说)Bilibili地址
他的自学网站:kuangstudy

我们缺乏的不是知识,而是学而不厌的态度


一、Servlet 1.1 Servlet简介 1.1.1 Servlet是什么?
  • Servlet就是sun公司开发动态web的一门技术。
  • Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
  • Sun在这些APi中提供一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤
    • 编写一个类,实现Serlet接口。
    • 把开发好java类部署到web服务器中。
  • 把实现了Servlet接口的Java程序叫做,Servlet。
1.1.2 Servlet 工作

1.1.3 Servlet 任务
  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。
1.2 快速入门 1.2.1 创建项目
  1. IDEA新建项目。
  2. 选Maven Archetype 。
  3. Archetype选:org.apache.maven.archetypes:maven-archetype-webapp。
  4. 高级设置:组ID(com.公司名)、工件ID(项目名)、版本。
  5. 创建。
1.2.2 pom.xml

将JDK改为项目运行的版本,这里是jdk1.8。

    
        UTF-8
        1.8
        1.8
    

需要Servlet包,索性jsp包也导入,使用maven导入。



    javax.servlet.jsp
    javax.servlet.jsp-api
    2.3.1
    provided



    javax.servlet
    javax.servlet-api
    3.1.0
    provided

1.2.3 web.xml
  1. WEB-INF文件夹内。
  2. 表头直接到Tomcat文件夹-webapps找一个自带的文档项目复制web.xml的表头。



1.2.4 编写java类
  1. 在src–>main–>java右键创建软件包com.tianyu.servlet–>创建HelloServlet.java类。
  2. HelloServlet 继承 HttpServlet 重写 doGet(HttpServletRequest req, HttpServletResponse resp)和 doPost(HttpServletRequest req, HttpServletResponse resp)方法。
// get和post只是请求实现的不同的方式,可以相互调用,业务逻辑都一样。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.getWriter().println("hello servlet");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
}
1.2.5 填写web.xml映射

为什么要写:我们写的是java程序,但是通过浏览器访问,而浏览器需要连接web服务器,所以我们要web服务中注册我们写的Servlet,还需要给它一个浏览器能够访问的路径。

     
        hello 
        com.tianyu.servlet.HelloServlet 
    
    
        hello 
        /hello 
    
1.2.6 配置Tomcat
  1. IDEA左上角–> 编辑配置 -->点+(添加新配置Tomcat)。
  2. 设置名称、选择应用服务器、配置打开浏览器、URL。
  3. 配置jre地址。
  4. 部署–>点击+(把要运行的项目放入)。
  5. 浏览器访问:http://localhost:8080/项目名/程序名。
1.3 Servlet原理

JAVAschool:http://www.51gjie.com/javaweb/848.html

1.3.1 工作流程

Servlet是由Web服务器调用,web服务器在收到浏览器请求之后,会:

  1. Web Client 向Servlet容器(Tomcat)发出Http请求。
  2. Servlet容器接收Web Client的请求。
  3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
  4. Servlet容器创建一个HttpResponse对象。
  5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
  6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
  7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
  8. Servlet容器把HttpServlet的响应结果传给Web Client。
1.3.2 处理请求流程
  1. 用户点击一个链接,指向了一个servlet而不是一个静态页面。
  2. 容器“看出”这个请求是一个Servlet,所以它创建了两个对象HttpServletRequest和HttpServletResponse。
  3. 容器根据请求中的URL找到正确的Servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个Servlet线程。
  4. doGet()方法生成动态页面,并把这个页面“塞到”响应对象里,需要注意的是,容器还有响应对象的一个引用!
  5. 线程结束,容器把响应对象转换为一个HTTP响应,并把它发回给客户,然后删除请求和响应对象。
1.3.3 工作原理
  1. 首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet()、doPost()等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。
  2. 每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),**destroy()**方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。
  3. Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpServlet中实现了service()方法,并将请求ServletRequest、ServletResponse 强转为HttpRequest 和 HttpResponse。
1.3.4 生命周期

1. 加载和实例化
如果Servlet容器还没实例化一个Servlet对象,此时容器装载和实例化一个 Servlet。创建出该 Servlet 类的一个实例。如果已经存在一个Servlet对象,此时不再创建新实例。
2. 初始化
在产生 Servlet 实例后,容器负责调用该 Servlet 实例的 init() 方法,在处理用户请求之前,来做一些额外的初始化工作。
3. 处理请求
当 Servlet 容器接收到一个 Servlet 请求时,便运行与之对应的 Servlet 实例的 service() 方法,service() 方法根据用户的请求调用相对应的doGet或doPost 方法来处理用户请求。然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。
4. 销毁
当 Servlet 容器决定将一个 Servlet 从服务器中移除时 ( 如 Servlet 文件被更新 ),便调用该 Servlet 实例的 destroy() 方法,在销毁该 Servlet 实例之前,来做一些其他的工作。
注意:(1)(2)(4) 在Servlet的整个生命周期中只会被执行一次,(3)可以被浏览器反复请求。

1.4 Mapping问题 1.4.1 映射路径
  1. 一个Servlet可以指定一个映射路径

    hello 
    /hello 

  1. 一个Servlet可以指定多个映射路径

    hello 
    /hello1 


    hello 
    /hello2 


    hello 
    /hello3 


    hello 
    /hello4 


  1. 一个Servlet可以指定通用映射路径

    hello 
    /hello/* 

  1. 默认请求路径


    hello 
    /* 

  1. 指定一些后缀或者前缀等等…

 
    hello 
    *.tianyu 

1.4.2 优先级问题

指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求。



    error 
    com.tianyu.servlet.ErrorServlet 


    error 
    /* 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号