关于Servlet编程(1)

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

404错误 : 访问不存在

一般都是路径出错.

关于Servlet编程(1)_第1张图片


405错误 : 请求方法不允许

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

关于Servlet编程(1)_第2张图片

这里展示的两段代码都会引发上图的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

关于Servlet编程(1)_第3张图片

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);
    }
}

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

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

关于Servlet编程(1)_第4张图片

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

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端口被占用,启动失败)

关于Servlet编程(1)_第5张图片


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("");
        out.println("

" + message + "

"
); out.println(""); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("在收到POST请求的时候调用"); } public void destroy() { System.out.println("会在HttpServlet销毁时会调用"); } }
  • 访问页面.观察控制台.

关于Servlet编程(1)_第6张图片

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

你可能感兴趣的:(鱼小飞代码之旅,servlet,tomcat,java)