JavaWeb_servlet(4)_ HttpServlet
JavaWeb_servlet
HTTP 请求的 Servlet
● 因为现在我们的请求都是基于 HTTP 协议的,所以我们应该专门为 HTTP 请求写一个 Servlet 做为通用父类。
- 对于专注于 HTTP 的 Servlet,我们需要处理以下几个问题:
service() 方法的参数 ServletRequest 和 ServletResponse,但因为所有的请求都是 HTTP 请求,所以传递给 service() 就去的参数其实是 HttpServletRequest 和 HttpServletResponse 对象。如果子类希望使用的是 HttpServletRequest,而不是ServletRequest,那么它需要自己去做强转。
● Servlet:SUN公司设计之初,以后不仅仅依赖HTTP协议
- GenericServlet — 通用Servlet
- service(ServletRequest req, ServletResponse res)
- HttpServlet — 与协议相关的Servlet
- service(HttpServletRequest req, HttpServletResponse resp)
- 以后再写 Servlet 继承 HttpServlet
- Servlet — 一个标准
|
GenericServlet — 是 Servlet 接口子类
|
HttpServlet — 是 GenericServlet 子类,一个专门处理 Http 请求的 Servlet
- Servlet — 一个标准
● HttpServlet
- 两个 Service 方法(只需要重写doGet和doPost就行)
- 父类 service 调用子类 service 使用子类service方法就可以
- 子类中 service 根据请求方式不同调用不同的方法
● 写一个 Servlet 继承 HttpServlet
- 重写 doGet 和 doPost 方法.
- Java 中已经存在了 javax.servlet.http.HttpServlet 类
● HTTP请求方法
- HTTP 请求方法不只是 GET 和 POST,还有其他的方法,但基本上用不上。这里只是简单介绍一下。你自己心里有个数,HTTP 请求除了 GET 和 POST 之外还有别的就行了。
- GET 通过请求 URI 得到资源
- POST用于添加新的内容
- PUT 用于修改某个内容
- DELETE 删除某个内容
- CONNECT 用于代理进行传输,如使用 SSL
- OPTIONS 询问可以执行哪些方法
- PATCH 部分文档更改
- RACE 用于远程诊断服务器
- HEAD 类似于 GET, 但是不返回 body 信息,用于检查对象是否存在,以及得到对象的元数据
- TRACE 用于远程诊断服务器
● 示例
- 编码(基于第一个例子)(完整源码见文末)
- 更改 index.jsp
3、测试
以上操作完整源码:
package com.wyx.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* doGet是给 get 方式的 http 的请求做相应的 doPost 是给 post方式的 http 的请求做相应的
*/
public class demo1 extends HttpServlet
{
@Override
public void init() throws ServletException
{
System.out.println("HttpServletDemo实例被创建了");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
System.out.println("doGet方法被调用了");
resp.getOutputStream().write("doGet方法被调用了".getBytes());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
System.out.println("doPost方法被调用了");
doGet(req, resp);
}
}
如有错误,欢迎指正!