当前位置:文档之家› 3 Servlet

3 Servlet

tomcat工作原理深入详解——How Tomcat Works 中文版

How Tomcat Works中文版 介绍 概要 欢迎阅读《How Tomcat Works》这本书。这本书解剖了Tomcat4.1.12和5.0.18版本,解释了它的servlet容器的内部运行机制,那是一个免费的,开源的,最受欢迎的servlet容器,代号为Catalina。Tomcat是一个复杂的系统,由许多不同的组件构成。那些想要学习Tomcat运行机制的朋友大部分知道从何入手。这本书会提供一个蓝图,然后为每一个组件构造一个简化版本,使得可以更加容易的理解这些组件。在这之后才会对真实的组件进行解释。 你应该从这份简介开始阅读,因为它解释了这本书的结构,同时给你勾画了这个项目构造的简洁轮廓。“准备前提软件”这一节会给你一些指示,例如你需要下载什么样的软件,如何为你的代码创建目录结构等等。 本书为谁而作 这本书是为任何一个使用Java技术进行工作的人而准备的。 ?假如你是一个servlet/jsp程序员或者一个Tomcat用户,而且对一个servlet容器是如何工作这个问题你感兴趣的话,这本书就是为你准备 的。 ?假如你想加入Tomcat的开发团队的话,这本书就是为你准备的,因为你首先需要学习那些已存在的代码是如何工作的。 ?假如你从未涉及web开发,但你对一般意义上的软件开发感兴趣的话,你可以在这本书学到一个像Tomcat一样的大型项目是如何进行设计和开发 的。 ?假如你想配置和自定义Tomcat,你也应该读读这本书。

为了理解书中的讨论,你需要了解Java面向对象编程技术以及servlet编程。假如你对这些不熟悉的话,这里有很多书籍可以参考,包括Budi的《Java for the Web with Servlets, JSP, and EJB》。为了让这些材料更容易理解,每一章开始都会有便于理解所讨论主题的必要的背景资料介绍。 Servlet容器是如何工作的 servlet容器是一个复杂的系统。不过,一个servlet容器要为一个servlet 的请求提供服务,基本上有三件事要做: ?创建一个request对象并填充那些有可能被所引用的servlet使用的信息,如参数、头部、cookies、查询字符串、URI等等。一个 request对 象是javax.servlet.ServletRequest或 javax.servlet.http.ServletRequest 接口的一个实例。 ?创建一个response对象,所引用的servlet使用它来给客户端发送响应。 一个response对象 javax.servlet.ServletResponse或 javax.servlet.http.ServletResponse接口的一个实例。 ?调用servlet的service方法,并传入request和response对象。在这里servlet会从request对象取值,给 response写值。 当你读这些章节的时候,你将会找到关于catalina servlet容器的详细讨论。 Catalina架构图 Catalina是一个非常复杂的,并优雅的设计开发出来的软件,同时它也是模块化的。基于“Servlet容器是如何工作的”这一节中提到的任务,你可以把Catalina看成是由两个主要模块所组成的:连接器(connector)和容器(container)。在Figure I.1中的架构图,当然是简化了。在稍后的章节里边,你将会一个个的揭开所有更小的组件的神秘面纱。 现在重新回到Figure I.1,连接器是用来“连接”容器里边的请求的。它的工作是为接收到每一个HTTP请求构造一个request和response对象。然后它把流程传递给容器。容器从连接器接收到requset和response对象之后调用servlet的service方法用于响应。谨记,这个描述仅仅是冰山一角而已。这里容器做了相当多事情。例如,在它调用servlet的service方法之前,它必须加载这个servlet,验证用户(假如需要的话),更新用户会话等等。一个容器

用 Servlet 进行文件上传的原理和实现

用Servlet 进行文件上传的原理和实现 Servlet 是用 Java 编写的、协议和平台都独立的服务器端组件,使用请求/响应的模式,提供了一个基于 Java 的服务器解决方案。使用 Servlet 可以方便地处理在 HTML 页面表单中提交的数据,但 Servlet 的 API 没有提供对以 mutilpart/form-data 形式编码的表单进行解码的支持,因而对日常应用中经常涉及到到文件上传等事务无能为力。 如何用 Servlet 进行文件的上传,必须编程实现。 一、基本原理 通过 HTML 上载文件的基本流程如下图所示。 浏览器端提供了供用户选择提交内容的界面(通常是一个表单),在用户提交请求后,将文件数据和其他表单信息编码并上传至服务器端,服务器端(通常是一个 cgi 程序)将上传的内容进行解码了,提取出 HTML 表单中的信息,将文件数据存入磁盘或数据库。 二、各过程详解 A)填写表单并提交

