A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 hydee 于 2019-1-17 18:40 编辑

一、Servlet简介
1.什么是Servlet
Servlet 运行在服务端的Java小程序,是sun公司提供一套规范,用来处理客户端请求、并生成响应结果给浏览器。servlet的实质就是java代码,通过java的API动态的向客户端输出内容。
2.Servlet的作用
在BS架构中,早期的Web服务器只能处理静态资源的请求。为了补充Web服务器的这个缺陷,于是有了CGI技术。CGI(Common Gateway Interface通用网关接口)也是一种规范,可以使用不同的语言来开发,如Perl,C,Java等都可以。当客户端请求静态资源时,Web服务器会自己处理并返回,当客户端请求动态资源时,Web服务器会把请求转交给扩展程序来处理,并将处理结果返回给客户端。但是CGI技术开发复杂,性能较差,只要有一个请求到达,Web服务器就会单独分配一个进程来进行处理,可移植性不好,所以慢慢就由后来的Servlet技术所取代。
Servlet不像CGI技术那样需要分配单独的进程来处理请求,而是单独分配一个线程来处理,于是大大提升了处理效率。并且Java语言是跨平台的语言,也提升了Web服务器扩展程序的可移植性,已经取代了CGI技术,成为BS架构中的主流技术。

二、Servlet的开发方式
1.实现Servlet接口
实现步骤:
1)创建自定义类实现Servlet接口
2)实现接口中的方法(着重关注service方法)
3)在web.xml进行servlet的配置

2.继承抽象类GenericServlet
GenericServlet原理:
直接通过实现Servlet接口来编写一个Servlet类,就需要实现Servlet接口中定义的5种方法,为了简化Servlet的编写,在javax.servlet包中,给我们提供了一个抽象的类GenericServlet,它提供了除service()方法外的其他4种方法的简单实现。GenericServlet类定义了一个通用的,不依赖具体协议的Servlet。
GenericServlet类实现了Servlet接口、ServletConfig接口和Serializable接口。
实现步骤:
1)创建类继承GenericServlet类
2)只需要实现service方法
3)在web.xml进行servlet的配置

3.继承抽象类HttpServlet(重点)
实际开发中,我们不会直接去实现Servlet接口,因为那样需要覆盖的方法太多。而且大多数网络应用中,都是使用浏览器和HTTP协议去访问服务器资源,为了快速开发应用于HTTP协议的Servlet,Sun公司在javax.servlet.http包中给我们提供了一个抽象的类HttpServlet,他继承自GenericServlet类。在javaWeb的servlet开发中,一般都扩展HttpServlet进行开发。
实现步骤:
1)创建类继承HttpServlet类
2)覆盖doGet和doPost
3)在web.xml中进行servlet的配置

4.Servlet开发案例
1、实现Servlet接口的开发
[Java] 纯文本查看 复制代码
public class MyServlet implements Servlet{

        @Override
        public void init(ServletConfig config) throws ServletException {
                // TODO Auto-generated method stub
                
        }

        @Override
        public ServletConfig getServletConfig() {
                // TODO Auto-generated method stub
                return null;
        }
        
        //处理用户请求,并响应结果给浏览器的
        @Override
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
                System.out.println("service被调用");
                res.getWriter().write("Hello Servlet");
        }

        @Override
        public String getServletInfo() {
                // TODO Auto-generated method stub
                return null;
        }

        @Override
        public void destroy() {
                // TODO Auto-generated method stub
                
        }

}
2、继承GenericServlet类的开发
[Java] 纯文本查看 复制代码
public class MyGenericServlet extends GenericServlet {

        @Override
        public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
                System.out.println("MyGenericServlet对象的service方法被调用了");
                res.getWriter().write("Hello MyGenericServlet");
        }

}
3、继承HttpServlet的开发
[Java] 纯文本查看 复制代码
public class MyHttpServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                System.out.println("doGet方法被调用");
                resp.getWriter().write("Hello MyHttpServlet");
        }

}
三、Servlet的生命周期
1.Servlet API介绍(1)Servlet接口中的方法
1)init(ServletConfig config)
负责初始化Servlet对象。容器在创建好Servlet对象后,会调用该方法。
2)service(ServletRequest request,ServletResponse response)
负责处理客户发出的请求,并响应结果给客户。
3)destroy()
负责释放Servlet对象占用的资源,当Servlet对象结束生命周期时,会调用此方法。

(2)GenericServlet抽象类
1) init(ServletConfig config)
用于初始化GenericServlet内部的ServletConfig类型的私有变量config,并调用无参的init()方法。
2) init()
如果需要执行一些初始化操作,应该重写该无参的init()方法,尽量不要覆盖有参数的init(ServletConfig config) 方法
3)service(ServletRequest request,ServletResponse response)

(3)HttpServlet类的方法
1)init()
2)doGet(HttpServletRequest request,HttpServletResponse response)
处理HTTP协议中的GET请求,service()方法会判断请求方式,如果为GET,会调用该方法;开发中会根据需要重写该方法。
3)doPost(HttpServletRequest request,HttpServletResponse response)
处理HTTP协议中的POST请求,service()方法会判断请求方式,如果为POST,会调用该方法;开发中会根据需要重写该方法。
4)destroy()

2.Servlet的生命周期介绍
(1)初始化阶段
1)Servlet容器加载Servlet类,把它的.class文件读取到内存中
2)Servlet容器创建ServletConfig对象,并将ServletConfig对象与                                           ServletContext对象关联
3)Servlet容器创建Servlet对象
4)Servlet容器调用Servlet对象的init(ServletConfig config)方法,完成初始化。
   注意:init()方法只会被调用一次
问题:servlet何时创建?
1)默认在第一次访问该servlet时创建。
2)当在web.xml中为一个servlet配置了<load-on-startup>元素,那么在servlet           容器启动该应用时,就会创建该servlet。

(2)运行时阶段
这是servlet生命周期中最重要的阶段。当Servlet容器接收到请求时,会创建ServletRequest对象和ServletResponse对象,然后调用相应的service()方法处理请求并生成响应结果。如果是继承HttpServlet开发,service()方法会根据客户端请求类型调用相应的方法,如doGet()、doPost()等方法。
注意:客户端每访问一次servlet,service()方法就会执行一次。

(3)销毁阶段
当应用正常停止时,Servlet容器会先调用Servlet对象的destroy()方法,用以处理资源释放等操作,然后再销毁Servlet对象。
注意:除非在代码中手动调用,否则只有当应用正常停止方法时才会执行destroy()方法,并且只调用一次。










0 个回复

您需要登录后才可以回帖 登录 | 加入黑马