第二讲 Java Servlet技术
本节内容 Servlet的概念 Servlet是什么 Servlet做什么 MVC模式 Servlet的功能 wuhan
本节内容(续) Servlet的使用 Servlet编程 Servlet API Servlet的生命周期 Servlet的应用
Servlet——最主要的Java Web应用组件之一
Servlet 的概念(续) 什么是Servlet 在Web服务器端加载并运行的Java小程序 具体运行在Servlet引擎管理的JVM上。 Servlet容器负责Servlet和用户的通信以及调用Servlet的方法。 Servlet和用户的通信采用请求/响应模式。 以动态形式扩展Web服务器(Web container)的功能。
Servlet 的概念(续) 以线程形式处理用户请求。 创建并返回基于客户请求的动态HTML页面。 可与其它服务器资源(如数据库或基于Java的应用程序)进行通信。 与Applet比较。
Servlet 的概念(续) Servlet的优点(vs CGI和类CGI开发语言) (1)功能强大 (2)跨平台性好。 (3)开发难度低。 与客户端交互,直接与服务器交互,与不同的应用程序交换数据,使得与数据库的连接变得十分容易。 (2)跨平台性好。 (3)开发难度低。
Servlet 的概念(续) (4)执行效率高。 (5)性能优化。 Servlet是开发服务器端应用程序的一个很好选择, Servlet与JSP结合使用,能提供更强大的服务器端功能。
MVC模式 交互式应用程序广泛使用的一种体系结构。 将传统的输入处理和输入模型转化为图形显示的用户交互模型。
MVC模式 MVC体系结构的三个层次 模型(Model) 控制(Controller) 视图(View)
MODEL1 1 JSP 浏览器 请求 4 响应 2 3 JavaBean 应用服务器 企业服务器/数据源 特点: JSP页面独自响应请求,并将结果返回给客户, 也有表现与处理的分离(Bean处理数据)。 应用服务器 企业服务器/数据源
MODEL2 1 (Controller) 请求 Servlet 浏览器 2 3 (Model) 5 (View) 响应 JSP 实 例 化 2 3 5 (Model) (View) JSP 响应 JavaBean 特点:面向动态内容的实现,结合Servlet与JSP技术。JSP表示页面,Servlet完成处理逻辑。根据用户的行为决定将哪个JSP发给用户。 4 企业服务器/数据源 应用服务器
Servlet 的功能 处理表单(URL中?后面的部分,发送到服务器端)。 处理HTTP请求头。 处理CGI变量(各种有关请求的信息)。 处理状态代码(设置状态码,根据状态码重定向页面)。 按照MVC模式, Servlet主要用作C(ontroler),JSP用作View,Model由Bean来承担。
Servlet编程 —Servlet API Servlet的框架由两个Java包组成: javax.servlet javax.servlet.http 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的接口或类。 在javax.servlet.http包中定义了采用HTTP协议进行通信的Httpservlet类。
Servlet编程 —Servlet API (续) Servlet框架核心是javax.servlet.Servlet接口,所有的Servlet都必须实现该接口。 在Servlet接口中定义了5个方法,其中三个代表Servlet的生命周期: init()—负责初始化Servlet对象。 service()—负责响应客户请求。 destroy()—当Servlet对象退出时,负责释放占用的资源。
Servlet API 《Interface》 javax.servlet.ServletConfig getInitParameter() getServletContext() getInitParameterNames() 《Interface》 javax.servlet.Servlet init() getServletConfig() Service() getSerletInfo() destroy() java.io.serializable javax.servlet.GenericServlet getServletContext() getInitParameter() getInitParameterNames() log() getSerletInfo() init() getServletConfig() service() destroy() javax.servlet.http.HttpcServlet doDelete() doGet() doOptions() doPost() doPut() doTrace() doLastModified() service() Servlet API
Servlet编程 —Servlet API (续) GenericServlet类 HttpServlet类
Servlet编程 —Servlet API (续) 如果Servlet类扩充GenericServlet类,则必须实现service()方法。
Servlet编程 —Servlet API (续) GenericServlet类中的service方法为抽象的方法,该方法的声明形式为: public abstract void service(ServletRequest req, ServletResponse res) throws servletException, IOException。 Servlet容器将客户的请求信息封装在ServletRequest对象中,传给service方法;service方法将响应客户的结果通过ServletResponse对象传给客户。
Servlet编程 —Servlet API (续) protected void service(HttpServletRequest req, HttpServletResponse res) throws servletException, IOException。
Servlet编程 —Servlet API (续) HttpServlet的service方法首先从HttpServletRequest对象中获取HTTP请求方式的信息,然后再根据请求的方式调用相应的方法。 例如,如果请求的方式为GET,那么调用doGet()方法;如果请求的方式为POST,那么调用doPost()方法。
Servlet编程 —Servlet API (续) 两类参数类之间有继承关系。 有各自的一些方法。
Servlet编程 —Servlet编程 Servlet实现javax.servlet.Servlet接口。 编写Servlet程序可以直接实现interface,但因为目前大多数Servlet是针对HTTP协议的Web服务器,所以通过从HttpServlet 继承来编写Servlet程序,根据请求方式是GET还是POST,覆盖doGet、doPost方法之一或全部。
创建Httpservlet的步骤 创建用户自己的Httpservlet ,通常涉及以下4个步骤 扩展Httpservlet抽象类。 覆盖Httpservlet抽象类的部分方法。 获取HTTP请求信息。 生成HTTP响应结果。
Servlet的基本结构 下面的代码显示了一个简单Servlet的基本结构,该Servlet处理的是GET请求: import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
Servlet的基本结构(续) public class SomeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 使用“request”读取和请求有关的信息(比如Cookies) //和表单数据 // 使用“response”指定HTTP应答状态代码和应答头 // (比如指定内容类型,设置Cookie) PrintWriter out = response.getWriter(); // 使用 “out”把应答内容发送到浏览器 } }
一个简单的Servlet实例 HelloWorld.java: import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
一个简单的Servlet实例(续) public class HelloWorld extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); out.println("<html><body><h1>Hi,HelloWorld.</h1>"); out.println("<body bgcolor=\"blue\">"); out.println("</body></html> "); } }
一个简单的Servlet实例(续) HttpServletRequest 提供访问有关请求的信息的方法,例如表单数据、HTTP请求头等等。 HttpServletResponse 除了提供用于指定HTTP应答状态(200,404等)、应答头(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的PrintWriter。
编译、部署、执行Servlet程序 程序员需要编写Servlet并将其部署到相应的容器中。 Servlet是Java类,需要进行编译才能使用。
编译、部署、执行Servlet程序(续) 用Javac 编译成HelloWorld.class文件 用户环境变量 TOMCAT_HOME:D:\Tomcat5.0 CLASSPATH:D:\j2sdk1.5.0\lib\tools.jar; D:\j2sdk1.5.0\lib\dt.jar;D:\Tomcat5.0\comm on\lib\servlet.jar; 为便于查找文件,可设置path变量 编译含import javax.servlet.*;的程序必须在 classpath中加入第三方组件servlet.jar(tomcat中包含)。
编译、部署、执行servlet程序(续) 在webapps下创建一个应用(即一个文件夹),如MyServlet。 在MyServlet目录下新建WEB-INF文件夹,再在此目录下新建classes目录,classes目录用来存放编译后的Servlet文件。 其中的\WEB-INF\web.xml的最简单形式为
<web-app> <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
使用 可在IE中直接访问 http://localhost:8080/MyServlet/hello If error Try http://127.0.0.1:8080/MyServlet/hello
运行结果:
Servlet的生命周期 Servlet的生命周期开始于被装载到Servlet容 器中,结束于被终止或重新装入时。 初始化阶段; 服务阶段; 终止阶段。
Servlet的生命周期(续) 初始化阶段 在下列情形下Servlet容器装入Servlet,创建一个Servlet实例,调用Servlet的init()方法对Servlet实例初始化: Servlet容器启动时。 在Servlet容器启动后,客户首次向Servlet发出请求。 Servlet的类文件被修改后,重新加载。
Servlet的生命周期(续) 服务阶段 如果容器接收到对此Servlet的请求,那么它调用Servlet的service()方法。 service()方法中调用doGet()或doPost()。 终止阶段 实例被销毁,通过调用Servlet的destory()方法来销毁Servlet。
Servlet处理请求的过程 用户从客户机将HTTP请求发送给web服务器。 web服务器将该请求发送给Servlet。
Web Client Servlet Container HttpServlet Request HttpServlet Response HttpServlet 1.send HTTP request 2.parse HTTP request 3.new Instance 4.new Instance 5.call service method 6.get request information 7.output response information 8.send HTTP response Servlet容器响应Web客户请求的时序图
Servlet处理请求的过程(续) Servlet被发来的第一个请求激活,然后继续运行于后台,以线程形式处理请求,速度非常快,直到Servlet被修改时才再次加载。
Servlet 的调用方式 通过URL从浏览器调用 通过HTML中的链接调用
Servlet的应用 结合教材示例上机实验 杜克的Bookstore应用程序
小结 Servlet的概念 Servlet的简单编程 Servlet的生命周期 Servlet的应用
附:Java技术中的缩写及含义 EJB: Enterprise JavaBeans 企业JavaBean组件 IDL: Interface Definition Language 接口定义语言 J2EE CA:J2EE Connector Architecture J2EE 连接器架构 JAAS : The Java Authentication and Authorization Service java认证授权服务 JACC: Java Authorization Contract with the Container Java容器授权合约
附: Java技术中的缩写及含义(续) JATMI:Java Application-to-Transaction Monitor Interface Java 应用-事务监控接口 JBI : Java Business Integration Java业务集成 JCA : J2EE Connector Architecture Java连接器架构 JCP : Java Community Process Java组织 JDBC : Java Database Connectivity JDO :Java Data Objects
附:Java技术中的缩写及含义(续) JDK:Java Development Kit JEMS : JBoss Enterprise Middleware Suite Jboss企业中间件 JMS : Java Messaging Service Java消息服务 JMX :Java Management extensions Java管理扩展 JNDI : Java Naming and Directory Interface Java命名与目录借口服务 JPDA: Java Platform Debugger Architecture Java平台调试器架构 JRMP:Java Remote Message Protocol
附:Java技术中的缩写及含义(续) JSP: Java Server Page JSTL:Java Standard Tag Library Java 标准标签库 JTS: Java Transaction Service Java事务服务 JTA : Java Transaction API Java事务API JVM : Java Virtual Machine Java虚拟机 MVC: Model-View-Control
附:Java技术中的缩写及含义(续) NIC: Network Interface Card O/R: Object-Relational OTS: Object Transactional Services PKI: Public Key Infrastructure POJO: Plain Old Java Object RMI: Remote Method Invocation 远程方法调用 RMI/IIOP:RMI protocol over IIOP
附:Java技术中的缩写及含义(续) BPEL : Business Process Execution Language 业务流程执行语言 BPM : Business Process Management 业务流程管理 DAO : Database Access Object 数据库访问对象 DOM : Document Object Model 文档对象模型 DTD : Document Type Definition 文档类型定义 DTO : Data Transport Object 数据传输对象 ESB : EnterpriseService Bus 企业服务总线 POJO : Proterozoic Java Object Java原生对象
附:Java技术中的缩写及含义(续) SAAJ: SOAP with Attachments API for JavaTM Java 的带附件的SOAP API SAX : Simple API for XML Parsing XML解析处理简单API SAML: Security Assertions markup Language SGML : Standard Generalized Markup Language SAML(Security Assertion Markup Language )安全断言标记语言 SLA: Service Level Agreement服务级别协议
附:Java技术中的缩写及含义(续) SNMP: Simple Network Management Protocol简单网络管理协议 SOA : Service Oriented Architecture SOAP: Simple Object Access Protocol SPENGO:Simple and Protected GSS-API Negotiation Mechanism 简单和受保护的GSS-API协商机制 SPI: Service Provider Interface )服务提供模块接口 SSL: Secure Socket Layer安全套接字层 SSO: Single Sign-on单点登录
附:Java技术中的缩写及含义(续) SSPI: Security Service Provider Interface安全服务提供模块接口 StAX: Streaming API for XML XML 的流化API UDDI: Universal Description,Discovery,and Integration VO : Value Object 值对象 WFMS: workflow management system WSDL: Web Service Description Language
附:Java技术中的缩写及含义(续) WSEE: Web Services Enterprise Edition WSRP: OASIS Web Service for Remote Portlets XA: Extended Architecture 扩展架构 XACML: XML Access Control Markup Language XML 访问控制标记语言 XSLT: XML Stylesheet Language for Transformations
下课了。。。 休息一会儿。。。