Servlet API 详解

4 篇文章 0 订阅
2 篇文章 0 订阅

目的:当前主要掌握三个类:

        HttpServlet,HttpServletRequest,HttpServletResponse。


HttpServlet

我们写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自 HttpServlet, 并重写其中的某些方法.

核心方法

方法名称调用时机
init HttpServlet 实例化之后被调用一次,tomcat自动调用
destroy在 HttpServlet 实例不再使用的时候调用一次
service收到 HTTP 请求的时候调用
doGet 收到 GET 请求的时候调用(由 service 方法调用)
doPost 收到 POST 请求的时候调用(由 service 方法调用)
doPut/doDelete/doOptions/... 收到其他请求的时候调用(由 service 方法调用)

可以在里面写sout,每次打开页面,触发一次请求,打印一次

destroy能不能被执行出来还有待被商榷:

1.如果通过 smart tomcat 的停止按钮,这个操作本质上是通过 tomcat 的 8005 端口主动停止的,这能够触发 destroy 。

2.如果是直接杀进程,此时可能就来不及执行 destroy 就没了。

影刺,我们不太推荐使用 destroy ,不太靠谱

3.当HttpServlet实例不再使用时调用该方法,啥时候该实例就不再使用了?服务器只要不停止,该实例就一直被使用,只有当服务器停止后了,才会调用该方法,只执行一次

service:doGet就是在 service 中调用的。

service: 每次收到HTTP请求就会调用 ,HttpServlet父类里会有一个service方法,service会调用doGet。doPut,doDelete…也是同理,在收到对应请求时调用,由service调用

注意! init 和 destroy 方法,都是一个 Servlet 对象调用一次。
而 service 可能会被一个对象,给调用很多次。
毕竟我们大部分时候,进入一个网站都是有目的,至少UI浏览一下,在浏览的过程中就需要进行多次交互,也就会发送多次请求,service 自然也就会被调用多次。

servlet 生命周期:1。开始时执行 init;2.每次收到请求执行 service;3.结束销毁时,执行 destroy


后面的内容,可以关注Servlet API 详解_servlet-api_lambo mercy的博客-CSDN博客

浏览器通过form表单构造了一个HTTP请求,这个请求到达tomcat,tomcat解析请求,构造了一个req对象,再到servlet里面,servlet再去解析里面的内容再来构造响应,返回给浏览器。

不过在引用的链接中,

存在一点失误,要改成

class Student {
    public int userId;
    public int classId;
}
 @WebServlet("/xxx")
 public class xxx extends HttpServlet{

        protected void doPost(...) throws ...{
//              使用jackson涉及到的核心对象
                ObjectMapper objectMapper = new ObjectMapper();
//              readValue就是把一个json格式的字符串转成java对象
                Student student = objectMapper.readValue(req.getInputStream(),Student.class);
                System.out.println(student.classId+","+student.userId);

        }

}

在引用博客的这一块

能修改成

另外的状态码:手动返回404页面

这个是返回tomcat自带的错误页面

下面接着写引用博客里没有写完的内容

引用后续:

代码示例: 自动刷新 AutoRefreshServlet 类

实现一个程序, 让浏览器每秒钟自动刷新一次. 并显示当前的时间戳.

@WebServlet("/autoRefreshServlet")
public class AutoRefreshServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
    resp.setHeader("Refresh", "1");
    long timeStamp = new Date().getTime();
    resp.getWriter().write("timeStamp: " + timeStamp);
 }
}
  • 通过 HTTP 响应报头中的 Refresh 字段, 可以控制浏览器自动刷新的时机.
  • 通过 Date 类的 getTime 方法可以获取到当前时刻的毫秒级时间戳.

前后端交互代码注意事项

 

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值