Servlet是用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端。Servlet在初始化后驻留内存,因此没做请求时无需加载。 1. HTTP基础 用户的请求和Web应用通过Internet从一台计算机发送到另一个台计算机或服务器,使用超文本传输协议HTTP,HTTP是一个客户端和服务器请求和答应的标准。 Get和Post方法 HTTP请求消息使用Get和Post方法在Web上传输请求。 检索信息时用Get方法,要检索的信息作为字符序列传递,称为查询字符串,因此传递的数据对客户端是可见的,即将查询字符串附加到URL中,但查询字符串有长度限制,最多1024字节。 Post方法是HTTP定义的另一种请求方法,使用Post发送数据对客户端是不可见的,且对数据量没有限制。 比较Get与Post方法 Get方法是从服务器上获取数据,Post是向服务器传送数据; 在客户端,Get通过URL提交数据,数据在URL可见,Post把数据放在form数据体内提交; Get提交的数据最多只有1024字节,Post没有数据量限制; 使用Get时,参数显示在地址栏,而Post不会,所以,如果数据是非敏感的,使用Get,反之使用Post。 2. Servlet简介 当使用交互式Web应用时,Web服务器接收会话请求,处理请求和访问数据,并生成结果返回显示,servlet就是用于该过程的。 Java Servlet是为响应Web应用程序上下文中的HTTP请求而设计的。在创建一个Java Servlet时,一般需要子类HttpServlet,当用户通过URL发送一个请求时,Java运行环境(JRE)将结果包装在一个HttpServletResponse中,然后将原HTTP响应送回给发处该请求的客户机。在与Web应用进行交互式,通常是多个请求并获得响应,所有这些都是在一个会话语境中,Java语言将之包装在一个HttpSession对象中。 容器(如Tomcat)将为Servlet容器管理运行时环境。通过容器中的各种配置文件,在URL与服务器端组件之间搭建了一座桥梁,这些组件处理URL请求。在运行时,容器将加载并初始化servlet,管理其生命周期。 3. 一个简单的servlet 声明类 Servlet是一个类。 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter writer = response.getWriter(); writer.println("Hello, World!"); writer.close(); } } 其中javax.servlet.*是存放与HTTP协议无关的一般性Servlet类;javax.servlet.http.*增加了与HTTP协议有关的功能。 所有Servlet必须实现javax.servlet.Servlet接口,但通常选择实现javax.servlet.GenericServlet或javax.servlet.http.HttpServlet,如果写的Servlet代码与HTTP协议无关,必须继承GenericServlet类;若有关,必须继承HttpServlet类。 javax.servlet.*里面的ServletRequest和ServletResponse接口提供存储一般的请求和响应;而javax.servlet.http.*里面的HttpServletRequest和HttpServletResponse接口提供HTTP请求及响应的存取服务。 配置web.xml <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>servlet.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> Servlet的配置需要配置两个标签<servlet>和<servlet-mapping>。 对于<servlet>,配置servlet的名字,所要调用的Java类,还有Servlet初始化时传入的参数。对于<servlet-mapping>,制订了Servlet名字,然后设置url连接,这里Servlet名字必须和上面的<servlet>标签中的<servlet-mapping>的值一致。 当在页面中设定的连接和<url-pattern>中设定的值一致时,则会通过<servlet-name>找到对应的Servlet类来运行。 4. Servlet体系结构 Servlet容器将Servlet动态加载到服务器,HTTP Servlet使用HTTP请求和HTTP响应与客户端进行交互。因此Servlet容器支持请求和响应的HTTP协议。 客户端对Servlet的请求首先会被HTTP服务器接收,HTTP服务器将客户的HTTP请求提交Servlet容器,Servlet容器调用响应的Servlet,Servlet做出响应传递到Servlet容器,并进而有HTTP服务器将响应传给客户端。 Tomcat容器模型 Tomcat是一个小型的轻量级应用服务器,具有处理HTML的功能,同时它是一个Servlet和JSP容器,Tomcat就是HTTP服务器和Servlet容器的两个部分。 5. Servlet层次结构 Servlet是实现javax.servlet.Servlet接口的对象,大多数Servlet通过从GenericServlet或HttpServlet类来进行扩展实现,Servlet API包含两个包:javax.servlet和javax.servlet.http。 6. Servlet生命周期 Servlet运行在Servlet容器中,其生命周期由容器管理。Servlet的生命周期通过javax.servlet.Servlet接口的init()、service()和destroy()方法来表示。 Servlet生命周期包含4个阶段: 加载和实例化 Servlet容器负责加载和实例化Servlet。容器通过Java反射API来创建Servlet实例。 初始化 在Servlet实例化后,容器调用Servlet的init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化工作。对于每一个Servlet实例,init()方法只被调用一次。 处理请求 Servlet容器调用Servlet的service()方法对请求进行处理。在service()方法中,通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。对于HttpServlet类,该方法作为HTTP请求的分发器,这个方法在任何时候都不能被重载。在请求到来时,service()方法决定请求的类型(GET、POST,并发请求分发给相应的处理方法(doGet()、doPost())。 服务停止 当容器检测到一个Servlet实例应该从服务器中移除的时候,容器会调用实例的destroy()方法,以便让实力可以释放它所使用的资源。让需要释放容器或者容器被关闭时,容器就会调用Servlet实例的destroy()方法。在调用destroy()方法后,容器会释放这个Servlet实例,该实例随后被Java的垃圾收集器回收。 转载请并标注: “本文转载自 linkedkeeper.com ” ©著作权归作者所有 |