javaWeb学习总结(3)- Servlet总结(servlet的主要接口、类)
(一)servlet类
Servlet主要类、接口的结构如下图所示:
要编写一个Servlet需要实现javax.servlet.Servlet接口,该接口定义了5个方法。如下:
1.init(),初始化servlet对象,完成一些初始化工作。
它是由servlet容器控制的,该方法只能被调用一次,初始化过程如下:
2.service(),接受客户端请求对象,执行业务操作,利用响应对象响应客户端请求。
3.destroy(),当容器监测到一个servlet从服务中被移除时,容器调用该方法,释放资源。
4.getServletConfig(),ServletConfig是容器向servlet传递参数的载体。
5.getServletInfo(),获取servlet相关信息。
(二)与servlet相关的接口
从servlet仅有的5个方法当中,我们知道其涉及3个接口,分别是:
ServletConfig
ServletRequest
ServletResponse
2.1. ServletConfig
主要方法:
重点关注getServletContext,之前说servletConfig是容器向servlet传递参数的载体,那么它也可以让Servlet获取其在容器中的上下文。
ServletContext是针对一个web应用,jdk中具体描述——
There is one context per "web application" per Java Virtual Machine. (A "web application" is a collection of servlets and content installed under a specific subset of the server's URL namespace such as /catalog
and possibly installed via a .war
file.)
2.2.ServletRequest
获取客户端发来的请求数据。(查看api)
note:注意getAttribute和getParameter的区别。
getAttribute( String name )可以得到由setAttribute()设置的参数值,相当于是使用getAttribute()得到一
个自己定义的参数,而不是从客户端得到的参数。
getParameter( String name )它用来获取客户端通过get或post方法等传递过来的值,是从客户端传递过来的,
一般指的是客户端提交的表单组件的值。
note:setCharacterEncoding在什么时候使用才有效?
它可以覆盖请求正文中所使用的字符编码,但是它必须在读取parameters之前设置,否则无效。
2.3.ServletResponse
响应客户端请求。(查看api)
(三)GenericServlet抽象类
为了简化serlvet的编写,在javax.servlet包中提供了一个抽象类GenericServlet,它给出了除service()方法以外的简单实现。
GenericServlet定义了一个通用的,不依赖具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。
public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable
(四)HttpServlet抽象类
HttpServlet主要是应用于HTTP协议的请求和响应,为了快速开发HTTP协议的serlvet,sun提供了一个继承自GenericServlet的抽象类HttpServlet,
用于创建适合Web站点的HTTP Servlet。
public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
重点关注HttpServlet中的一个私有方法service。
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException { String method = req.getMethod(); if (method.equals(METHOD_GET)) {
long lastModified = getLastModified(req);
if (lastModified == -1) {
// servlet doesn't support if-modified-since, no reason
// to go through further expensive logic
doGet(req, resp);
} else {
long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
if (ifModifiedSince < (lastModified / 1000 * 1000)) {
// If the servlet mod time is later, call doGet()
// Round down to the nearest second for a proper compare
// A ifModifiedSince of -1 will always be less
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
} } else if (method.equals(METHOD_HEAD)) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp); } else if (method.equals(METHOD_POST)) {
doPost(req, resp); } else if (method.equals(METHOD_PUT)) {
doPut(req, resp); } else if (method.equals(METHOD_DELETE)) {
doDelete(req, resp); } else if (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp); } else if (method.equals(METHOD_TRACE)) {
doTrace(req,resp); } else {
//
// Note that this means NO servlet supports whatever
// method was requested, anywhere on this server.
// String errMsg = lStrings.getString("http.method_not_implemented");
Object[] errArgs = new Object[1];
errArgs[0] = method;
errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
}
}
而它实现Servlet接口的service方法,是将ServletResponse对象和ServletRequest对象转化成httpServletResponse对象和HttpservletRequest对象,
然后再调用私有方法service。它根据request获取Http method(get、post等)的名称,根据http method调用不同的方法执行操作。
(五)HttpServletRequest、HttpServletResponse
由于HttpServletRequest和HttpServletResponse都是基于Http协议“升级改造”的,所以这两个对象较之ServletRequest和ServletResponse多出的方法主要和
Http协议相关。
例如:Cookie、request(response)headers、Session、URL等。
具体请查看api。
javaWeb学习总结(3)- Servlet总结(servlet的主要接口、类)的更多相关文章
- Javaweb学习笔记——(九)——————Servlet的进入,及ServletConfig、GenericServlet、HttpServlet、ServletContext、获取类路径资源
Servlet1.什么是Servlet? *Servlet是Javaweb三大组件之一(Servlet,Filter,Listener) *Servlet是用来处理客户端请求的动态资源 *Servle ...
- JavaWeb学习笔记(三)—— Servlet
一.Servlet概述 1.1 什么是Servlet Servlet是是sun公司提供一套规范(接口),是JavaWeb的三大组件之一(Servlet.Filter.Listener),它属于动态资源 ...
- JavaWeb学习总结(二) Servlet
本文目录 一.Servlet概述 二.Servlet接口 三.GenericServlet 四.HttpServlet 五.Servlet细节 六.ServletContext 回到顶部 一.Serv ...
- JavaWeb学习总结第四篇--Servlet开发
Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...
- javaWeb学习总结(3)- Servlet基础
Servlet的应用 Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的web页面.它担当Web浏览器或其他http客户程序发出请求. 与http服务器上的数据库或应用程 ...
- JavaWeb学习总结(三)—Servlet
1. 什么是Servlet * Servlet是JavaWeb三大组件之一(Servlet.Filter.Listener) ,Servlet是用来处理客户端请求的动态资源,按照一种约定俗成的称呼习惯 ...
- JavaWeb学习记录(八)——servlet获取配置信息
jdbc.properties内容如下: jdbcUrl=jdbc\:mysql\://localhost\:3306/animaluser=rootpass=root servlet获取资源信息代码 ...
- JavaWeb学习记录(五)——Servlet随机产生验证码
随机产生验证码的工具类: import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;impo ...
- javaweb学习总结二十四(servlet经常用到的对象)
一:ServletConfig对象 1:用来封装数据初始化参数,在服务器web.xml配置文件中可以使用<init-param>标签配置初始化参数. 2:实例演示 web.xml文件中配置 ...
- javaweb学习总结二十二(servlet开发中常见的问题汇总)
一:web应用的映射问题 通常我们从别人那里拷贝来的代码,自己会修改应用的名称,但是web映射的访问路径并没有修改,还是原来的映射. 解决方法: 工程右键--properties--myeclipse ...
随机推荐
- Android自定义ListView的Item无法响应OnItemClick的解决办法(转)
原文链接:http://www.linuxidc.com/Linux/2011-09/43205.htm 如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那 ...
- JavaScript编码解码以及C#中的编码解码
JS: 编码 解码 escape unescape encodeURI decodeURI encodeURIComponent decodeURIComponent C#: HttpUtilit ...
- 一些IO流的知识
IO流: 输入流:输出流: 字节流:字符流:为了处理文字数据方便而出现的对象. 其实这些对象的内部使用的还是字节流(因为文字最终也是字节数据) 只不过,通过字节流读取了相对应的字节数,没有对这些字节直 ...
- NOIP2001T4car的旅行计划
洛谷传送门 一看数据就是floyed(毕竟年代久远),然而建图不是那么好贱好建,只知道三个机场,需要判断斜边来求第4个机场坐标. 往后一些麻烦的建图. 最后floyed就好. --代码 #includ ...
- CF IndiaHacks 2016 F Paper task 后缀数组
题目链接:http://codeforces.com/problemset/problem/653/F 大意是给出一个只包含'('和')'的括号串,求有多少不同的子串是合法的括号串 解法:对于每一个后 ...
- JS的块级作用域
今天带来的是 "对<你不知道的js>中块级作用域的总结" 分享: 1)用with从对象中创建出来的作用域只在with声明中而非外部作用域有效,同时可以访问已有对象的属性 ...
- APP品牌具体有哪几个要素?又是如何操作的?
对于品牌的一些认识 首先我们要知道,品牌是由用户与公司及其产品&服务互动后所产生的,失去了与用户互动并且承认的是伪品牌,对于开发者来说,APP的品牌要先从标志与颜色考虑起,但实话实说,标志与颜 ...
- Understanding a Kernel Oops!
Understanding a kernel panic and doing the forensics to trace the bug is considered a hacker's job. ...
- jquery通过ajax向后台发送(checkbox)数组,并在后台接收,(发送的数据是checkedbox)
版权声明:本文为博主原创文章,未经博主允许不得转载. $(document).ready(function(){ var flag = 1; $("#delBtn").click( ...
- 一句话告诉你JQuery $(this)到底指的是什么,怎么用
看了网上好多关于jquery $(this)的解释,感觉都说的很模糊. 下面说出我自己的理解. this表示的是当前对象,下面以例子来说明 <!DOCTYPE html> <html ...