Java Web程序设计——Servlet基础(二)
Java Web程序设计——Servlet基础(二)Servlet应用HTTPServlet
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客户请求流程
- Web客户向Servlet容器发出Http请求
- Servlet容器解析Web客户的Http请求
- Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
- Servlet容器创建一个HttpResponse对象
- Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
- HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
- HttpServlet调用HttpResponse的有关方法,生成响应数据
- 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的映射路径可以使用通配符
- 精确匹配:完全相等才能匹配成功
- 路径匹配:比如想匹配以rest开头的所有请求,可以写成"/rest/* ",其格式为以’ / ‘字符开头,并以’ / *'结尾
- 扩展名匹配:比如想匹配所有以.do结尾的请求,可以写成".do",其格式为以’.’,后面跟上扩展名
- 缺省匹配:映射路径为"/",那么这个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
更多推荐
所有评论(0)