第3章 HTTP和Servlet基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.4.3在<SERVLET>标记中指定Servlet
建议在Java服务器页面(JSP)文件中使用 <SERVLET>标记。如:
<SERVLET NAME="myservlet" CODE="myservlet.class“ CODEBASE="url" initparm1="value"> <PARAM NAME="parm1" VALUE="value"> </SERVLET> NAME属性指定了Servlet的名称,或不带.class扩展名 的Servlet类名。 CODE属性指定了Servlet类名。
3.4.2在<FORM>标记中指定Servlet
可以在 <FORM> 标记中调用 Servlet。 例如:
<FORM METHOD="GET" ACTION="/servlet/myservlet"> <OL> <INPUT TYPE="radio" NAME="broadcast" VALUE="am">AM<BR> <INPUT TYPE="radio" NAME="broadcast" VALUE="fm">FM<BR> </OL> (用于放置文本输入区域的标记、按钮和其它的提示符。) </FORM>
对于那些需要多次提交数据才能完成的 Web操作比如购物车来说,就成问题了。 这种情况下,应用程序必须跟踪由同一 个浏览器发出的多个请求所提供的信息, 即记住用户的交易状态。
信息可以通过下列三种方法之一发送给 浏览器:
◦ 作为Cookie ◦ 作为隐藏域嵌入HTML表单中 ◦ 附加在主体的URL中
3.3.1创建HttpServlet的步骤
1.导入包: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; 2.继承HttpServlet类: public class ××× extends HttpServlet 3.覆盖doPost()、doGet()方法: public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{ } IOException,ServletException{…} public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{…} 4.获取请求参数: String param1 = request.getParameter(); 5.创建输出对象: PrintWriter out = response.getWriter(); 6.设置响应类型: response.setContentType(); 7.输出响应内容: out.println();
HTTP Servlet 使用一个 HTML 表格来发 送和接收数据。 要创建一个 HTTP Servlet,应扩 展 HttpServlet 类 HttpServlet 类包含 init()、destroy()、 service() 等方法。其中 init() 和 destroy() 方法是继承的。
(1)setAttribute(String name,Object object): 把一个对象和一个属性名绑定,将这个对象 存储在ServletContext中; (2)getAttribute(String name):根据指定的属 性名返回所绑定的对象; (3)removeAttribute(String name):根据给定 的属性名从ServletContext中删除相应的操作; (4)getAttributeNames():返回Enumeration对 象,它包含了存储在ServletContext对象中的 所有属性名。
第3章 HTTP和Servlet基础
本章目标
● 了解HTTP的请求/响应模型
●
掌握Servlet的基本概念
●
了解HttpServlet
●
了解创建HttpServlet的步骤
3.1 HTTP请求/响应模型
3.1.1 HTTP协议 HTTP协议是Web应用所使用的主要协 议。 HTTP协议是基于请求/响应模式的。 HTTP是无状态协议。
3.2.3 Java Servlet API
Java Servlet API由两个软件包组成:
◦ 对应HTTP的软件包javax.Servlet.http ◦ 不对应HTTP的通用的软件包javax.Servlet。
API包含了两个软件包,十二个接口和 九个类。
3.3 HTTP与HttpServlet
通常作为指向其他应用程序页面的链接,即URL重 写
更加高效的方法:会话跟踪(Session)
3.2 Servlet简介
3.2.1 Servlet是什么? 一个Servlet就是Java编程语言中的一个 类,它被用来扩展服务器的性能 与传统的从命令行启动的Java应用程序 不同,Servlet由Web服务器进行加载
◦ HTTP的请求和响应消息如果没有发送并传 递成功的话,不保存任何已传递的信息。
基于HTTP协议的信息交换过程
1.建立连接:客户端与服务器建立TCP连接; 2.发送请求:打开一个连接后,客户端把请 求消息送到服务器的相应端口上,完成请求 动作提交; 3.发送响应:服务器在处理完客户端请求之 后,要向客户端发送响应消息; 4.关闭连接:客户端和服务器双方都可以通 过关闭套接字来结束TCP/IP对话。
常用的请求报头
Accept
◦ Accept请求报头域用于指定客户端接受哪些类型的信 息。如:Accept: image/gif,表明客户端希望接收gif图 像格式的资源;Accept: text/html,表明客户端希望接 收html文本;
Accept-Charset
指定客户端接受的字符集。如:Accept-Charset: iso8859-1, gb2312。
在HTTP协议中,HTTP请求可以使用多 种请求方法,这些方法指明了要以何种 方式来访问有Request-URI所标识的资 HTTP1.1 3.1 源。HTTP1.1支持的请求方法如表3.1所 示。
HTTP 1.1中的请求方法
注意:方法名区分大小写
(2)消息报头
请求消息报头允许客户端向服务器端传 递该请求的附加信息,以及客户端自身 的信息。
(1)状态行
格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
◦ ◦ ◦ ◦
HTTP-Version:服务器HTTP协议的版本 Status-Code Status-Code:服务器发回的响应代码 Reason-Phrase:状态代码的文本描述 CRLF:回车换行。
3.1.2 HTTP请求
客户端通过发送HTTP请求向服务器请 求对资源的访问。HTTP请求包括三部 分:
◦ 请求行、消息报头和请求正文。
(1)请求行
请求行格式如下:
Method Request-URI HTTP-Version CRLF
其中,Method表示请求的方法,Request-URI 是一个统一资源标识符,标识了要请求的资 源,HTTP-Version表示请求的HTTP协议版本, CRLF表示回车换行。如: ◦ GET /form.html HTTP/1.1 (CRLF)
例如:
◦ HTTP/1.1 200 OK (CRLF)
HTTP1.1中常见的状态代码与状态描述
(2)消息报头
响应消息报头允许服务器传递:
◦ 不能放在状态行中的附加响应信息 ◦ 关于服务器的信息 ◦ 对Request-URI所标识的资源进行下一步访 问的信息。
(3)响应正文
消息报头和响应正文之间是一个空行 (只有CRLF的行),这个空行表示消 息报头已经结束,接下来的是响应正文。
消息报头和请求正文之间是一个空行 (只有CRLF的行),这个空行表示消 息报头已经结束,接下来的是请求正文。 请求正文中可以包含提交的数据。
3.1.3 HTTP响应
在接收和解释请求消息后,服务器会返 回一个HTTP响应信息。与HTTP请求类 似,HTTP响应也由三部分组成:状态 行、消息报头和响应正文。
◦ 响应正文就是服务器返回的资源内容。 ◦ 假如我们请求的是一个页面,请求成功后, 服务器就会在消息报头和一个空行的后面 返回页面内容。
3.1.4 状态管理
HTTP协议是无状态的,不能保存每次 提交的信息,即当服务器返回与请求相 对应的应答之后,这次事务的所有信息 就丢掉了。如果用户发来一个新的请求, 服务器无法知道它是否与上次的请求有 联系。
3.3.2 ServletContext和Web应用的关系
Servlet容器在启动时会加载Web应用,并为 每个Web应用创建唯一的ServletContext对象。 可以把ServletContext看成是一个Web应用的 服务器端组件的共享内存。 在ServletContext中可以存放共享数据,它提 供了4个读取或设置共享数据的方法。
User-Agent
◦ 允许客户端将它的操作系统、浏览器和其他属性 告诉服务器。 ◦ 例如,当上网登录论坛的时候,常常会看到一些 欢迎信息,其中列出了客户端所使用的操作系统 名称和版本,所使用的浏览器的名称和版本等等, 这些信息就是服务器通过User-Agent这个请求报头 域获得的信息。
(3)请求正文
3.2.2 Servlet的生命周期
1.Servlet容器创建Servlet的一个实例。 2.容器调用该实例的init()方法,进行初始化。 如果初始化失败则直接卸载该实例。 3.如果容器对该Servlet有请求,则调用此实例 的service()方法,提供服务。如果服务请求出 错,则抛出异常Unavailable。 4.服务完成后,容器在销毁本实例前调用它 的destroy()方法。 5.销毁并标记该实例以供作为垃圾收集。
Java Servlet 与 JSP 的比较
JSP页面编写完毕后,在Web引擎运行 前也会被编译器先转换为Servlet,再编 译成字节码(ByteCode) 因此,JSP页面和Servlet是一一对应的
两个重Hale Waihona Puke 概念1. Servlet容器
◦ 负责处理客户请求、把请求传送给Servlet 并把结果返回给客户。
3.4 Servlet的调用
3.4.1由URL调用 Servlet
可以通过在URL中指定Servlet名称来调用 Servlet。 例如,假设已有一个名称为 HelloWorldServlet的Servlet,那么可以通过以 HelloWorldServlet Servlet 下URL来调用该Servlet: /servlet/HelloWorldSe rvlet
Java Servlet 与 Applet 的比较:
相似之处:
◦ 它们不是独立的应用程序,没有main()方 法。 ◦ 它们不是由用户或程序员调用,而是由另 外一个应用程序(容器)调用。 ◦ 它们都有一个生存周期,包含init()和 destroy()方法。
不同之处:
◦ Applet具有很好的图形界面(AWT),与 浏览器一起,在客户端运行。 ◦ Servlet 则没有图形界面,运行在服务器端。
2. Servlet接口
◦ Servlet提供公共接口public interface Servlet ◦ 当编写Servlet时必须直接或间接的实现这 个接口,一般采用间接实现函数
3.2.2 Servlet的生命周期
一个Java Servlet具有一个生命周期, Servlet的生命周期定义了一个Servlet如 何被加载、初始化,以及它怎样接收请 求、响应请求、提供服务。 详细的处理过程如下:
Accept-Encoding
指定可接受的内容编码。如,Accept-Encoding: gzip
Accept-Language
用于指定一种自然语言。如,Accept-Language: zh-cn。
常用的请求报头
Authorization
◦ 用于证明客户端有权查看某个资源。
Host
◦ 用于指定被请求的资源的Internet主机和端口号, 它通常是从HTTP URL中提取出来的。