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 ...
随机推荐
- 【转】cocos2d-x Lua
Call custom c++ from Lua cocos2d-x lua binds c++ class, class functions ,enum and some global functi ...
- K2 blackpearl 安装
转:http://blog.csdn.net/gxiangzi/article/details/8432188 K2是国外的一款BPM引擎,基于MS的Workflow,关于它的详细介绍在我之前一片博客 ...
- 【转】traits技术及模板偏特化
#include <iostream> using namespace std; struct __xtrue_type { }; // define two mark-type stru ...
- mybatis Mapper XML 文件
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
- golang学习之指针、内存分配
func pointer_test() { //空指针,输出为nil var p *int fmt.Printf("p: %v\n", p) //指向局部变量,变量值初始为0 va ...
- Shell获取Aix/linux/unix机器上db2和os的信息并上传到指定服务器
(之前写过一篇类似的文章,当时传输文件用的是ftp,因为项目觉得ftp不够安全所以这次换成了scp,同时对脚本的一些地方也做了一些调整) 其实做这个东西还是因为项目的需求,需要获取某些机器(目前主要是 ...
- GRID控件删除之前确认
<asp:TemplateField HeaderText="删除新闻" ShowHeader="False"><ItemTemplate&g ...
- Python十分钟入门
[简介] Python是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. [特点] 1. Python使用C ...
- 怎么用PHP在HTML中生成PDF文件
原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PH ...
- WCF启用Session
1 服务类添加ASPNETSESSION兼容标记 [System.ServiceModel.Activation.AspNetCompatibilityRequirements(Requirement ...