Servlet API
Servlet API的查询网址:通过Tomcat的官网链接找到
可见,Servlet API有4个packages
javax.servlet // 包含定义Servlet和Servlet容器之间契约的类和接口
javax.servlet.http // 包含定义Http Servlet和Servlet容器之间契约的类和接口
javax.servlet.annotation // 包含标注Servlet、Filter、Listener标注的标注。
javax.servlet.description // 包含提供程序化登录web应用程序的配置信息的类型。
Servlet接口
Servlet技术的核心是javax.servelt.Servlet接口,该接口是所有Servlet类必须直接或者间接实现的一个接口。
Servlet接口定义了Servlet与Servlet容器之间的契约,即Servlet容器将Servlet类载入内存,并在Servlet实例上调用具体的方法,在每个应用程序中,每种Servlet类型只能有一个实例。
Servlet接口中定义了5个抽象方法
Servlet没有main()方法,所有的行为都由Servlet容器控制,调用Servlet方法时的参数也有Servlet容器传递。
ServletRequest接口
对于每一个HTTP请求,Servlet容器都会创建一个javax.servlet.ServletRequest实例,并将其传递给Servlet的service()方法。ServletRequest实例封装了这个HTTP请求的信息。
常用的方法有:
public int getContentlength() // 获得请求主体的字节数
public String getContentType() // 获取请求主体的MIME类型
public String getProtocol() // 获得这个HTTP请求的协议名称和版本
public String getParameter(String name) // 获取指定参数的值,通常用于返回HTML表单域的值或者查询字符串的值
public String getParameterNames()
public String getParameterMap()
public String getParameterValues()
ServletResponse接口
javax.servlet.ServletResponse接口表示一个Servlet响应。在调用Servlet的service()方法前,Servlet容器会首先创建一个ServletResponse实例,并将其作为第二个参数传递给service(),ServletResponse隐藏了向浏览器发送相应的复杂过程。
常用方法有:
public java.io.PrintWriter getWriter() // 得到一个向客户端发送文本的PrintWriter实例。默认使用ISO-8895-1编码
public ServletOutputStream getOutputStream() // 用于发送二进制数据的
pubic void setContentType(String type) // 设置相应的内容类型,比如"text/html"表示内容类型为HTML
ServletConfig接口
ServletConfig实例对象可以封装通过注解(@WebServlet)或者部署描述符(web.xml文件)传递给Servlet的初始配置信息。
当Servlet容器初始化Servlet时,Servlet容器会向Servlet的init()方法传入一个ServletConfig实例对象。因此在Servlet内部可以通过调用ServletConfig的响应方法获得初始参数的值
通过注解或者部署描述符传入的每一条信息就叫做一个初始参数。每个初始参数由key和value两个元件组成。
该接口只有4个方法
使用ServletConfig在Servlet中获取初始参数的范例
package app01a; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet; @WebServlet(name = "ServletConfigDemoServlet", urlPatterns = { "/servletConfigDemo" }, //url映射
initParams = { @WebInitParam(name = "admin", value = "harry Taciak"), // 向Servlet中传入初始参数
@WebInitParam(name = "emial", value = "admin@example.com") // 向Servlet中传入初始参数
}
)
public class ServletConfigDemoServlet implements Servlet {
private transient ServletConfig servletConfig;
@Override
public void destroy() { } @Override
public ServletConfig getServletConfig() {
return this.servletConfig;
} @Override
public String getServletInfo() {
return "servletConfig demo";
} @Override
public void init(ServletConfig servletConfig) throws ServletException {
this.servletConfig = servletConfig;
} @Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
ServletConfig servletConfig = getServletConfig();
String admin = servletConfig.getInitParameter("admin");
String email = servletConfig.getInitParameter("email");
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
writer.print("<html><head></head><body>" +
"Admin: " + admin +
"<br/>Email: " + email +
"</body></html>");
}
}
ServletContext接口
ServletContext实例对象表示Servlet应用程序,每个Web应用程序只有一个上下文。
通过调用ServletConfig对象的getServletContext()方法,可以获得ServletContext实例对象。
ServletContext用于Web应用中的资源共享。有了ServletContext,就可以共享从应用程序中的所有资料出访问到的信息,并且可以动态注册Web对象。
ServletContext将Web对象保存在ServletContext中的一个内部Map中,保存在ServletContext中的对象称为属性。
GenericServlet抽象类
public abstract class GenericServlet
extends java.lang.Object
implements Servlet, ServletConfig, java.io.Serializable
GenericServlet抽象类实现了Servlet接口和ServletConfig接口。并完成了以下工作:
-- 将init()方法中的ServletConfig对象赋给一个类的成员变量,来保存ServletConfig,从而可以通过调用getServletConfig()获得ServletConfig对象。其实现代码如下:
public void init (ServletConfig servletConfig) throws ServletException {
this.servletConfig = servletConfig;
this.init(); // 这是 GenericServlet 提供的一个没有参数的init()方法,可以通过覆盖init()来提供初始化代码
}
-- 为Servlet接口中的除了service()方法外提供默认的实现
-- 提供方法,包围ServletConfig中的方法.
HttpServlet抽象类
public abstract class HttpServlet
extends GenericServlet
HttpServlet类覆写了GenericServlet类中的service()方法;同时还重载了另外一个service() 方法,二者的参数类型不同。
覆盖后的service()方法将Servlet容器的ServletRequest和ServletResponse对象分别转化成HttpServletRequest和HttpServletResponse对象,并调用新的service()方法。
public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest) req; // 类型转换
response = (HttpServletResponse) resp; // 类型转换
} catch (ClasscastException e) {
throw new ServletException("non-Http request or response");
}
service(request, response); // 调用新的service()方法
} // 由于在调用Servlet的service()时,Servlet容器总会传入一个HttpServletRequest和一个HttpServletResponse,预备使用Http,因此这种转换总会成功。
然后,HttpServlet中的service()方法会检查用来发送请求的HTTP请求方法(通过调用HttpServletRequest的getMethod()方法获得),并根据HTTP方法调用相应的doGet()、doPost()、doHead()、doPut()、doTrace()、doOptions()、doDelete()中的一个。
因此不需要覆写service()方法了,只需要覆写相应的doXxx()即可,其中doGet()和doPost()最常用。
总之,HttpServlet有两个特性是GenericService()所不具备的
(1)不用覆写service()方法,而是覆写doGet()、doPost()、或者其他doXxx()方法
(2)使用HttpServletRequest和HttpServletResponse,而不是ServletRequest和ServletResponse。
HttpServletRequest接口
HttpServletRequest表示在HTTP环境中的ServletRequest。
public interface HttpServletRequest
extends ServletRequest
HttpServletResponse接口
HttpServletResponse表示在HTTP环境中的ServletResponse。
public interface HttpServletResponse
extends ServletResponse
Servlet API的更多相关文章
- Struts2中获取servlet API的几种方式
struts2是一个全新的MVC框架,如今被广大的企业和开发者所使用,它的功能非常强大.这给我们在使用servlet 纯java代码写项目的时候带来了福音.但是一般来说,我们的项目不到一定规模并不需要 ...
- Servlet API遍程常用接口和类
本文主要总结Servlet API遍程常用接口和类 Servlet API http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html ...
- Struts2中使用Servlet API步骤
Struts2中使用Servlet API步骤 Action类中声明request等对象 Map<String, Object> request; 获得ActionContext实例 Ac ...
- 【SpringMVC】SpringMVC系列8之Servlet API 作为入参
8.Servlet API 作为入参 8.1.概述 MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数: HttpServletRequest HttpServletRes ...
- Struts2 Action与Servlet API耦合
单元测试在开发中是非常重要的一个环节程序员在写完代码时,相应的单元测试也应写完整,否则你的代码就是不能让人信服的Struts2将Action与Servlet的API进行解耦之后,就使得单元测试变得非常 ...
- struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...
- Action访问Servlet API
访问Servlet API 1.通过ActionContent类访问Servlet API ActionContext中访问Servlet API的几个常用的方法: (1)Map getApplica ...
- SingleThreadModel is deprecated in Servlet API version 2.4
Ensures that servlets handle only one request at a time. This interface has no methods. If a servlet ...
- struts2访问servlet API
搭建环境: 引入jar包,src下建立struts.xml文件 项目配置文件web.xml. web.xml: <?xml version="1.0" encoding=&q ...
- struts2中访问servlet API
Struts2中的Action没有与任何Servlet API耦合,,但对于WEB应用的控制器而言,不访问Servlet API几乎是不可能的,例如需要跟踪HTTP Session状态等.Struts ...
随机推荐
- 关于H5唤醒APP的功能实现(千辛万苦啊!)
首先,我是个后端,写java的,甚至不是搞移动端的,所以js这方面有点底子但不专业,对于出现的错误也请见谅,原来项目要求有个H5页面打开APP的功能就强行要做,没办法就想办法搞一下,网上的教程基本都是 ...
- GPS卫星定位防盗系统机芯
GPS卫星定位防盗系统机芯,一般安装在驾驶室的操作台内,包括GPS模块,安装时需要先把车门打开,并把两边的车门拆卸下来,才能拆卸驾驶仪表台,再按说明书安装GPS定位防盗机芯,同时置于4A/12V免维护 ...
- WEB常用前端开发调试工具介绍
只要是设计开发,就需要进行调试,尽管相对来说,前端的调试要简单一些,但使用一些调试工具或插件还是能提高你的工作效率.下面是一些主要用于IE浏览器环境和Firefox浏览器环境等的调试工具简介. 一.I ...
- 四层协议给站点设置独享ip
四层协议给站点设置独享ip 初始化为四层节点 设置独占ip 设置独享的产品不用预设置分组 增加站点 创建站点后,在分组解析里会自动创建一个以站点名为名称的分组并且会自动分配一个独享的ip在这个分组里( ...
- weblogic threadpool has stuck threads
https://blog.csdn.net/wyx713510713/article/details/12705221 最近项目启动时出问题,weblogic的nohup日志文件中找到下面一段(红色部 ...
- Unity时钟定时器插件——Vision Timer源码分析之一
因为项目中,UI的所有模块都没有MonBehaviour类(纯粹的C#类),只有像NGUI的基本组件的类是继承MonoBehaviour.因为没有继承MonoBehaviour,这也不能使用Updat ...
- The Attention Merchants
Title: The Attention Merchants (书评类文章) <注意力商人> attention 注意力 merchant 商人(零售商,强调通过贩卖物品获取利益) bu ...
- 删除sslvpn用户
config user localedit xinghen unset two-factornextend config user groupedit vpngroup unselect member ...
- IntelliJ IDEA 运行 Maven 项目
1.官方文档说IntelliJ IDEA已经自身集成了maven,则不用劳心去下载maven 2.导入一个程序,看是否是maven程序的关键在于工程之中有没有pom.xml这个文件,比如这里 3. ...
- __block的初步用法
再block中使用 self 时,要在前面加上__block. 防止在block中用到self时把self对象retain, 造成内存泄露. __block UIViewController *saf ...