通过表单提交数据的方法有两种,一种是 GET 方法,另一种是 POST 方法,前者通常用于提交少量的数据,而在上传文件或大量数据时,应该选用 POST 方法。在 HTML 代码中,在

标签中添加以下代码可以页面上显示一个选择文件的控件。 在页面中显示如下(可能随浏览器不同而不同) 可以直接在文本框中输入文件名,也可以点击按钮后弹出供用户选择文件的对话框。 B)浏览器编码 在向服务器端提交请求时,浏览器需要将大量的数据一同提交给 Server 端,而提交前,浏览器需要按照 Server 端可以识别的方式进行编码,对于普通的表单数据,这种编码方式很简单,编码后的结果通常是 field1=value2&field2=value2&…的形式,如name=aaaa&Submit=Submit。 这种编码的具体规则可以在 rfc2231 里查到,通常使用的表单也是采用这种方式编码的,Servlet 的 API 提供了对这种编码方式解码的支持,只需要调用 ServletRequest 类中的方法就可以得到用户表单中的字段和数据。 这种编码方式( application/x-www-form-urlencoded )虽然简单,但对于传输大块的二进制数据显得力不从心,对于传输这类数据,浏览器采用了另一种编码方式,即 "multipart/form-data"的编码方式,采用这种方式,浏览器可以很容易的表单内的数据和文件一起。这种编码方式先定义好一个不可能在数据中出现的字符串作为分界符,然后用它将各个数据段分开,而对于每个数据段都对应着 HTML 页面表单中的一个 Input 区,包括一个 content-disposition 属性,说明了这个数据段的一些信息,如果这个数据段的内容是一个文件,还会有Content-Type 属性,然后就是数据本身。

J2EE HttpServletRequest详解

