关于Servlet编程(1)

1.Servlet编程中常见网页错误

404错误 : 访问不存在

一般都是路径出错.

在这里插入图片描述


405错误 : 请求方法不允许

  • 使用访问的方法有误
    • 只书写了接受Get方法的代码.却使用POST方法访问.
  • 代码中忘记注释super()方法也会返回405
    • 因为源码是直接返回405的

在这里插入图片描述

这里展示的两段代码都会引发上图的405.

1.首先看源码中忘记删除super.doGet()方法.

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(name = "TestErrorServlet", value = "/testerr")
public class TestErrorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //代码中忘记注释super()方法
        super.doGet(request, response);
    }
}

2.下述中代码只书写了doPost请求的方法.但是通过浏览器访问默认是GET方法.

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(name = "TestErrorServlet", value = "/testerr")
public class TestErrorServlet extends HttpServlet {
    //只书写了doPost方法,但是浏览器默认访问GET方法.

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("test");
    }
}

500错误 : 代码中抛异常

代码中抛异常未被处理.异常抛到了Tomcat,Tomcat直接返回500

在这里插入图片描述

doGet中除零异常代码.除零异常未捕获会向上抛出.

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(name = "TestErrorServlet", value = "/testerr")
public class TestErrorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //除零异常未捕获向上抛出
        System.out.println(5 / 0);
    }
}

空白页面 : 一般是正常访问

一般是正常访问.但是代码中没有给页面返回数据.

在这里插入图片描述

代码中什么都没有书写,前端就什么也没有接收到.但是没有错误.

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(name = "TestErrorServlet", value = "/testerr")
public class TestErrorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

无法访问 : 网络不通(TCP的层次是不通的)

可能是Tomcat没有启动 或者启动失败了.(比如Tomcat端口被占用,启动失败)

在这里插入图片描述


2.关于GET和POST的请求常见构造方式.

  • GET请求
    • 1.直接在地址栏里输入URL
    • 2.通过a标签跳转
    • 3.通过img/link/script…
    • 4.通过form表单 method=get
    • 5.ajax,type指定为get
  • POST请求
    • 1.通过form表单 method=post
    • 2.通过ajax,type指定为POST

3.常用类的关键API介绍

HttpServlet

我们写 Servlet 代码的时候, 首先第一步就是先创建类, 这个类就要继承自 HttpServlet.那我们来看看这个类.

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

编写代码来观察HttpServlet的方法.

  • 代码详情
    • 继承HttpServlet类
    • 重写继承类的方法
    • 使用@WebServlet注解
      • name : 类名
      • value : 填写路径
        • 这里填写的路径对应到地址栏的路径
        • 这里填写的路径必须有 / .硬性规定.( value = “/hello” )
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(name = "helloServlet", value = "/hello")
public class HelloServlet extends HttpServlet {

    private String message;

    public void init() {
        message = "Hello World!";
        System.out.println("会在HttpServlet实例化时调用一次");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //设置返回数据的类型
        response.setContentType("text/html");
        System.out.println("在收到GET请求的时候调用");
        // Hello
        //获取流对象用于给页面返回数据
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("在收到POST请求的时候调用");
    }

    public void destroy() {
        System.out.println("会在HttpServlet销毁时会调用");
    }
}
  • 访问页面.观察控制台.

在这里插入图片描述

  • 可以看到控制台的输出符合预期.
    • init 初始化时调用
    • doGet 收到请求时调用
    • doPost 未收到请求,不调用
    • destroy 未主动销毁,不调用

image.png

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魚小飛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值