Servlet API详解

128 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

Servlet API详解

Servlet API有很多,我们只需要掌握HttpServlet/HttpServletRequset/HttpServletResponse这时个关键类中的核心方法即可!

HttpServlet

我们编写Servlet代码第一步就是继承HttpServlet类,并重写该类中的某些方法,处理请求!

核心方法:

方法名称调用时机
initHttpServlet实例化后就调用
destoryHttpServlet实例不再使用就调用该方法
service收到Http请求就调用,为了匹配相应的处理请求方法
doGet/doPost/doPut...收到匹配的请求时,由service方法调用对应的方法!

而我们实际开发很少重写init/destory这些tomcat会帮我们调用! 我们主要任务还是处理对应请求,对不同方法请求,重写匹配的doXxx方法,处理不同的请求,返回对应的响应即可!

这些上述方法的调用时机,又称Servlert的生命周期! 在这里插入图片描述 这里的init方法,当HttpServlet实例化后就会通过该方法进行初始化,然后生命周期结束就是在destroy方法调用后将HttpServlet实例化对象销毁!期间可能要处理不同方法请求,所以可能会多次调用service方法! 注意:

HttpServlet实例只是在程序启动后创建一次就好了,并不是每次收到http请求都创建实例!

在这里插入图片描述 上述这些方法我们都可以进行重写,从而设置某些特有的属性,当时我们很少这样做,我们最常用的就是重写处理请求的方法doXXX! 代码示例

处理一个Get请求

我们分别通过ajaxform表单进行构造!

  • 基于ajax
  <!--引入jQuery-->
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script>
        //构造请求
        $.ajax({
            type:'get',
            url:'test',  //不要加/表示绝对路径!
            success: function(body){
                console.log(body); //在浏览器控制台打印body信息!
            },
            error:function(){
                console.log("请求失败");
            }
        });
    </script>

注意:

这里的url不用加/servlet不同,而且这里的url就和我们的@WebServlet注释对应! 在这里插入图片描述

在这里插入图片描述 我们通过ajax的方式用前端构造请求,记得将这个html文件放入到webapp目录下,通过访问这个网页就向服务器发送了一个get方式的请求! 在这里插入图片描述 然后这里ajax通过回调的方式,如果请求成功,就会在控制台打印服务器给我们放回的body内容! 在这里插入图片描述在这里插入图片描述

  • 基于form表单

我们通过form表单构造一个post请求!

 <form action="test" method="post">
        <input type="text" name="name">
        <input type="password" name="password">
        <input type="submit" name="post请求" value="post请求">
</form>

客户端:在这里插入图片描述服务器

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;
@WebServlet("/test")
public class Test extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.getWriter().write("hello world!");
   }
   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String nameValue = req.getParameter("name");
       String passwordValue = req.getParameter("password");
       resp.getWriter().write("name:"+nameValue+" password:"+passwordValue);

   }
}

在这里插入图片描述 将响应输入到了浏览器上!