ServletRequest详解 一个用来向服务器提供客户端请求信息的对象. servlet container产生一个ServletRequest,然后将它作为参数传递给servlet的service方法. Servlet可以提供如下数据:参数和对应值,属性,输入流. 实现ServletRequest的接口可以提供另外的协议有关的数据(例如,HttpServletRequest可以提供HTTP数据). 方法详解: Object getAttribute(String name): 以对象的形式返回指定的属性值,如果属性值不存在,则返回null. 属性值可以通过两种方法设置: servlet container可能设置属性,以便请求的特定信息可以被访问. 例如, 使用HTTPS发送的请求, javax.servlet.request.X509Certificate能够被用来查询客户端certificate信息. 属性同样可以使用setAttribute()方法进行设置. 这可以在调用RequestDispatcher之前将信息嵌入到request中. 属性的名字,应该同样遵循报名的传统. getAttributeNames(): 返回请求所有可用属性的枚举. 如果request没有可用的属性, 那么将返回空枚举. getCharacterEncoding(): 返回本请求中字符编码的名字. 如果请求没有指定字符编码,那么将返回null. void setCharacterEncoding(String env): 重写本请求所使用的字符编码. 本方法必须在读取请求参数或使用getReader()方法读取输入之前调用, 不然没有效果. int getContentLength(): 以字节的形式返回request body的长度并且made available by the input stream. 如果长度未知,将返回-1. 对于HTTPservlet, 其值和CGI变量CONTENT_LENGTH 值相同. String getContentType(): 返回request body的MIME类型. 如果类型未知, 返回null. 对于HTTP servlet,其值和CGI 变量CONTENT_TYPE相同. ServletInputStream getInputStream(): 使用ServletInputStream返回请求体的二进制数据. 本方法或者getReader()可能被调用, 来读取请求体,但是不会同时使用. String getParameter(String name): 以字符串的形式返回请求参数的值,如果参数不存在,返回null, 请求参数是请求发送的而外信息, 对于HTTP servlet, 参数包含在查询字串(query string)或发送的表格数据中. 应当确定参数只有一个值的时候才使用本方法. 如果参数可能有多个值,硬挨使用getParameterValues(https://www.doczj.com/doc/038015991.html,ng.String) 如果你对有多个值的参数使用本方法, 返回的值和getParameterValues方法返回数组的第一个值相同. 如果参数是在请求体中发送的(当使用HTTP POST方法的时候, 会出现这中情况), 通过getInputStream()或getReader()直接读取body,将会干扰本方法的执行. Enumeration getParameterNames(): 返回请求中所有参数名的包含字符串数据的枚举, 如果请求没有参数, 本方法返回空枚举. String[] getParameterValues(String name): 返回给定参数的所有值. 如果参数不存在,返回null. 如果参数只有一个值, 数组长度为1. Map getParameterMap(): 返回请求所有参数的映射. String getProtocol(): 以protocol/majorVersion.minorVersion的格式返回请求使用的协议. 该方法返回的值和CGI变量SERVER_PROTOCOL的值相同.

jsp和servlet文献参考

[1]孙卫琴,李洪成.《Tomcat 与JSP Web 开发技术详解》.电子工业出版社,2003年6月:1-205 [2]BruceEckel.《JSP编程思想》. 机械工业出版社,2003年10月:1-378 [3]FLANAGAN.《JSP技术手册》. 中国电力出版社,2002年6月:1-465 [4]孙一林,彭波.《JSP数据库编程实例》. 清华大学出版社,2002年8月:30-210 [5]LEE ANNE PHILLIPS.《巧学活用HTML4》.电子工业出版社,2004年8月:1-319 [6]飞思科技产品研发中心.《JSP应用开发详解》.电子工业出版社,2003年9 月:32-300。 [7]耿祥义,张跃平.《JSP实用教程》. 清华大学出版社,2003年5月1日:1-354 [8]孙涌.《现代软件工程》.北京希望电子出版社,2003年8月:1-246 [9]萨师煊,王珊.《数据库系统概论》.高等教育出版社,2002年2月:3-460 [10]Brown等.《JSP编程指南(第二版)》. 电子工业出版社,2003年3月:1-268 [11]清宏计算机工作室.《JSP编程技巧》. 机械工业出版社, 2004年5月:1-410 [12]朱红,司光亚.《JSP Web编程指南》.电子工业出版社, 2001年9月:34-307 [13]赛奎春.《JSP工程应用与项目实践》. 机械工业出版社, 2002年8月:23- [1] [美]Walter Savitch. Absolute Java[M].北京:电子工业出版社,2005. [2] 计磊,李里,周伟.J2EE整合应用案例[M].北京:人民邮电出版社,2007. [3] 王虎,张俊.管理信息系统[M].武汉:武汉理工大学出版社,2004.7. [4] 启明工作室编著.MIS系统开发与应用[M].北京:人民邮电出版社,2005.1. [5] 王珊,陈红.数据库系统原理教程[M].北京:清华大学出版社,2004.6. [6] 方睿,刁仁宏,吴四九编著.网络数据库原理及应用[M].四川:四川大学出版社,2005.8. [7] 耿祥义,张跃平编著.JAVA2实用教程(第二版)[M].北京:清华大学出版社,2004.11. 1] 俞传正.基于博客的个人知识管理平台研究[D].天津:天津师范大学,2006. [2] 陈明.Blog、Wiki在协作学习中的应用研究[D].武汉:华中师范大学, 2006. [3] 郭华伟.基于内容聚合BLOG学习平台的辅助教学研究与实践[D].北京: 首都师范大学,2006.

ServletJSP配置详解(非常基础)

Servlet/JSP配置详解(非常基础) jdbc发表于2004-03-02 作者:jdbc 评价:0/0 评论数:2 点击数:12384 [收藏] 摘要: 转载:转载请保留本信息,本文来自 https://www.doczj.com/doc/038015991.html,/resource/article/0/808.html 初学者问的诸如:《怎样配置环境变量》《怎样运行Servlet》啊?这样的问题太多了,现在我写一个初学者入门必读,以便对初学者有指导作用! 首先是下载工具: 我建议初学者用Editplus+JDK,我觉得如果用例如JB,Eclipse,JCreator,虽然刚开始的时候比较方便,但是确使初学者门不知道怎样配置环境变量,从而难以达到知其然,知其所以然的地步。 可以通过如下地址下载: Editplus(最新版本是v2.11): https://www.doczj.com/doc/038015991.html,/softdown.php?id=3641&url=http://sc-http.skycn. net/down/epp211a_cn.exe JDK(最新版本是Java2sdk1_4_2): https://www.doczj.com/doc/038015991.html,/softdown.php?id=3116&url=http://sc-http.skycn. net/down/j2sdk-1_4_2-windows-i586.exe(这是For Windows) 然后就是安装JDK,我是把它装到从c:\JDK目录下面。 然后设置CLASSPATH的问题了: 正如操作系统利用PATH来搜索可执行程序一样,Java运行环境也会遍历CLASSPATH来查找类,即便是HelloWorld这样简单的程序,JVM也会遍历CLASSPATH定义的每一个路径,直到找到相应的文件为止。 相信大家用的系统不是2k就是XP,然后就应当如下设置Path: 我的电脑->属性->高级->环境变量 然后在环境变量的Path后面追加: C:\JDK\bin;.;C:\JDK\lib 也可以这样配 置:C:\JDK\bin;.;C:\JDK\lib\dt.jar;C:\JDK\lib\tools.jar

