创建servlet的三种方式

1,什么是servlet?
servlet是JavaWeb的三大组件之一,它属于动态资源,servlet的作用就是处理请求,服务器会把接收到的请求交给servlet来处理,它是可以被浏览器访问的动态资源。
在servlet中通常需要:- 接收请求数据;
- 处理请求;
- 完成响应;
2.创建servlet的方式(原始)三种方式:
(1).实现javax.servlet.Servlet接口(我这个类名叫FirstServlet)
* servlet可以完成:
* 接收请求数据:
* 接收客户端提交上来的数据,比如URL中携带参数处理请求数据
*
* 根据不同的需求,处理数据
* 完成响应:
* 响应有很多种,比如将数据传递给jsp显示
* serlvet的生命周期方法:
*
* init(config),
* service,
* destory
*

public class FirstServlet implements Servlet {

    /**
     * 可以通过config对象,获得servlet的配置信息
     */
    private ServletConfig config;
    /**
     * 初始化方法init(congfig)
     * 当servlet对象被创建的第一时间调用
     * 当浏览器访问firstservlet时,服务器会给我们创建一个firstservlet的对象
     * 在创建好这个对象后,就回调用这个对象的init方法
     *
     *
     *
     * @param servletConfig  servletconfig类,封装了servlet的配置信息
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.config=servletConfig;
        System.out.println("FirstServlet---init(config)");
        config.getServletContext().removeAttribute("name");
    }

    @Override
    public ServletConfig getServletConfig() {

        return this.config;
    }

    /**
     * 浏览器每次请求Firstservlet,
     * 都会调用这个servce方法,
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("FirstServlet---service(sreq,srsp)");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 当服务器关闭时,会销毁servlet对象,在销毁servlet对象之前,会调用他的destory方法
     * ,可以砸这个方法中,释放资源
     */

    @Override
    public void destroy() {

        System.out.println("FirstServlet---destory()");
    }
}
<servlet>
    <servlet-name>fs</servlet-name>
    <servlet-class>servlet.FirstServlet</servlet-class>
    <!--FristServlet的初始化参数-->
</servlet>
<servlet-mapping>
    <servlet-name>fs</servlet-name>
    <url-pattern>/fs</url-pattern>
</servlet-mapping>

以上是第一个方法的xml文件。这就是第一种创建servlet的方法。

(2)继承javax.servlet.GenericServlet类。
* GenericServlet是一个抽象类
* 继承GenericServlet类也可以创建servlet
* GenericServlet类也是实现了servlet接口
* 只不过帮我们实现可其他的方法
* 只是暴露出service方法
* 这样方便我们创建servlet类

public class SecondServlet extends GenericServlet {
    /**
     * init()并不是生命周期方法
     * init(config)才是生命周期方法
     * 当服务器创建当前的servlert的时候
     * 服务器回调用init(config)方法
     * 在init(config)方法中,调用了init()方法
     *
     *
     *
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

        System.out.println(getServletContext().getAttribute("name"));

        //获得域对象中所有属性的name值
        //(就是键值中的键)
        Enumeration<String> attributeNames = getServletContext().getAttributeNames();
        System.out.println(getServletContext().getInitParameter("gender"));

        //遍历集合
        while (attributeNames.hasMoreElements()){
            String element = attributeNames.nextElement();

            System.out.println("paramName:"+element);
        }


        System.out.println("SecondServlet---service(srep,srsp)");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("SecondServlet---init(config)");
    }
}
<servlet>
        <servlet-name>ss</servlet-name>
        <servlet-class>servlet.SecondServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ss</servlet-name>
        <url-pattern>/ss</url-pattern>
    </servlet-mapping>

以上是继承GenericServlet类的创建servlert的方法,及xml。

(3)继承javax.servlet.http.HttpServlet类
* 当服务器访问service时,会创建一个servlet对象
* 然后调用该对象的init(config)方法
* 在init(config)方法中又会调用非生命周期的init()方法
* 当servlet被请求时,回调用生命周期中的service(sreq,srsp)方法
* 在该方法中,会调用非生命周期的service方法
* 在非生命周期的service中,会根据请求,选择要调用那个do方法
* 如果是get:会调用doGet()
* 如果是post:会调用doPost()

public class FouthServlet extends HttpServlet {
//    @Override
//    public void init(ServletConfig config) throws ServletException {
//        //super.init(config)方法
//        //就会调用 GenericServlet 父类中的方法的赋值操作
//
//        super.init(config);
//    }

    @Override
    public void init() throws ServletException {
        //servlet的上下文对象
        //实际上就是一个和装载多个的servlet的集合
        ServletContext servletContext = getServletContext();

        servletContext.setAttribute("name","张三");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String age = req.getParameter("age");
        String t = req.getParameter("t");
        System.out.println("dododododododo-----age:"+age);
        System.out.println("dododododododo-----name:"+t);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String age = req.getParameter("age");
        String t = req.getParameter("t");
        System.out.println("postpsotpostpost----age:"+age);
        System.out.println("postpsotpostpost----age:"+t);

    }
}

上边是第三种创建servlet的方式。下面是xml文件。

<servlet>
        <servlet-name>Fs</servlet-name>
        <servlet-class>servlet.FouthServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Fs</servlet-name>
        <url-pattern>/Fs</url-pattern>
    </servlet-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值