Servlet中的HttpServlet
大多数Web应用都是通过HTTP和客户端进行交互
因此,在Servlet接口中,提供了一个抽象类javax.servlet.http.HttpServlet,它是GenericServlet的子类,专门用于创建应用于HTTP的Servlet
查看HttpServlet类的源代码
首先,从Tomcat的lib文件中,找到Servlet的jar包——servlet-api.jar
查看jar包,使用压缩软件打开jar包,找到HttpServlet.class类文件
查看class文件,直接使用idea打开
代码如下
public abstract class HttpServlet extends GenericServlet {public HttpServlet() {}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {…… }protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {……}protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method = req.getMethod();long lastModified;if (method.equals("GET")) {lastModified = this.getLastModified(req);if (lastModified == -1L) {this.doGet(req, resp);} else {long ifModifiedSince;try {ifModifiedSince = req.getDateHeader("If-Modified-Since");} catch (IllegalArgumentException var9) {ifModifiedSince = -1L;}if (ifModifiedSince < lastModified / 1000L * 1000L) {this.maybeSetLastModified(resp, lastModified);this.doGet(req, resp);} else {resp.setStatus(304);}}} else if (method.equals("HEAD")) {lastModified = this.getLastModified(req);this.maybeSetLastModified(resp, lastModified);this.doHead(req, resp);} else if (method.equals("POST")) {this.doPost(req, resp);} else if (method.equals("PUT")) {this.doPut(req, resp);} else if (method.equals("DELETE")) {this.doDelete(req, resp);} else if (method.equals("OPTIONS")) {this.doOptions(req, resp);} else if (method.equals("TRACE")) {this.doTrace(req, resp);} else {String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[]{method};errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(501, errMsg);}}public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {HttpServletRequest request;HttpServletResponse response;try {request = (HttpServletRequest)req;response = (HttpServletResponse)res;} catch (ClassCastException var6) {throw new ServletException("non-HTTP request or response");}this.service(request, response);}
代码说明
可以发现,HttpServlet主要有两大功能
一、根据用语请求方式的不同,定义相应的doXXX()方法,处理用户请求,比如
与GET请求方式对应的doGet()方法
与POST请求方式对应的doPost()方法
二、通过service()方法,将HTTP请求和响应分别转为HttpServletRequest和HttpServletResponse类型的对象
注意
由于,HttpServlet类在重写的service()方法中,为每一个HTTP请求方式,都定义了对应的doXXX()方法,因此,当定义的类继承HttpServlet之后,只需要根据请求方式,重写对应的doXXX()方法,即可,而不需要重写service()方法
Servlet中的HttpServlet相关推荐
- servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变
Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...
- java中的doget_java servlet中doGet()和doPost()方法的用法和区别
一般来说我们是用不到doGet方法的,doGet方法提交表单的时候会在url后边显示提交的内容,所以不安全.而且doGet方法只能提交256个字符(1024字节),而doPost没有限制,因为get方 ...
- 利用抽象工厂创建DAO、利用依赖注入去除客户端对工厂的直接依赖、将有关Article的各种Servlet封装到一个Servlet中(通过BaseServlet进行
利用抽象工厂创建DAO.利用依赖注入去除客户端对工厂的直接依赖.将有关Article的各种Servlet全部封装到一个Servlet中(通过BaseServlet来进行ArticleServlet方法 ...
- 在Servlet中向客户端写Cookie信息
应用Servlet API中提供的Cookie类,用户把表单信息提交给Servlet后,在Servlet中获取用户请求的信息并添加到Cookie对象中,再通过HttpServletResponse对象 ...
- 在Servlet中处理表单提交的数据
Servlet的主要功能是处理客户端的表单请求数据,在Servlet中首先对这些数据进行验证,可能会封装到JavaBean,接下来调用数据库的业务逻辑方法将数据保存或者进行其他操作,最后Servlet ...
- 在Servlet中实现页面转发
在Servlet中实现页面转发,使用的是RequestDispatcher对象的forward()方法,可以在Servlet中通过forward()方法将当前的请求转发到其他Web组件 index.j ...
- Servlet中如何获取param-name对应的值?
一个web.xml,配置一个servlet如下 <servlet> <servlet-name>BeerParamTests</servlet-name> < ...
- java获取web.xml 参数_解析web.xml中在Servlet中获取context-param和init-param内的参数
web.xml里面可以定义两种参数:1.application范围内的参数,存放在servletcontext中,在web.xml中配置如下: context/param avalible durin ...
- 任意java程序都可以是servlet吗_C#从Java servlet中获取文件流实现任意文件下载
目的: 从C#创建的客户端中向Java创建的servlet提交请求(不知道这是否算作严格的CS架构),servet返回一个文件流( 任意格式的文件 ),然后通过C#获取该文件流并保存到本地,使得文件可 ...
最新文章
- atitit.ajax bp dwr 3.的注解方式配置使用流程总结.....
- OpenCV cv :: UMat与DirectX9曲面的互操作性的实例(附完整代码)
- 继承练习 :开发一个系统时 	需要对员工进行建模 员工包含3个属性 姓名 工号 工资 功能 work
- linux 其他参数
- 到现在还说房价不可能跌的都是些什么样的人?
- AE CS6 安装后启动报错BUG解决
- ubuntu设置虚拟显示器且远程连接
- centos7挂载大于10T及以上硬盘
- 根据手势拿到superview
- 计算机维修培训教材,计算机芯片级维中心(芯片级维修培训教材)b.doc
- 高德地图PC版国内首发室内地图
- Latex第一次写论文记录
- 第一次发C语言文章居然在头条获得35的展现
- KNN(四)--FLANN库介绍及其应用
- 康耐视Visionpro白平衡的详细步骤
- 开放式视觉伺服平台源代码_上位机(初步版本,未对细节做修订)
- (转)25款实用的桌面版博客编辑器
- Kafka 消息可靠性
- Java对Json的一系列操作(构建、json与对象的转换)
- 分布式系统架构---SOA服务体系架构