ServletContext详解和用法

ServletContext详解 ServletContext是servlet与servlet容器之间的直接通信的接口。Servlet 容器在启动一个Web应用时,会为它创建一个servletContext对象。每个web应用有唯一的servletContext对象。同一个web应用的所有servlet对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。 servletContext接口提供的方法分为以下几种类型: 用于在Web应用范围内存取共享数据的方法。 注:web应用范围具有以下两层含义: (1)表示有web应用的生命周期构成的时间段. (2)表示在web应用的生命周期内所有web组件的集合。 setAttribute(String name,https://www.doczj.com/doc/038015991.html,ng.Object object):把一个java对象和一个属性名绑定,并存放到ServletContext中,参数name指定属性名,参数Object表示共享数据。 getAttribute(String name):根据参数给定的属性名,返回一个Object 类型的对象。 getAttributeNames():返回一个Enumeration对象,该对象包含了所有存放在ServletContext中的属性名。 removeAttribute(String name):根据参数指定的属性名,从servletContext对象中删除匹配的属性。 访问当前Web应用的资源 getContextpath():返回当前web应用的URL入口。

getInitParameter(String name):返回web应用方位内的匹配的初始化参数值。在web.xml中元素中元素表示应用范围内的初始化参数。 getInitParameterNames():返回一个Enumeration对象。 getServletContextName():返回web应用的名字。即元素中元素的值。 getRequestDispatcher(String path):返回一个用于向其他web组件转发请求的RequestDispatcher对象。 访问servlet容器的相关信息 getContext(String uripath):根据参数指定的url,返回当前servlet 容器中其他web应用的servletContext()对象。 访问web容器的相关信息 getMajorV ersion():返回servlet容器支持的java servlet API 的主板本号。 getMinorV ersion():返回servlet容器支持的java Servlet API的此版本号。 getServerInfo():返回servlet容器的名字和版本。 访问服务器端的文件系统资源 getRealPath(String path):根据参数指定的虚拟路径,返回文件系统中的一个真实的路径。

JSP+JavaBean+Servlet工作原理实例讲解

JSP+JavaBean两层结构的开发应该是比较熟悉的,也比较好理解。 但是有一点必须要清楚就是用户通过浏览器来发送网页的请求,此请求到达服务器后在服务器端查找对应的网页,如果是首次请求(第二次就不用解释执行了),对于JSP来说要生成Servlet,然后通过Servlet引擎来执行Servlet,把调用JavaBean的结果嵌入到页面中返回给用户的浏览器。 JSP+JavaBean+Servlet三层结构的实质是多了一个Controller:Servlet来分发客户端浏览器的请求。如果把起控制器作用的Servlet的作用理解为对客户端的请求进行预处理对理解Servlet 将有很大的帮助。通过web.xml配置文件可以找到用户请求和特定的Servlet的对应关系,每个Servlet都有一个特定的Servlet对象与之对应,所以说处理用户请求的就是一个继承自HttpServlet的Servlet对象。 与具体的Servlet对象关联,第二部分主要用来配置请求由哪个Servlet处理,Servlet名字的关联,处理请求就与具体Servlet处理对象关联起来,比如说,客户端浏览器发来/newsmain的请求,它由ms1 servlet进行处理,通过ms1就能找到相对应的serlet对象news.FirstAction,即/newsmain->ms1->news.FirstAction,这也就是配置文件的意义所在。到现在懂得了用户/newsmain请求会被news.FirstAction类的对象进行处理,所以说,要看懂程序就要看懂FirstAction

通过这个实现可以看到,当服务器收到客户端请求执行News.SearchNewsTitle(db)的操作,然后把返回值通过session.setAttribute放到session里,然后通过resp.sendRedirect(target)间接转移到newsMain.jsp,这样在newsMain.jsp里通过session.getAttribute函数就可以得到在存储在session里的对应值。 回过头来就容易看出JSP+JavaBean两层结构和JSP+JavaBean+Servlet三层结构的不同了,两层结构必须把预处理放在JSP中进行,比如说News.SearchNewsTitle(db),三层结构先把预处理在Servlet里进行了,然后相当于把这个处理结果通过Session返回给JSP,让JSP更关注于界面的显示。

ServletAPI详解

Servlet 技术是JavaWeb中最核心的组件 Servlet主要功能: 1,动态生成HTML文档 2,转发请求给同Web中的另一个Servlet组件 3,转发请求至其他Web应用中的Servlet组件 4.读取以及写入Cookie 5.访问其他服务器资源(数据库or 基于java的应用程序) Servlet API Servlet接口: public interface Servlet { public abstract void init(ServletConfig servletconfig) throws ServletException; //init方法负责初始化Servlet对象,容器在创建好Servlet对象 就会调用该方法(个人认为这方法估计在构造函数中调用的) public abstract void service(ServletRequest servletrequest, ServletResponse servletresponse) throws ServletException, IOException; //该方法负责响应用户请求,为客户提供相应的服务 public abstract void destroy(); //该方法负责释放Servlet对象所占用的资源,Servlet结束生命周期时调用 public abstract String getServletInfo(); //返回字符串包含版本创建者以及版权信息 public abstract ServletConfig getServletConfig(); //返回ServletConfig对象,该对象包含Servlet初始化信息 } 在ServletAPI中 javax.servlet.GenericServlet抽象类实现

ServletConfig对象详解

ServletConfig对象详解 ●javax.servlet.ServletConfig 是SUN制定的Servlet规范中的接口。 ●Apache软件基金会开发的“Tomcat服务器”对javax.servlet.ServletConfig接口的实现类的完整类名是: org.apache.catalina.core.StandardWrapperFacade(程序员不需要关心这个类名,编程时是面向ServletConfig接口编程的) ●ServletConfig对象的实例化过程 我们javaweb程序员在使用init方法中的ServletConfig对象的时候不需要关心具体是在哪个服务器中,我们是面向javax.servlet.ServletConfig 接口调用的。 ●一个Servlet对象就会关联一个ServletConfig对象。是一对一的关系,所以ServletConfig对象也是在单实例多线程的环境下运行。ServletConfig 对象封装了Servlet对象的配置信息。也就是说ServletConfig对象包含了Servlet类在web.xml文件的标签中配置的信息。 ●ServletConfig接口中常用的方法: a)通过初始化参数的name获取初始化参数的value i.String paramValue = config.getInitParameter(String name); b)获取所有初始化参数的name i.Enumeration paramNames = config.getInitParameterNames(); c)通过ServletConfig对象获取ServletContext对象 i.ServletContext application = config.getServletContext(); ●如果想通过ServletConfig对象获取初始化参数,必须在对应的web.xml文件中有相关的配置信息

