- 浏览: 1116137 次
文章分类
- 全部博客 (379)
- S2SH (16)
- stuts2 (0)
- java语言 (81)
- JSP (17)
- <html>元素 (11)
- javaweb (4)
- web容器 (3)
- ext (23)
- javaScript (48)
- ant (1)
- liferay (1)
- sql (9)
- css (42)
- 浏览器设置 (3)
- office_world (1)
- eclipse (4)
- 其它 (28)
- 操作系统 (5)
- android (6)
- Struts2 (11)
- RegEx (3)
- mysql (5)
- BigDATA (1)
- Node.js (1)
- Algorithm (10)
- Apache Spark (1)
- 数据库 (5)
- linux (2)
- git (1)
- Adobe (3)
- java语言,WebSocket (1)
- Maven (3)
- SHELL (1)
- XML (2)
- 数学 (2)
- Python (2)
- Java_mysql (1)
- ReactJS (6)
- 养生 (4)
- Docker (1)
- Protocols (3)
- java8 (2)
- 书籍 (1)
- Gradle (2)
- AngularJS (5)
- SpringMVC (2)
- SOAP (1)
- BootstrapCSS (1)
- HTTP协议 (1)
- OAuth2 (1)
最新评论
-
Lixh1986:
Java并发编程:自己动手写一把可重入锁https://blo ...
Java之多线程之Lock与Condition -
Lixh1986:
http://win.51apps.com.cn/https: ...
temp -
ztwsl:
不错,支持很好
HttpServletRequest和ServletRequest的区别 -
guodongkai:
谢谢您能将知识精华汇编总结,让初学者们从原理中学会和提高。
javaScript之function定义 -
kangwen23:
谢谢了,顶顶
struts2中的ValueStack学习
一、在哪里
Java Servlet 中所有用的类和接口都位于这两个包下:
1、javax.servlet
2、javax.servlet.http
前者包含了支持通用的、不依赖某个具体协议的类和接口。
后者继承扩展了 javax.servlet 包中的类,包含只针对 http 协议的类和接口的实现(理论上还支持其它协议的实现,http协议只是其中一种)。
包名使用 javax 开头而不是 java。 x 表示:extention (ex发音:x)意为:扩展
表明 servlet 不属于 Java Standard Edition(Java SE),
而是属于 Java Enterprise Edition(Java EE)
使用 servlet 时,需要引用类库: servlet-api.jar
可以到 oracle 或 maven 的网站上去找相应版本的类库。
二、 javax.servlet.Servlet 接口
每一个 servlet 类必须实现 javax.servlet.Servlet 接口。
Java为我们提供了两个部分实现了 javax.servlet.Servlet 接口的类,我们只需要继承它们其中之一即可:
1、javax.servlet.GenericServlet
2、javax.servlet.http.HttpServlet
照例,
前者是通用的、不依赖于某个具体协议
后者是专门用于http协议的对 servlet 的实现
三、Servlet 是如何运行的
1、servlet 是什么
不像一般可以直接运行的具有 main() 方法的 Java 程序,
servlet 没有 main() 方法,像一个没有图形界面的 Java Applet。
2、servlet 的主要方法:service()
servlet 不能独立运行,servlet 依赖于 web 容器执行。
当有请求到达 web 容器时,web 容器会调用 servlet 中的特定的方法: service()
来完成相应的操作。
3、service() 方法的参数
service() 方法有两个参数对象:一个代表请求,一个是代表响应。
这两个对象由 web 容器在请求到来时创建,并在调用 service() 方法时,传递进来。
请求对象:
包含了与请求相关的信息和对应方法,如请求头、请求类型(get, post)、请求参数、请求编码等
响应对象:
包含了与响应相关的信息和对应方法,如响应内容,响应内容的类型,响应内容的编码等。
4、说明
前面提到过,要写一个 servlet ,需要继承两个类中的任意一个:
1、javax.servlet.GenericServlet
2、javax.servlet.http.HttpServlet
如果继承了前者,只需要重写其 service() 方法即可。
如果继承了后者,当然也可以只重写其 service() 方法。但是,它还提供了针对请求类型的方法:doGet(),doPost()。
javax.servlet.http.HttpServlet 源码分析
在javax.servlet.http.HttpServlet.java 源码中可以看到,在其 service() 方法中,先获取请求的类型(req.getMethod()),然后根据不同的请求类型(get,post,update,delete),调用自己相应的方法(doGet(),doPost(),...)。而这些方法可能已经被我们重写。
所以也可以直接重写其 service() 方法,以处理所有类型的请求。
四、其它类
在 javax.servlet 和 javax.servlet.http 包下其它的类大部分都是辅助类。
例如:
1、
ServletRequest, ServletResponse 接口:
HttpServletRequest, HttpServletResponse 接口:提供了代表请求和响应的对象类。
2、
HttpSession 接口:提供了对 session 的跟踪和管理。
3、
Cookie 类:提供了对 Http Cookie 的创建和处理。
4、
ServletRequestWrapper, ServletResponseWrapper 类:
HttpServletRequestWrapper, HttpServletResponseWrapper 类: 允许开发者对 web 容器要生成的请求对象类和响应对象类进行重写,添加某些逻辑。例如:设置请求对象的参数编码。(需要继承该类,然后借助 Filter 实现 )
引用:
http://docstore.mik.ua/orelly/java-ent/servlet/ch02_02.htm
http://www.oracle.com/technetwork/java/index-jsp-135475.html
-
转载请注明
原文出处:http://lixh1986.iteye.com/blog/2324239
-
Java Servlet 中所有用的类和接口都位于这两个包下:
1、javax.servlet
2、javax.servlet.http
前者包含了支持通用的、不依赖某个具体协议的类和接口。
后者继承扩展了 javax.servlet 包中的类,包含只针对 http 协议的类和接口的实现(理论上还支持其它协议的实现,http协议只是其中一种)。
包名使用 javax 开头而不是 java。 x 表示:extention (ex发音:x)意为:扩展
表明 servlet 不属于 Java Standard Edition(Java SE),
而是属于 Java Enterprise Edition(Java EE)
使用 servlet 时,需要引用类库: servlet-api.jar
可以到 oracle 或 maven 的网站上去找相应版本的类库。
二、 javax.servlet.Servlet 接口
每一个 servlet 类必须实现 javax.servlet.Servlet 接口。
Java为我们提供了两个部分实现了 javax.servlet.Servlet 接口的类,我们只需要继承它们其中之一即可:
1、javax.servlet.GenericServlet
2、javax.servlet.http.HttpServlet
照例,
前者是通用的、不依赖于某个具体协议
后者是专门用于http协议的对 servlet 的实现
三、Servlet 是如何运行的
1、servlet 是什么
不像一般可以直接运行的具有 main() 方法的 Java 程序,
servlet 没有 main() 方法,像一个没有图形界面的 Java Applet。
2、servlet 的主要方法:service()
servlet 不能独立运行,servlet 依赖于 web 容器执行。
当有请求到达 web 容器时,web 容器会调用 servlet 中的特定的方法: service()
来完成相应的操作。
3、service() 方法的参数
service() 方法有两个参数对象:一个代表请求,一个是代表响应。
这两个对象由 web 容器在请求到来时创建,并在调用 service() 方法时,传递进来。
请求对象:
包含了与请求相关的信息和对应方法,如请求头、请求类型(get, post)、请求参数、请求编码等
响应对象:
包含了与响应相关的信息和对应方法,如响应内容,响应内容的类型,响应内容的编码等。
4、说明
前面提到过,要写一个 servlet ,需要继承两个类中的任意一个:
1、javax.servlet.GenericServlet
2、javax.servlet.http.HttpServlet
如果继承了前者,只需要重写其 service() 方法即可。
如果继承了后者,当然也可以只重写其 service() 方法。但是,它还提供了针对请求类型的方法:doGet(),doPost()。
javax.servlet.http.HttpServlet 源码分析
在javax.servlet.http.HttpServlet.java 源码中可以看到,在其 service() 方法中,先获取请求的类型(req.getMethod()),然后根据不同的请求类型(get,post,update,delete),调用自己相应的方法(doGet(),doPost(),...)。而这些方法可能已经被我们重写。
所以也可以直接重写其 service() 方法,以处理所有类型的请求。
四、其它类
在 javax.servlet 和 javax.servlet.http 包下其它的类大部分都是辅助类。
例如:
1、
ServletRequest, ServletResponse 接口:
HttpServletRequest, HttpServletResponse 接口:提供了代表请求和响应的对象类。
2、
HttpSession 接口:提供了对 session 的跟踪和管理。
3、
Cookie 类:提供了对 Http Cookie 的创建和处理。
4、
ServletRequestWrapper, ServletResponseWrapper 类:
HttpServletRequestWrapper, HttpServletResponseWrapper 类: 允许开发者对 web 容器要生成的请求对象类和响应对象类进行重写,添加某些逻辑。例如:设置请求对象的参数编码。(需要继承该类,然后借助 Filter 实现 )
// wrapper class public class EnCodingRequestWrapper extends HttpServletRequestWrapper { private String charset = "UTF-8"; public EnCodingRequestWrapper(HttpServletRequest request) { super(request); } public EnCodingRequestWrapper(HttpServletRequest request, String charset){ super(request); this.charset = charset; } // override its getParameter() method. @override public String getParameter(String name) { String value = super.getParameter(name); value = value == null ? null : convert(value); return value; } private String convert(String target) { System.out.println("before convert: " + target); try { return new String(target.trim().getBytes("ISO-8859-1"), charset); } catch (UnsupportedEncodingException e) { return target; } } } // filter class public class ContentTypeFilter implements Filter { private String charset = "UTF-8"; // default @override public void init(FilterConfig config) throws ServletException { String charset = config.getServletContext().getInitParameter("charset"); if( charset != null && charset.trim().length() != 0){ this.charset = charset; } } @override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // set character encoding for request, response objects in the filter. request.setCharacterEncoding(charset); response.setCharacterEncoding(charset); // if the request type is "GET", // then replace the request object with our wrapped one. HttpServletRequest req = (HttpServletRequest)request; if(req.getMethod().equalsIgnoreCase("GET")){ req = new EnCodingRequestWrapper(req,charset); } // pass the request, response objects to next filter. System.out.println("Request is filtered by: " + config.getFilterName()); chain.doFilter(req, response); System.out.println("Response is filtered by: " + config.getFilterName()); } } /* <context-param> <param-name>charset</param-name> <param-value>UTF-8</param-value> </context-param> <filter> <filter-name>ContentTypeFilter</filter-name> <filter-class>filter.ContentTypeFilter</filter-class> </filter> <filter-mapping> <filter-name>ContentTypeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> */
引用:
http://docstore.mik.ua/orelly/java-ent/servlet/ch02_02.htm
http://www.oracle.com/technetwork/java/index-jsp-135475.html
-
转载请注明
原文出处:http://lixh1986.iteye.com/blog/2324239
-
发表评论
-
javaWeb session失效时间设置
2018-04-25 14:19 2017session失效时间设置 session失效时间设 ... -
JSP 表达式 VS EL 表达式 用法比较
2017-06-21 06:03 1055应用场景: 根据访问路径URL,判断当前用户选择使用的语言。转 ... -
JSP之 @include VS jsp:include
2017-06-17 01:39 1420第一篇 对于可以重复使用的一段代码, 1、使用 <%@ ... -
JavaEE之(Servlet+Filter)环境搭建
2017-04-01 14:15 1061初学 Java Web 开发,请远 ... -
Servlet之单例与线程安全
2017-02-06 13:04 4443一、Servlet 是单例吗 不 ... -
Servlet之 destroy
2016-11-29 22:04 794只听说过 Servlet 何时 init(),何时 servi ... -
Servlet之JSP_03 JSTL/EL 表达式
2016-09-16 16:13 2319准备工作:在JSP 中启用 EL 表达式 <%@ ... -
Servlet之JSP_02初探
2016-09-15 22:37 846一、被编译后的JSP 1、写一个JSP文件:index.js ... -
Servlet之JSP_01概述
2016-09-15 20:42 1168一、什么是JSP JSP (Java Server Page ... -
Servlet 的生命周期图
2014-12-31 03:18 957A servlet life cycle can be def ... -
在一个JSP页面中,操作数据库
2013-03-11 19:02 2790下面的代码是在一个jsp页面中实现数据库的操作。 也是为了加深 ... -
Servlet之Filter及FilterChain的使用详解
2013-01-07 20:06 2172在 JavaEE 中没有 Interceptor(拦截器)的概 ... -
out.print和out.write
2012-12-30 11:42 19440问题: 这是一个JSP页面: <%@ page l ... -
等幂操作——get方法与post方法
2012-12-23 20:13 1759幂等操作: 指的是对于同一数据,不论对其进行任何次幂操作,总 ... -
如何将jsp中<input>设为只读
2012-12-13 10:49 23340将一个input变为只读,可以使用 readonly 属性 和 ... -
Request的 getAttribute 和 getParameter
2012-12-03 19:57 1284getParameter 返回的是String, 用于 ...
相关推荐
下面将详细介绍Servlet API的相关知识点。 1. **Servlet概念**: Servlet是一个Java类,它扩展了服务器的功能,尤其是用于Web应用。它被部署在Web服务器或应用服务器中,接收并响应来自客户端(如浏览器)的HTTP...
Servlet API是Java EE核心组件之一,它为Web服务器提供了扩展能力,使得服务器能够处理HTTP请求并生成响应。 Servlet是一种Java类,它扩展了服务器的功能,特别是对于Web应用而言。Servlet API提供了一个框架,让...
赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...
Servlet-api.jar是Java Web开发中不可或缺的一个库文件,它包含了Servlet和JSP(JavaServer Pages)规范的API接口。这个库文件主要用于与Web服务器交互,处理HTTP请求,并生成响应。在本文中,我们将深入探讨Servlet...
赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....
本篇文章将围绕jakarta-servletapi-4-src.zip这个源码包,深入剖析Servlet API 4.0的关键特性与实现原理。 一、Servlet接口与生命周期 Servlet接口是所有Servlet的基础,它定义了Servlet的主要方法,如`init()`, `...
Servlet API JAR是Java Web开发中的核心组件,主要用于构建动态Web应用程序。这个JAR文件包含了Servlet规范定义的所有接口和类,使得开发者能够编写服务器端的Java程序,处理来自客户端(如浏览器)的HTTP请求,并...
赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...
赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....
### Servlet+API+中文版知识点解析 #### 一、Servlet基础概念 - **Servlet定义**:Servlet是一种Java技术,用于创建动态网页。它允许开发者在服务器端处理客户端请求,并生成响应。Servlet通常作为Web应用程序的...
ServletAPI是Java Web开发中非常重要的一个部分,它提供了一系列接口和类,使得开发者能够创建动态、交互式的Web应用程序。这个"ServletAPI.rar"压缩包包含的文档可能是Servlet API的官方Javadoc,这对于理解并使用...
Servlet-API是Java Servlet技术的核心部分,它定义了服务器端与客户端之间交互的一系列接口和类。这个压缩包包含了Servlet-API的多个版本,分别是2.2、2.3、2.4、2.5以及3.0。每个版本的发布都带来了新的功能和改进...
Servlet API中文文档是Java Web开发中的重要参考资料,它详尽地解释了Servlet技术的各种接口、类和方法,为开发者提供了全面的理解和使用指南。Servlet API是J2EE平台的一部分,主要用于构建动态Web应用程序,它是...
1. **注解支持**:这是Servlet 3.0引入的最大变革之一。开发者可以使用注解(如`@WebServlet`, `@WebFilter`, `@WebListener`)来声明Servlet、Filter和Listener,而无需在web.xml配置文件中进行硬编码。这极大地...
jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar jakarta-servletapi-5.rar
Servlet API是Java Web开发中的核心组件,主要用于构建动态web应用程序。这个压缩包文件"Servlet-api"包含了一系列与Servlet相关的类和接口,使得开发者能够与Web服务器进行交互,处理HTTP请求和响应。在Java Web...
Java Servlet API 2.5是Java Web开发中的一个重要组成部分,它是用于构建动态Web应用程序的标准接口和类库。这个版本发布于2006年,是Servlet技术的一个关键里程碑,为开发者提供了更强大和灵活的服务器端编程能力。...
本文将深入解析Servlet API的主要概念、功能以及如何在实际开发中应用。 1. **Servlet的概念** Servlet是一种Java类,它扩展了服务器的功能,尤其是Web服务器。Servlet API是由Java Servlet规范定义的一组接口和类...
这个"Servlet API官方原版"压缩包很可能包含了Servlet规范的原始文档,这些文档详细阐述了Servlet API的功能、接口和类,以及如何在实际应用中使用它们。 Servlet API是Java Servlet技术的一部分,它定义了一系列的...