Servlet

88 阅读3分钟

首先:

我们一般在使用servlet的时候,所要使用的接口是servlet接口,但是这个接口麻烦在,你在使用它的时候,你要对其中的所有方法进行重写

为了解决这个麻烦,我们可以直接实现一个HttpServlet来实现我们的目的,因为这个父类间接实现类Servlet接口

这边继承了这个父类,这个父类实现了一个接口,那个接口又实现了servlet接口,所以就是间接的实现了Servlet的接口了

servlet开发流程:

  1. 要创建一个JavaWeb项目,同时将Tomcat添加为当前项目的依赖:就是打开project structure里面的module的第三个Dependencies里面的加号的
  2. 重写Service方法:service(HttpServletRequest req, HttpServletResponse resp) 一个是request一个是response 分别是请求和响应
  3. 在service方法中,定义业务处理代码
  4. 在web.xml中,配置Servlet对应的请求映射路径

//1. servlet-api 的导入问题 /* servlet-api 编码的时候需要,运行的时候,在服务器的环境中,由服务软件(Tomcat)提供 因此,我们的JAVAWEB项目中,再打包或者构建的时候就不会携带这个jar包进入打包的文件当中了

2.Content-Type响应头的问题 MIME类型响应头 媒体类型,闻不见类型,响应的数据类型 MIME类型用于告诉客户端响应的数据是什么类型的数据,客户端以此了欸行来决定用什么方式解析响应体 * */

public class UserServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.从request 对象中获取请求中的任何信息(username参数)
        String username = req.getParameter("username");//根据参数名获取参数值  无论这个参数实在url?后  还是在请求体中 (只要是键值对形式的)
        //2.处理业务的代码

         String tf = "<h1>YES<h1>";
        //这边的equals是直接对字符串类型判断是否相同
        if("123".equals(username)){
            tf = "<h1>NO<h1>";
        }

        //3.将要相应的数据放入response
        //而且我们应该设置Content-Type响应头
        //怎么说呢,当我们build一个文件的时候,假如要他再浏览器中显示的是jpg.html
        //这类的静态资源,那么Tomcat就会从web.xml中去查询响应类型的mime-type,并在
        //浏览器的F12中显示,而如果我们直接用userServlet,他就不显示了,因为它不是
        //静态资源,浏览器会默认把响应体里面的数据当作html的代码进行解析,
        //所以我们才应该设置Content-Type响应头

//        resp.setHeader("Content-Type","text/html");


        //因为这个响应头很重要,所以设置了一个单独的设置api给他
        resp.setContentType("text/html");

        PrintWriter writer = resp.getWriter();
        writer.write(tf);

    }

Servlet生命周期

  • 1.实例化 构造器 第一次请求

  • 2.初始化 init 构造完毕

  • 3.接受请求,处理请求,服务 service 每次请求

  • 4.销毁 destory 程序停止时请求

    Servlet 在Tomcat中是单例的:一个在tomcat中只会产生一个实例对象

  1. Servlet的成员变量在多个线程栈之中是共享的
  2. 不建议在service方法中修改成员变量 在并发请求时,会引发线程安全问题