ServletConfig详解

ServletConfig说明和用法 因为本人虽然做过开发,却一些基本知识不扎实,今天用到了,所以恶补了一下,特整理成了文档,希望能巩固知识,也希望能帮助一些朋友。 Servlet容器初始化一个servlet对象时,会为这个servlet对象创建一个servletConfig对象。在servletConfig对象中包含了servlet的初始化参数信息。此外,servletConfig对象还与servletContext对象关联。Servlet容器在调用servlet对象的init(ServletConfig config)方法时,会把servletConfig对象当做参数传递给servlet对象。Init(ServletConfig config)方法会使得当前servlet对象与servletConfig对象建立关联关系。 servletConfig接口中定义了一下方法: getInitParameter(String name):根据给定的初始化参数,返回匹配的初始化参数值。 getInitParameterNmes():返回一个Enumeration对象,里面包含了所有的初始化参数。 getServletContext():返回一个servletContext()对象, getServltName():返回servlet的名字,即web.xml中的的子元素的值。如果没有配置这个子元素,则返回servlet类的名字。 例子: actionServlet org.apache.struts.action.ActionServlet

ServletJSP深入详解:基于Tomcat的Web开发 第一章(全)(格式已整理)

Servlet/JSP深入详解:基于Tomcat的Web开发第一章 要掌握Java Web开发,首先就要学会编写Servlet,而要运行Servlet,则需要一个Servlet 容器,本书选用的是Tomcat。下面让我们来了解一下Servlet和Tomcat。 1.1 Web技术的发展 随着Internet的发展,基于HTTP协议和HTML标准的Web应用呈几何数量级的增长,人们的生活在不知不觉中已经被网络悄悄地改变了。在网络普及之前,我们购买图书要去书店,给亲人汇钱要去邮局或者银行……而现在,一切都是这么便捷,你可以在网上购买图书、汇款、缴纳电话费,你甚至可以为远在他乡的女朋友订购一束玫瑰。各种各样的网上业务丰富了我们的生活,节省了我们的时间,提高了我们的工作效率,改善了我们的生活品质。支撑这些网上业务的就是各种各样的Web应用,而这些Web应用又是用各种Web技术开发的。 早期的Web应用主要是静态页面的浏览(如新闻的浏览),这些静态页面使用HTML语言来编写,放在服务器上;用户使用浏览器通过HTTP协议请求服务器上的Web页面,服务器上的Web服务器软件接收到用户发送的请求后,读取请求URI所标识的资源,加上消息报头发送给客户端的浏览器;浏览器解析响应中的HTML数据,向用户呈现多姿多彩的HTML页面。整个过程如图1-1所示。 图1-1 浏览器请求静态页面 随着网络的发展,很多线下业务开始向网上发展,基于Internet的Web应用也变得越来越复杂,用户所访问的资源已不仅仅局限于在服务器硬盘上存放的静态网页,更多的应用需要根据用户的请求动态生成页面信息,复杂一些的还需要从数据库中提取数据,经过一定的运算,生成一个页面返回给客户。例如,笔者通过Web浏览器想要查询本公司一年的销售报表,这个销售报表是根据一年的

