一步一步学习Servlet输出HelloServlet详解

Servlet可以说是我们搞后台开发的必备技能,该技能是我们在JavaWeb时期学习的,什么是Servlet呢,其实呀,他就是一个接口,只要实现了这个接口的类,就可以称之为一个Servlet,那Servlet是干什么的呢,他是用来处理前端的请求并做出响应的一个东西,当我们学习Servlet的时候,我们会发现,我们都不用写main方法了,这个main方法只是被别人给你写好了,这里我们用到的是Tomcat,也就是我们写好的Servlet,只需部署到Tomcat上,一运行Tomcat就可以执行我们的Servlet了,话说Tomcat真是个好东西,开源免费不说,还帮我们写main,接下来就是借助Tomcat,来进行我们的Servlet学习,输出一个Hello Servlet。

在编写代码之前,我有必要在这里展示一下Servlet的大家族,Servlet只是个接口,他有一个抽象实现类GenericServlet,他有一个子类是HttpServlet,这就是我们要研究的。

我们编写一个Servlet,首先我们把Servlet的依赖jar包导入,这里给出了maven依赖坐标

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

 然后写一个类继承HttpServlt,重写里面的doGet和doPost方法即可,也可以重写service方法,该方法既可以处理doGet又可以处理doPost,之所以可以,是因为里面他对请求的方式进行了判断,如果是doGet那么就调用了doGet方法,如果是doPost就调用doPost方式,而直接重写里面的doGet和doPost方法,更加专一,简单考虑可以理解为省了一句判断,速度更快

package com.zhiying.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        // 把这一句话输出到网页上
        writer.print("Hello Servlet");
        // 这里我们也可以不输出到网页上一句话,直接打印到控制台也可以
        System.out.println("Hello World");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

方法重写完了,我们发现不能运行呀,也没有main方法,是的,我们需要Tomcat,把这个项目部署到Tomcat,让Tomcat来运行他,当我们把Servlet部署到Tomcat之后,我们发现,我们并没有运行我们写的这个程序,控制台也没有输出Hello World,只是显示了Tomcat的默认页面,这是因为,我们部署了这个Servlet,而我们并没有告诉Tomcat,我们怎样去访问该Servlet,所以这里我们需要简单的配置,让我们能唯一的定位到这个Servlet,并且执行它,下图是默认的页面。

当我们去配置Servlet的时候,其实这些配置,也是约定,只是他们规定好了这样写,他们就认识,所以我们就恭敬不如从命了,就按着人家的约定来吧,其实人家的操作还是挺好的,一个是<servlet>,它对应我们所写的Java类,另一个是<servlet-mapping>,它对应我们所要访问的路径,而这两个标签都有一个共同的属性,那就是名字,这样他就知道了谁跟谁是一对,在我们的web.xml里进行这波操作。

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.zhiying.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/a</url-pattern>
    </servlet-mapping>

当我们把这个Servlet配置好之后,我们就可以根据具体的url进行访问了

看到这了,你是不是想,他的配置还有点麻烦呀,当然了,你也可以自己创造一个,给官方提建议,时代在变,说不定下一个官方就是你,当然了,官方也提出了另一个方法,那就是注解,感觉比这个简单,很好用,其实如果他不出来注解,我们这一代青年也能想出来,在配置文件中,我们的思想是,一个java类对应一个url,那我们直接在类上进行配置多好呀,是的,注解就是直接在类上配置的,只需写一个@WebServlet("/b"),里面就是我们的url,到这我们不得不佩服官方了,我门所有的理想都有了,真的是太牛皮了,好了,来感受一波注解的强大吧

package com.zhiying.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/b") //只需加上这个注解就可以了,那个配置文件也不要了,太强了
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        // 把这一句话输出到网页上
        writer.print("Hello Servlet");
        // 这里我们也可以不输出到网页上一句话,直接打印到控制台也可以
        System.out.println("Hello World");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

看吧,也能出来,注解真好呀!

发布了376 篇原创文章 · 获赞 242 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/HeZhiYing_/article/details/104038842