如何编写一个Servlet

本文详细介绍了Servlet的编写方式,包括实现Servlet接口、继承GenericServlet和HttpServlet的三种方法,并探讨了Servlet的生命周期,强调了单例特性和线程安全问题。此外,文章还讨论了Servlet的初始化、服务和销毁过程,以及ServletConfig接口和Servlet接口中的关键方法。最后,文章解释了如何通过URL映射访问Servlet,并比较了GET和POST请求的差异及其参数处理方式。
摘要由CSDN通过智能技术生成

1.什么是servlet
servlet本身就是一种java类,这种java类可以提供web形式的访问(Java EE 规范)

2.怎么按照JavaEE的规范编写一个servlet
关键字    作用    说明
Servlet    接口    有五个抽象方法
GenericServlet    抽象类    有一个抽象方法
HttpServlet    抽象类    没有抽象方法
HttpServlet-继承->GenericServlet-实现->Servlet接口

所以编写一个servlet,有三种方式
第一种方式:
写一个类去实现接口servlet
最重要的是实现接口中的service方法
这个方法就是我们在访问servlet的时候被tomcat服务器调用的

第二种方式:
写一个类去继承父类GenericServlet
抽象类GenericServlet里面有一个抽象方法service,这个方法是servlet接口中的方法,所以GenericServlet只实现了Servlet接口中的四个抽象方法,还剩下这个service没有实现。同时,GenericServlet类中不但实现了Servlet接口中的init方法,而且还重载了一个无参的init()方法

源代码中两个init方法的实现:

            //tomcat服务器默认调用的是这个init方法
            @Override
            public void init(ServletConfig config) throws ServletException {
                this.config = config;
                this.init();
            }
            //用户需要重写的是这个init()方法
            public void init() throws ServletException{
                // NOOP by default
            }
第三种方式:
写一个类去继承父类HttpServlet
HttpServlet是一个抽象类,但是没有任何抽象方法
HttpServlet类中自定义了很多doXxxx方法,每一种方法都对应了浏览器发送请求的方法,一般常用的浏览器发请求方式为get和post,这两种方式分别对应了这个类中的doGet方法和doPost方法。
HttpServlet类中,有两个service方法

        //这个service方法Servlet接口中的
        void service(ServletRequest req, ServletResponse res){...}
        
        //这个service是HttpServlet中重载的方法
        void service(HttpServletRequest req, HttpServletResponse resp){...}
        

        源代码中俩个service方法的实现:
        //实现Servlet接口中的service方法
        @Override
        public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {

            HttpServletRequest  request;
            HttpServletResponse response;

            try {
                request = (HttpServletRequest) req;
                response = (HttpServletResponse) res;
            } catch (ClassCastException e) {
                throw new ServletException("non-HTTP request or response");
            }
            //调用重载之后的service方法
            service(request, respon

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值