Servlet详细教程与讲解

1.1 简介 典型的桌面应用程序的示例有记事本,媒体播放器等等。是本地.exe程序。用户和桌面程序的交互如图1.1。 图1.1 用户和桌面程序的交互 随着Internet的兴起,现在大多数电脑用户更加习惯Internet的Web应用。用户和Web应用程序的交互如图1.2所示。 图1.2 用户访问网站 Web应用程序和桌面程序相比,优点如下。 首先,Web应用程序的访问更加容易,用于访问Web应用的标准协议为HTTP协议,为绝大多数操作系统所支持。此外,所要求的客户端仅仅是浏览器。 其次,维护和部署成本低,Web应用程序在浏览器中请求运行,不需要在每个客户端系统上安装客户端软件。Web应用程序代码可以再服务器端进行修改和维护,这将节省更新和部署应用程序所需要的时间和成本。 Web应用运行在服务器上,服务器是一台设备,它为网络上的不同设备,即客户端的请求提供信息。最初,通过编写CGI(Common Gateway Interface,通用网关接口)程序来实现数据在Web上的传输,但是,对于客户端作出的每个请求,必须创建CGI程序的一个新实例,这将占用大量内存。因此,为了解决这个问题,引入了Servlet技术。 Servlet是一个用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端。Servlet的客户端可以提出请求并获得该请求的响应,它可以使任何Java应用程序、浏览器或任何设备。对于所有的客户端请求,只需要创建Servlet的实例一次,因此节省了大量的内存。Servlet在初始化后即驻留内存中,因此每次作出请求时无需加载。

1.2 HTTP基础知识 用户的请求和Web应用程序的相应需要通过Internet从一台计算机发送到另一台计算机或服务器,使用超文本传输协议HTTP。HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准。客户端是终端用户,服务器端是网站。通过使用Web浏览器等工具,客户端发起一个到服务器上指定端口的HTTP请求。应答的服务器上存储着一些资源,比如HTML文件和图像。HTTP协议并没有规定必须使用它和基于它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。 1.2.1 GET和POST方法区别 HTTP请求消息使用GET或POST方法以便在Web上传输请求。 检索信息时一般用GET方法,如检索文档、图表、或数据库查询结果。要检索的信息作为字符序列传递,称为查询字符串。因此,传递的数据对客户端是可见的,即将查询字符串附加到URL中,但是,查询字符串的长度有限制,最多124字节。GET方法是表单默认的方法。 我们用google检索“java”,可以知道google使用了GET方法对用户输入的搜索字符串检索搜索结果。如图1.1所示。 图1.1 HTTP定义的另一种请求方法是POST方法。使用POST发送的数据对客户端是不可见的,且对发送的数据的量没有限制。 下面我们来对比一下GET和POST方法。 GET是从服务器上获取数据;POST是向服务器传送数据。 在客户端,GET通过URL提交数据,数据在URL中可见;POST把数据放在form 的数据体内提交。 GET提交的数据最多只有1024字节;POST提交的数据量无限制。 由于使用GET时,参数会显示在地址栏上,而POST不会,所以,如果这些数据是非敏感数据,那么使用GET;如果包含敏感数据,为了安全,用POST。

