java web servlet
一、什么是Servlet
Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,他是运行在Servlet容器当中,例如Tomcat就是一种流行的Servlet容器。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
二、Servlet类
在eclipse里面新建一个Servlet类,在代码区域可以看出它是继承HttpServlet类,继续通过F3键追踪HttpServlet类,发现HttpServlet继承GenericServlet类,继续深入发现GenericServlet是继承实现接口Servlet、ServletConfig、Serializable接口,看下面类图:
附类定义如下:
public abstract class HttpServlet extends GenericServlet public abstract class GenericServlet
implements Servlet, ServletConfig, java.io.Serializable
三、Servlet容器响应客户请求的过程
具体的请求过程如下,不过这里需要注意的是如果Servlet实例已经创建那么会直接从D步骤开始执行,否则从B步骤开始执行请求流程。
A、Servlet引擎检查是否已经装载并创建了该Servlet的实例对象
B、装载并创建该Servlet的一个实例对象;调用该Servlet的构造器
C、调用Servlet实例对象的init方法
D、创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的Service方法并将请求和响应对象作为参数传递进去
E、Web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory方法
其核心步骤无非就是接口Servlet里面的init(ServletConfig config),void service(ServletRequest req, ServletResponse res),destroy()三个方法。
四、Servlet的注册与运行以及映射
Servlet程序必须在web.xml文件中进行注册和映射其访问路径,只有这样才可以被Servlet引擎加载和被外界访问。一个<Servlet>元素用于注册一个Servlet,主要包含两个子元素,分别是<servlet-name>和<servlet-class>,表示是
Servlet的名称与全类名。一个<servlet-mapping>元素用于映射一个已经注册的Servlet对外访问的路径,包含两个子元素,<servlet-name>和<url-pattern>,表示Servlet的名称与web访问的相对路径。具体的模板如下:
<!-- 配置和映射 Servlet -->
<servlet>
<!-- Servlet 注册的名字 -->
<servlet-name>servletname</servlet-name>
<!-- Servlet 的全类名 -->
<servlet-class>com.wucj.defaultpkg.servlet</servlet-class>
</servlet> <servlet-mapping>
<!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 -->
<servlet-name>servlet</servlet-name>
<!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. -->
<url-pattern>/demo.html</url-pattern>
</servlet-mapping>
这里需要注意的是同一个Servlet可以被映射到多个url上面,就是多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名字。在这里不得不提通配符,只有两种固定格式;A、 *.扩展名;B、/* ,如下:
<servlet-mapping>
<servlet-name>servletname</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>servletname</servlet-name>
<url-pattern>/action/*</url-pattern>
</servlet-mapping>
五、ServletConfig 接口
Servlet引擎将代表Servlet容器的对象ServletContext和servlet的配置参数封装到ServletContext对象中,在初始化Servlet实例对象时传递给该Servlet。接口具体定义如下:
public interface ServletConfig { public String getServletName(); public ServletContext getServletContext(); public String getInitParameter(String name); public Enumeration<String> getInitParameterNames(); }
具体的作用就是在Servlet程序中可以调用这些方法获取相关信息。Servlet引擎调用Servlet的实例对象init(ServletConfig config)方法会将ServletConfig对象传递给Servlet。Servlet.getServletConfig()方法必须返回init(ServletConfig config)方法传递进来的这个ServletConfig对象的引用。
六、ServletContext接口
Servlet引擎为每个web应用程序都创建一个对应的ServletContext对象,ServletContext对象包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用。同一个web应用程序中所有的Servlet都共享同一个ServletContext对象。
ServletContext servletContext = servletConfig.getServletContext();
七、HttpServletRequest 与 HttpServletResponse
在这里不得不说HttpServlet对象,它是一个 Servlet, 继承自 GenericServle, 针对于 HTTP 协议所定制。ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现。在 service() 方法中直接把 ServletReuqest 和 ServletResponse 转为 HttpServletRequest 和 HttpServletResponse。并调用了重载的 service(HttpServletRequest, HttpServletResponse),源代码是:
@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);
} public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1. 获取请求方式.
String method = request.getMethod(); //2. 根据请求方式再调用对应的处理方法
if("GET".equalsIgnoreCase(method)){
doGet(request, response);
}else if("POST".equalsIgnoreCase(method)){
doPost(request, response);
}
}
在对象HttpServletRequest中可以获取丰富的请求信息,例如:
getMethod:返回HTTP请求消息中的请求方式。
getQueryString :返回请求行中的参数部分。
getServletPath方法:Servlet的名称或Servlet所映射的路径。
getRemoteAddr方法返回发出请求的客户机的IP地址。
getRemoteHost方法返回发出请求的客户机的完整主机名。
getRequestURL方法返回客户端发出请求时的完整URL。
getHeaders方法 。
以及获取请求参数的方法:getParameter方法、getParameterValues方法、getParameterNames方法、getParameterMap方法 。
forward和include方法接收的两个参数必须是传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象,或者是对它们进行了包装的ServletRequestWrapper 或ServletResponseWrapper对象。
八、那么该怎样用一句话来形容Servlet了?
java web servlet的更多相关文章
- Java Web Servlet知识点讲解(一)
一.Web应用架构 如图所示: HTTP协议:一个简单的请求一响应协议,通常运行在TCP之上,它指定了客户端可能发送给服务器什么样的信息以及得到什么样的响应. JDBC:Java语言中用来规范客户端程 ...
- Java Web -- Servlet(1) 必备知识
学习Java WEB开发必备的基本概念: 1.WEB 本意是蜘蛛网和网的意思.在网页设计中我们称为网页的意思. 现广泛译作网络.互联网等技术领域.表现为三种形式,即超文本(hypertext).超媒体 ...
- 天坑 之 java web servlet+jsp项目 配置后 404 (MyEclipse转eclipse)
最近搞一个自己的博客系统玩,用了servlet+jsp,结果发现了两个大问题: 1.无法 Export 出 WAR文件: 2.生成WAR,放置到TOMCAT的 webapps目录后,http://lo ...
- Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)
三.Servlet的生命周期 一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet怎样被加载并被初始化,怎样接收请求并作出对请求的响应,怎样被从服务中清除.Servlet ...
- java web Servlet开发(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
- java web Servlet开发(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向 ...
- [Java.Web] Servlet 的一些细节
本文来自 传智播客视频PPT 1. 由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工 ...
- java Web servlet简介及其生命周期
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...
- 深入理解Java Web——Servlet
1.概述 狭义上看,是java的一个接口. 广义上看,任何直接或间接实现了Servlet接口的类. 2.核心对象 下面就是Servlet接口的内容: public abstract interface ...
随机推荐
- mysql SQL_MODE设置
1.1. SQL_MODE设置 在生产环境中强烈建议将这个值设置为严格模式,这样有些问题可以在数据库的设计和开发阶段就能实现,而如果在生产环境下运行数据库后发现这类问题,那么修改的代价将变得十分巨 ...
- Hadoop中OutputFormat解析
一.OutputFormat OutputFormat描述的是MapReduce的输出格式,它主要的任务是: 1.验证job输出格式的有效性,如:检查输出的目录是否存在. 2.通过实现RecordWr ...
- Selenium用户扩展
Selenium用户扩展 这很容易扩展Selenium IDE加入自定义操作,断言和定位,策略,这是通过添加方法,在JavaScript的帮助下Selenium 对象原型.在启动时,Selenium会 ...
- [Web API] 如何让 Web API 统一回传格式以及例外处理[转]
[Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...
- Unicode转为UTF8
Unicode转换为UTF8 要说这个转换也简单,使用WideCharToMultiByte两次或者直接一次就可以转换. 今天在弄VLC的时候,由于VLC的视频文件名使用UTF8编码,因此当路径中包含 ...
- mysql操作时遇到的小问题
mysql数据库在程序中执行sql语句时,或者在执行sql时,数据库表可能会有一些特殊的字符,比如说#,.等,这样在执行时 可能会遇到问题 如以下的表名,backup_2014.2.22, 这个表在查 ...
- C语言相关图书推荐
C Primer Plus(第5版 中文版) 作 者 [美] 普拉塔(Prata S.) 著:云巅工作室 编 出 版 社 人民邮电出版社 出版时间 2005-02-01 版 次 1 ...
- [转]使用CSS3 Grid布局实现内容优先
使用CSS3 Grid布局实现内容优先 http://www.w3cplus.com/css3/css3-grid-layout-module.html 本文由大漠根据Rachel Andrew的& ...
- 【现代程序设计】【homework-07】
C++11 中值得关注的几大变化 1.Lambda 表达式 Lambda表达式来源于函数式编程,说白就了就是在使用的地方定义函数,有的语言叫“闭包”,如果 lambda 函数没有传回值(例如 void ...
- typedef typedef struct的使用
typedef通常情况用于声明结构体之类的 1,定义某些便于记忆的结构体或者使现有的类型看上去更加整齐,比如后来因为经常使用而被添加进入c/c++标准头文件的stdint.h typedef sign ...