Javaweb开发中的servlet知识总结.docx_第1页
Javaweb开发中的servlet知识总结.docx_第2页
Javaweb开发中的servlet知识总结.docx_第3页
Javaweb开发中的servlet知识总结.docx_第4页
Javaweb开发中的servlet知识总结.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java web 开发中的servlet知识总结1. 请求(request)响应(response)模式:用户在浏览器的地址栏中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求,服务器端程序接受这个请求,并对请求做出处理,然后发出一个回应,浏览器收到这个回应,并把回应的内容显示出来,这就是web应用程序的访问过程。2. HTTP协议:浏览器单击链接是,会向服务器发送一段文本,告诉服务器请求的是那个网页,这段文本遵循HTTP协议格式,包含访问方式,HTTP协议版本,所用的浏览器,访问的地址等。3. Servlet概述:Java web应用程序中所有的请求与响应都是通过servlet来完成的,servlet是java web的核心程序,所有的网址最终都要交给servlet来处理,servlet没有main之类的执行方法,当用户访问服务器是,服务器通过调用servlet的某些方法来处理整个过程。4. Servlet的工作流程:浏览器提交的数据是遵循HttP协议的文本,这段文本由服务器接受并解析,封装成httpservletrequest类型的request对象,所有的http头数据都可以通过request的相应方法得到。Tomcat同时把输出流封装成HTTPServletresponse类型的response,通过设置response的相关属性就可以控制输出的内容,然后服务器将request和response作为参数,调用servlet的相应方法比如doPost,doGet等。5. Servlet的作用:主要处理业务逻辑,比如读取数据库,权限检查,业务处理等。6. Servlet接口:servlet是一种实现了javax.servlet.Servlet接口的类,servlet规定了特定的方法来处理特定的请求,开发者只需要实现servlet的相应方法,用户访问web程序的时候,服务器会调用这些方法来完成业务处理。7. 访问方式:servlet是建立在HTTP规范基础上的,HTTP1.1支持options,get,post,head,put,delete,以及trace七种访问方式,各方式的意义分别是:Get表示查询信息,URL中可以附少量的参数信息,但是URL总长度不能超过255个字符,并且参数会显示在浏览器的地址栏。Post表示提交信息,一般用于提交大数据信息或者文件,提交的内容不受长度限制,并且不会显示在浏览器的地址栏。Options,put,delete,trace属于被声明了,但是没有被使用的web访问方式,现在的浏览器也很少用到这几种方式。8. Java web 目录结构:web程序部署在tomcat下的webapps下面,一个webapps下可以部署多个web项目,根据servlet规范,web程序自己有特定的结构,部署时必须安装这样的目录结构:文件夹描述/Web应用根目录/WEB-INF/WEB-INF文件夹,tomcat会隐藏该文件夹下的所有文件和文件夹,保护它们不能通过浏览器直接访问。/WEB-INF/web.xmlWeb.xml,web程序最主要的配置文件/WEB-INF/lib/Jar文件放在该目录下9. servlet:servlet是一个接口,此接口定义了初始化servlet的方法,为请求提供服务的方法和从服务器移除的方法,这些方法称为生命周期方法,它们是按以下顺序调用的:l 构造servlet,然后使用init()方法将其初始化l 处理来自客户端对service()的全部调用l 从服务器中取出servlet,然后使用destory()方法将其销毁,最终进行垃圾回收并终止它。10. servlet的方法:(1)public void destory()(2)public void init(ServletConfig config ) throws ServletException(3)public void service(ServletRequest req,ServletResponse res)throws ServletException,java.io.IOexception(4)public ServletConfig getServletConfig()(5)public String getServletInfo()11编写servlet: 直接实现servlet接口来编写servlet很不方便,需要实现的方法太多,真正编写servlet时直接实现httpservlet,并覆盖相应的方法即可,一般只需要覆盖doGet()或doPost()方法。在myeclipse中,可以之间新建一个servlet,且默认已经完成配置。12请求和相应:客户端浏览器发出一个请求,服务器做出一系列操作后做出一个响应,发送给浏览器,完成一次web过程操作,web编程的过程就是分析客户需要什么信息或者做出什么操作,然后进行一系列的处理,然后通过相应结果显示给客户。(1) 获取request的变量:客户端浏览器发出的请求被封装成一个httpservletrequest对象,所有的信息包括请求的方式,请求的参数,请求的地址,上传的文件,提交的数据,客户端Ip地址甚至客户端操作系统信息都包含在其中。l getContentLength()返回请求正文的长度(以字节为单位),并使输入流可以使用它,如果长度未知,则返回 1,对于 HTTP servlet,返回的值与 CGI 变量 CONTENT_LENGTH 的值相同。 l getContentType()返回请求正文的 MIME 类型,如果该类型未知,则返回 null。对于 HTTP servlet,返回的值与 CGI 变量 CONTENT_TYPE 的值相同。 l getLocalAddr()返回接收请求的接口的 Internet Protocol (IP) 地址。l getLocalPort()返回接收请求的接口的 Internet Protocol (IP) 端口号。l getLocale()基于 Accept-Language 头,返回客户端将用来接受内容的首选 Locale。如果客户端请求没有提供 Accept-Language 头,则此方法返回服务器的默认语言环境l getRemotePort()返回发送请求的客户端或最后一个代理的 Internet Protocol (IP) 源端口。l getMethod()返回用于发出此请求的 HTTP 方法的名称,例如 GET、POST 或 PUT。返回的值与 CGI 变量 REQUEST_METHOD 的值相同。l getProtocol()以 protocol/majorVersion.minorVersion 的形式(例如 HTTP/1.1)返回请求使用的协议的名称和版本。对于 HTTP servlet,返回的值与 CGI 变量 SERVER_PROTOCOL 的值相同。l getQueryString()返回包含在请求 URL 中路径后面的查询字符串。如果 URL 没有查询字符串,则此方法返回 null。返回的值与 CGI 变量 QUERY_STRING 的值相同。 getRequestDispatcher(String path)返回一个 RequestDispatcher 对象,它充当位于给定路径上的资源的包装器。可以使用 RequestDispatcher 对象将请求转发给资源,或者在响应中包含资源。资源可以是动态的,也可以是静态的。 指定的路径名可以是相对的,尽管它无法扩展到当前 servlet 上下文之外。如果该路径以 / 开头,那么可以相对于当前上下文根解释它。如果 servlet 容器无法返回 RequestDispatcher,则此方法将返回 null。l getScheme()返回用于发出此请求的方案的名称,例如 http、https 或 ftp。不同方案具有不同的构造 URL 的规则,这一点已在 RFC 1738 中注明。(2) 获取相应的变量:l addCookie(Cookie cookie)将指定 cookie 添加到响应。可多次调用此方法设置一个以上的 cookie。l addDateHeader(String name, long date)用给定名称和日期值添加响应头。该日期根据距历元时间的毫秒数指定。此方法允许响应头有多个值l encodeRedirectURL(String url)对指定 URL 进行编码,以便在 sendRedirect 方法中使用它,如果不需要编码,则返回未更改的 URL。此方法的实现包含可以确定会话 ID 是否需要在 URL 中编码的逻辑。因为进行此确定的规则可能不同于用来确定是否对普通链接进行编码的规则,所以此方法与 encodeURL 方法是分开的。l encodeURL(String url)通过将会话 ID 包含在指定 URL 中对该 URL 进行编码,如果不需要编码,则返回未更改的 URL。此方法的实现包含可以确定会话 ID 是否需要在 URL 中编码的逻辑。例如,如果浏览器支持 cookie,或者关闭了会话跟踪,则 URL 编码就不是必需的。l sendError(int sc, String msg) throws java.io.IOException使用指定状态将错误响应发送到客户端。默认情况下,服务器将创建类似 HTML 格式的服务器错误页面的响应,该页面包含指定消息,内容类型设置为 text/html,并且保持 cookie 和其他头不变。 如果已经对 Web 应用程序进行了对应于传入状态代码的错误页面声明,则将优先处理建议的 msg 参数。l sendRedirect(String location) throws java.io.IOException使用指定重定向位置 URL 将临时重定向响应发送到客户端。此方法可以接受相对 URL;servlet 容器必须在将响应发送到客户端之前将相对 URL 转换为绝对 URL。如果位置是相对的,没有前导 /,则容器将相对于当前请求 URI 对其进行解释。如果位置是相对的,有一个前导 /,则容器将相对于 servlet 容器根对其进行解释。 如果已经提交了响应,则此方法抛出 IllegalStateException。使用此方法后,响应应该被视为已经被提交,不能再写入。l setHeader(String name, String value)用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。containsHeader 方法可用于测试在设置其值之前头是否存在。l setStatus(int sc)设置此响应的状态代码。此方法用于设置没有错误时的返回状态代码(例如状态代码 SC_OK 或 SC_MOVED_TEMPORARILY)。如果有错误,并且调用者希望调用 Web 应用程序中定义的错误页面,则应改用 sendError 方法。 容器清除缓冲区,设置 Location 头,并保留 cookie 和其他头l setCharacterEncoding(String charset)设置将发送到客户端的响应的字符编码 (MIME charset),例如,将它设置为 UTF-8。如果已通过 #setContentType 或 #setLocale 设置了字符编码,则此方法将重写该字符编码。用 text/html 的 String 调用 #setContentType 并用 UTF-8 的 String 调用此方法等效于用 text/html; charset=UTF-8 的 String 调用 setContentType。l getCharacterEncoding()返回用于此响应中发送的正文的字符编码 (MIME charset) 名称。可能已使用 #setCharacterEncoding 或 #setContentType 方法显式指定字符编码,或使用 #setLocale 方法隐式指定它。显式指定优先于隐式指定。在已调用 getWriter 之后或者在已提交响应之后调用这些方法不会对字符编码产生任何影响。如果未指定字符编码,则返回 ISO-8859-1。l getContentType()返回用于此响应中发送的 MIME 正文的内容类型。必须在提交响应之前已使用 #setContentType 指定适当的内容类型。如果未指定内容类型,则此方法返回 null。如果已指定内容类型,并且已经如 #getCharacterEncoding 中所述显式或隐式指定了字符编码或者已调用 #getWriter,则返回的字符串中将包含 charset 参数。如果未指定字符编码,则省略 charset 参数。l getOutputStream() throws java.io.IOException返回适用于在响应中编写二进制数据的 ServletOutputStream。servlet 容器不会编码二进制数据。l getWriter() throws java.io.IOException返回可将字符文本发送到客户端的 PrintWriter 对象。PrintWriter 使用 #getCharacterEncoding 返回的字符编码。如果未如 getCharacterEncoding 中所述指定响应的字符编码(即该方法只返回默认值 ISO-8859-1),则 getWriter 会将字符编码更新到 ISO-8859-1。 对 PrintWriter 调用 flush() 将提交响应。l setContentLength(int len)设置 HTTP servlet 中响应的内容正文的长度,此方法设置 HTTP Content-Length 头。l setContentType(String type)设置将发送到客户端的响应的内容类型,如果该响应尚未提交。给定内容类型可能包含字符编码规范,例如 text/html;charset=UTF-8。如果在调用 getWriter 之前调用此方法,则只根据给定内容类型设置响应的字符编码。l setBufferSize(int size)设置响应正文的首选缓冲区大小。servlet 容器将使用至少与所请求大小一样大的缓冲区。可使用 getBufferSize 获得使用的实际缓冲区大小。l getBufferSize()返回用于该响应的实际缓冲区大小。如果未使用任何缓冲,则此方法返回 0。l flushBuffer() throws java.io.IOException强行将缓冲区中的所有内容写入客户端。调用此方法会自动提交响应,这意味着将编写状态代码和头。l resetBuffer()清除响应中底层缓冲区的内容,而不清除头或状态代码。如果已提交响应,则此方法将抛出 IllegalStateException。l isCommitted()返回指示响应是否已提交的 boolean 值。已提交的响应已将其状态代码和头编写好。(3) 提交表单信息:Web程序的任务就是实现服务器与客户端浏览器之间的信息交互,客户端提交的信息可能来自表单里的文本框,密码框,选择框,单选按钮,复选框以及文本域,这些表单信息以参数的形式提交到了服务器,servlet的任务就是准确的获取这些信息,并根据信息输出不同的响应。提交信息的方式包括Get和Post,分别触发servlet的doGet和doPost方法,一般而言,get用于从服务器获取信息(通过提交的参数指定要获取的内容),post用于向服务器提交信息,post提交数据又包括两种形式,普通内容提交和带文件上传的提交。l Post提交个人信息:由于get方式存在各种限制,所以提交表单时选择用post方式,把HTML中Form的method属性设置成post,浏览器即以post方式提交数据。l 客户端上传文件:除了提交表单,上传文件也是很常见的客户端与web程序交互的操作,电子相册,网络硬盘,邮件附件,视频网站都采用web文件上传的形式,相对于ftp文件上传,web文件上传速度要慢一些,但是使用方便,不需要客户端,只需要一个浏览器即可,而且权限也比FTP容易控制,web文件上传也采用Post方式,但上传文件需要将form的enctype属性设置为multipart/form-data,由于上传的文件可能会比较大,因此需要设置该参数指定浏览器使用二进制上传。13Servlet的生命周期:每个servlet都有自己的生命周期,servlet的生命周期由Web服务器来维护,servlet的生命周期遵循servlet规范。 Servlet会在服务器启动或第一次请求该servlet时开始servlet生命周期,在服务器结束的时候结束生命周期,无论请求多少次servlet,最多只有一个servlet实例,多个客户端并发请求servlet时,服务器会启动多个线程分别执行servlet的servlce()方法。14servlet之间的跳转

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论