Java Web程序设计——Servlet基础(二)

思维导图:
在这里插入图片描述

Servlet应用

HttpServlet
  • 由于大多数Web应用都是通过HTTP协议和客户端进行交互,因此,在Servlet接口中,提供了一个抽象类Javax.servlet.http.HttpServlet,它是GenericServlet的子类,用于创建应用于HTTP协议的Servlet。
  • 在开发中,通常浏览器访问Web服务器端的资源,是带有协议的访问,比如HTTP协议、HTTPS协议等,所以说在创建servlet时。需要使用带有协议的Servlet,通常用继承HttpServlet的方式来实现。
功能
  • 根据用户请求方式的不同,定义相应的doXxx()方法处理用户请求
  • 通过service()方法将HTTP请求和响应分别转换为HttpServletRequest和HttpServletResponse类型的对象
GET方法
  • GET 方法是默认的从浏览器向 Web 服务器传递信息的方法,它会产生一个很长的字符串,出现在浏览器的地址栏中。
  • 如果您要向服务器传递的是密码或其他的敏感信息,请不要使用 GET 方法。
  • GET 方法有大小限制:请求字符串中最多只能有 1024 个字符
  • Servlet 使用 doGet() 方法处理这种类型的请求
POST 方法
  • 向后台程序传递信息的比较可靠的方法是 POST 方法。
  • POST 方法打包信息的方式与 GET 方法基本相同,但是 POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。
  • 消息以标准输出的形式传到后台程序,可以解析和使用这些标准输出。
  • Servlet 使用 doPost() 方法处理这种类型的请求。
HttpServlet中的doGet()和doPost()方法

案例演示(此处就不详细粘贴步骤了,过程跟上一篇文章类似,以下是按顺序放的图片)

1.首先创建个表单页面
在这里插入图片描述
2.创建Servlet
在这里插入图片描述
3.配置路径
在这里插入图片描述
4.发布在浏览器中打开
在这里插入图片描述
控制台中能看到如下情况
在这里插入图片描述

HttpServlet容器响应Web客户请求流程
  1. Web客户向Servlet容器发出Http请求
  2. Servlet容器解析Web客户的Http请求
  3. Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
  4. Servlet容器创建一个HttpResponse对象
  5. Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
  6. HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
  7. HttpServlet调用HttpResponse的有关方法,生成响应数据
  8. Servlet容器把HttpServlet的响应结果传给Web客户
结论
  • 在HttpServlet里面重写service方法时,因为在service方法里面,最终调用doGet或者doPost方法,所以在重写服务方法时,一般情况下不会重写service方法,而是直接重写doGet和doPost方法
  • 在客户端发送get请求,在服务器端就用doGet方法接收
  • 在客户端发送Post请求,在服务器端就用doPost方法接收

== 注:1. 在使用对象时,使用带有协议的请求和响应对象HttpServletRequest和HttpServletResponse
2.在开发时,继承HttpServlet时,直接重写doGet和doPost方法,而不是重写service方法==

在Eclipse开发工具中创建Servlet

通过开发工具创建Servlet有两种方式

  • 先创建一个普通的Java类,需要去实现Servlet接口,或者继承对应的HttpServlet(GenericServlet)类,普通的Java类就具有了servlet功能,所以需要手动在web.xml配置文件中添加访问servlet的路径信息。这种方式比较麻烦。
  • 直接创建Servlet,会自动在web.xml文件中添加访问servlet的路径信息

步骤过程:
1.新建一个web项目,名称为chapter
在这里插入图片描述
2.创建一个servlet程序,创建一个包,名称为web.servlet,servlet的名称为TestServlet01
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:此处一个servlet可以对应多个访问路径
在这里插入图片描述
3.内容
在这里插入图片描述
4.部署和访问servlet,访问它下面的servlet资源
在这里插入图片描述
在这里插入图片描述
注:一般情况下,为了简化开发,会在doPost方法里面调用doGet方法

实现Servlet虚拟路径的映射

  • Servlet的多重映射:一个Servlet可以对应多个访问路径
    比如:一个servlet对应的访问路径:/testServlet01、/testServlet02和/testServlet03
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>chapter</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>TestServlet01</display-name>
    <servlet-name>TestServlet01</servlet-name>
    <servlet-class>web.servlet.TestServlet01</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestServlet01</servlet-name>
    <url-pattern>/testServlet01</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>TestServlet01</servlet-name>
    <url-pattern>/testServlet02</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>TestServlet01</servlet-name>
    <url-pattern>/testServlet03</url-pattern>
  </servlet-mapping>
</web-app>

在这里插入图片描述
在这里插入图片描述

  • Servlet的映射路径可以使用通配符
  1. 精确匹配:完全相等才能匹配成功
  2. 路径匹配:比如想匹配以rest开头的所有请求,可以写成"/rest/* ",其格式为以’ / ‘字符开头,并以’ / *'结尾
  3. 扩展名匹配:比如想匹配所有以.do结尾的请求,可以写成".do",其格式为以’.’,后面跟上扩展名
  4. 缺省匹配:映射路径为"/",那么这个Servlet就是当前应用的缺省Servlet,默认处理无法匹配到虚拟路径的请求
  • 匹配规则的优先级:精确匹配>路径匹配>扩展名匹配>缺省匹配
  • Servlet容器会从优先级高的虚拟路径开始匹配,匹配到后就会立刻将请求交给对应的Servlet来处理,不会再关心其他Servlet的虚拟路径是否会匹配成功

缺省案例:
在这里插入图片描述
在浏览器输入:http://localhost:8080/chapter/1111(随便更改)则会出现如下效果
在这里插入图片描述
缺省servlet作用:处理请求的资源找不到的问题(404代表请求的资源找不到)

注:1.路径匹配和扩展匹配无法混合使用
2.Servlet容器收到请求后,会将请求从上下文路径(通过request.getContextPath()获取的)处截断,使用剩余的部分来进行路径匹配
3.比如请求url为http://localhost:8080/FirstProject/HelloServlet,那么Servlet容器就会使用"/HelloServlet"来匹配Servlet

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