韩顺平servlet与jsp 笔记与心得

?韩顺平 servlet与jsp 笔记与心得 ? ? ? ?Java EE概述: Java EE是一个开放的平台,它包括的技术很多,主要包括十三种核心技术(java EE就是十三种技术的总称)。建立一个整全的概念。 J2ee的十三种技术(规范) 1.java数据库连接(JDBC)。——JDBC定义了4种不同的驱动: 1.JDBC-ODBC桥, 2.JDBC-native驱动桥3,JDBC-network桥4.纯java驱 动。 2.Java命名和目录接口(JNDI)(它是为了对高级网络应用开发中的使用 的目录基础结构的访问。)。 3.企业Java Beans(Enterprise Java Beans,EJB)(它提供了一个架构来 开发和配置到客户端的分布式商业逻辑,因此可以明显减少开发扩展 性、高度复杂企业应用的难度。)。 4.JavaServer Pages(JSPs)。 5.Java servlets(servlets提供的功能大部分与JSP相同,JSP中大部 分是HTML代码,其中只有少量的Java代码,而servlets则相反,它 完全使用Java编写,并且产生HTML代码。)。 6.Java IDL/CORBA(用得不多)。 7.Java 事务体系(JTA)/Java事务服务(JTS)(用得不多)。 8.JavaMail和JavaBenas激活架构(JavaBeans Activation Framework,JAF)。(JavaMail是一个用来访问邮件服务的API)。 9.Java信使服务(Java Messaging Service,JMS)(JMS是一个用来和面 向信息的中层通信的API)。 10.扩展标记语言(Extensible Markup Language,XML)。 11.12. 13当前流行的及格框架struts+hibernate+spring(ssh). Java ee的开发环境(eclipse) Eclipse是一个开源的、可扩展的集成开发环境,已经成为目前最流行的j2ee 开发工具。 Eclipse安装后就可以开发java se的项目了,但不能开发java ee项目, 需要安装web开发插件(lomboz或是myeclipe) Eclipse的官网:https://www.doczj.com/doc/038015991.html, myeclipse的官网:https://www.doczj.com/doc/038015991.html,/ 在java ee的开发中有几个重要的开发模式: 1.Model1模式 2.model2模式(model2x模式(用得少)) 3.mvc模式 一、Model1模式 Model1的基础是jsp文件,它由一些相互独立的jsp文件,和其它一些java class组成(不是必须的)。这些jsp从HTTPRequest中获得所需要的数据, 处理业务逻辑,然后将结果通过Response返回前端浏览器。

Servlet的init方法使用详解

init方法是在Servlet实例化之后执行的,并且只执行一次。 一.先说init(ServletConfig)中参数ServletConfig,代表的是配置信息。即在web.xml中配置的信息,比如: RDSDispatchServlet RDSDispatchServlet flex.rds.server.servlet.FrontEndServlet useAppserverSecurity true 10 在程序中可以用this.getServletConfig()方法得到ServletConfig的实例,然后用ServletConfig的相应方法可以得到ServletConfig的名字(getServletName)和配置参数的名字(getInitParameter("name"))或者名字枚举(getInitParameterNames()),并且通过参数名字得到相应的参数值。具体方法参见API。 二.再说说init方法,从源码中我们不难发现:Servlet接口里面只有init(ServletConfig),这是供tomcat调用的。GenericServlet类里面有成员变量ServletConfig,init(ServletConfig)方法和init()方法: private transient ServletConfig config; public void init(ServletConfig config) throws ServletException{ this.config=config; this.init(); } public void init() throws ServletException{ } 现在一切都很明了了,当容器(tomcat)帮忙调用init(ServletConfig config)并且给传过来一个参数config,这个方法把参数对象的引用指向类的成员变量this.config,并且调用类的this.init()方法。如果我们在写Servlet类时只要重写init(ServletConfig config)就可以了,但是init()不就成了多余的了吗?实际上init()方法是为了防止程序员在写Servlet类重写init(ServletConfig config)时忘记写super.init(ServletConfig config),这样就容易造成出现空指针异常。而这就要求我们最好不要重写init(ServletConfig config)。

