Servlet知识点总结
来源:互联网 发布:linux查看hca卡 编辑:程序博客网 时间:2024/06/11 03:47
Servlet知识点总结
1.什么是Servlet?
其实Servlet就是一个类,又称服务器端的小应用程序,处理客户端的请求和响应。
2.Servlet接口:
(1)Servlet的使用规则:Servlet是一个接口,所以我们需要创建一类来实
现它。
(2)Servlet的五大方法:
init(ServletConfig config);//初始化
getsServletConfig();//此接口的实现负责存储 ServletConfig 对象,以便此
方法可以返回该对象。实现此接口的 GenericServlet 类已经这样做了。
Service(ServletRequest req, ServletResponse res);//服务
getServletInfo();//返回有关 servlet的信息,比如作者、版本和版权。
Destory();//销毁Servlet
(3)Servlet的生命周期:其中构造方法和init方法只在第一次访问时被调用,
而service时每次请求都被调用。
a.构造servlet(属于默认构造),然后init方法将其初始化
b.处理来自客户端的所有对servies方法的调用
C.由Servlet容器调用,指示从服务器取出servlet然后使用destroy方法
销毁它,最后进行垃圾回收并终止它
知识点:如何让Service在服务器启动时就创建,就需要在web.xml文件中,
进行配置:<load-on-startup>”此处填写除0以为的任意正整
数”</load-on-startup>
(4)Servlet执行过程:
(5)Servlet线程安全:
Servlet单实例,多线程,所以应该写局部变量,而不是全局变量。
3.Servlet的三种创建方式:
a.如上所述,实现Servlet接口
B.继承GenericServlet类(适配器模式):属于abstrack class,使编写Servlet
更加简易了。
extends Object
implements Servlet,ServletConfig,Serializable
实现了Servlet除service的所有方法,因此我们只需要重写抽象方法
service就可以了
C.继承http.HttpServlet类(模板方法设计模式):属于public abstract
class,此创建方法使我们经常用到的
Extends: GenericServlet
Implements: java.io.Serializable
不需要重写父类的service方法,因为其属于模板方法,就体现在service
上,要想实现自己的需求,我们需要实现一系列的以do开头的方法,如
doget,dopost等等。
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;
try {
ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
} catch (IllegalArgumentException iae) {
// Invalid date header - proceed as if none was set
ifModifiedSince = -1;
}
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);
}
}
HttpServlet重写GenriceServlet的service方法,来调用自己的service
方法,其本身目的是把请求与响应强转成拥有http协议的:
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest) req;
response = (HttpServletResponse) res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}
4.ServletContext对象(可从ServletConfig中得到):一个应用只有一个
ServletContext对象,单实例,底层为map实现
a.三个作用:
域对象的方法:
通过map来实现Servlet共享,用到的方法有(都是对map的操作)
serAttribute(String name,Object value);
getAttribute(String name);
removeAttribute(String name);
获取全局配置信息的方法:
this.getServletContext().getInitParameter(“encoding”);
获取资源路径的方法:
String path=this.getServletContext().getRealPath(“给出路
径”);
Properties pro =new Properties();
Pro.load(new FileInputStream(path));
然后输出:pro.gerProperty(“key”);
b.Servlet的转发:
this.getServletContext.getRequestDispatcher(String
path).forward(request,response);
由于本人正在剖析tomacat的源码,所以对Servlet各个类之间的关系做了整理,如下图:
对于javax.servlet.*和javax.servlet.http.*的夹包里面的东西还有很多,我也没有研究完,就把自己分析到的写了一点笔记,若有问题,还希望各位大神指点,虚心求教。
- Servlet知识点总结
- servlet知识点总结
- Servlet知识点总结
- Servlet零散知识点总结
- Servlet知识点总结
- Servlet知识点总结
- JavaWeb:Servlet知识点总结
- servlet知识点总结
- jsp和servlet知识点总结
- jsp和servlet知识点总结 .
- Servlet常见知识点简单总结
- jsp和servlet知识点总结
- 所学的servlet知识点总结
- JSP和servlet知识点总结
- Servlet第一章知识点总结——Servlet 基础
- Servlet第二章知识点总结——Servlet基础
- Servlet第三章知识点总结——Servlet生命周期
- Servlet第七章知识点总结——Servlet监听器
- building machine learning system with Python 学习笔记--从零开始机器学习(3)第一个应用
- 文章标题
- vue.js环境配置
- AutoLayout(III):浅析动画
- 进制与位运算(二)
- Servlet知识点总结
- 信息安全工程师 学习笔记(九)
- 360前端星计划(二)
- 线性表 链表结构的实现
- UIScrollView的多ContentView的问题
- ubuntu-C++拿到本机IP地址
- LeetCode 99. Recover Binary Search Tree Add to List
- css3字体缩放样式-webkit-text-size-adjust的用法详解
- TCP/IP四层模型