Servlet 工作原理解析

Servlet工作原理解析 要介绍Servlet 必须要先把Servlet 容器说清楚,Servlet 与Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力。虽然它们是彼此依存的,但是又相互独立发展,这一切都是为了适应工业化生产的结果。从技术角度来说是为了解耦,通过标准化接口来相互协作。既然接口是连接Servlet 与Servlet 容器的关键,那我们就从它们的接口说起。 前面说了Servlet 容器作为一个独立发展的标准化产品,目前它的种类很多,但是它们都有自己的市场定位,很难说谁优谁劣,各有特点。例如现在比较流行的Jetty,在定制化和移动领域有不错的发展,我们这里还是以大家最为熟悉Tomcat 为例来介绍Servlet 容器如何管理Servlet。Tomcat 本身也很复杂,我们只从Servlet 与Servlet 容器的接口部分开始介绍。 Tomcat 的容器等级中,Context 容器是直接管理Servlet 在容器中的包装类Wrapper,所以Context 容器如何运行将直接影响Servlet 的工作方式。 图1 . Tomcat 容器模型

接下去将会调用Tomcat 的start 方法启动Tomcat,如果你清楚Tomcat 的系统架构,你会容易理解Tomcat 的启动逻辑,Tomcat 的启动逻辑是基于观察者模式设计的,所有的容器都会继承Lifecycle 接口,它管理者容器的整个生命周期,所有容器的的修改和状态的改变都会由它去通知已经注册的观察者(Listener),关于这个设计模式可以参考《Tomcat 的系统架构与设计模式,第二部分:设计模式》。Tomcat 启动的时序图可以用图2 表示。 上图描述了Tomcat 启动过程中,主要类之间的时序关系,下面我们将会重点关注添加examples 应用所对应的StandardContext 容器的启动过程。 当Context 容器初始化状态设为init 时,添加在Contex 容器的Listener 将会被调用。ContextConfig 继承了LifecycleListener 接口,它是在调用清单3 时被加入到StandardContext 容器中。ContextConfig 类会负责整个Web 应用的配置文件的解析工作。

servlet生命周期详解

Servlet生命周期详解 Servlet的生命周期是由servlet的容器来控制的。分为3个阶段:初始化阶段、运行阶段、销毁阶段。 初始化阶段: 初始化阶段步骤: Servlet容器加载servlet类,把它的. Class文件中的数据读到内存中。 Servlet容器创建servletConfig对象。servletConfig对象包含了servlet的初始化配置信息。此外servlet容器还会使得servletConfig 对象与当前的web应用的servletContext对象关联。 Servlet容器创建servlet对象。 Servlet容器调用servlet对象的init(ServletConfig config)方法。通过初始化步骤,创建了servlet对象和servletConfig对象,并且servlet对象与servletConfig对象关联,而servletConfig对象又与当前对象的servletContext对象关联。当servlet容器完成servlet后,servlet对象只要通过getServletContext()方法就能得到web应用的servletContext对象。 注:servlet初始化的情况: (1)当web应用处于运行阶段时,特定的servlet被客户端首次请求访问。

(2)在web.xml文件中为servlet设置了元素 servlet1 servlet.servlet1 0 说明: 在servlet的配置当中,5的含义是:标记容器是否在启动的时候就加载这个servlet。 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet; 当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。 正数的值越小,启动该servlet的优先级越高。 (3)当web应用被重新启动时,web应用中的所有servlet会在特定的时间被重新初始化。 运行阶段 在这个阶段sevlet可以随时响应客户端的请求。当servlet容器接到访问特定的servlet请求时,servlet容器会创建针对与这个请求的servletRequest和servletResponse对象,然后调用service()方法,并把这两个对象当做参数传递给service()方法。Service()方法通过servletRequest对象获得请求信息,并处理该请求,再通过

相关主题
文本预览
相关文档 最新文档