Servlet——Servlet的简单使用

Servlet的生命周期

Servlet的生命周期就是指一个Servlet对象从被创建到销毁。一般来说,Servlet类从第一次接收到请求的时候被创建,且只创建一次(这说明Servlet是单例的),对应到下面的代码,init只会在第一次请求这个Servlet的时候在控制台输出一次,之后再请求就不会输出了,注意我们可以在web.xml的对应servlet配置里使用<load-on-srartup>更改Servlet被创建的优先级。而destroy则是在服务器关闭的时候才会被输出,说明Servlet对象在服务器关闭的时候被销毁。
读者可以使用如下代码自行验证

public class ServletLife extends HttpServlet {
    /**
     * 在第一次接受到请求的时候创建Servlet对象,且只创建一次,说明Servlet是单例的
     * 但是可以用过在web.xml的servlet里配置<load-on-startup></load-on-startup>更改Servlet的创建优先级
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        System.out.println("init");
    }
    
    /**
     *当服务器停止的时候,Servlet对象才被销毁
     */
    @Override
    public void destroy() {
        System.out.println("I'm destroyed");
    }
}
Servlet常见方法

Servlet里的方法主要以doXXX(XXX是具体的http请求方式)和service为主,下面主要说明以下这些方法的使用情况,以最常见的doGet和doPost为例

  1. 如果Servlet里doGet,doPost,service方法共存,则会执行service方法
  2. 如果Servlet里doGet,doPost共存,则会执行页面中指定请求方式的方法
  3. 如果Servlet里doGet,doPost,service方法共存,且在service中调用了super.service(),则会执行service与对应请求方式的方法
  4. 如果Servlet里只有service方法,则会执行servlce方法
  5. 如果Servlet里只有service方法,且在service中调用了super.service(),则会在页面中报405错误
    总结:在使用中,尽量不使用service方法,而是使用对应的doGet和doPost方法

读者可以使用如下代码自行更改验证

public class MethodServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("I am post");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("I am get");
    }

    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("I am service");
        super.service(req, resp);
    }
}
<%--该页面命名为method.jap,放在WEB-INF目录下--%>
<%--
  Created by IntelliJ IDEA.
  User: frank
  Date: 2020/2/10
  Time: 21:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--这里action的值配置的是对应跳转的Servlet的url-pattern--%>
    <form action="method" method="get">
        用户名: <input type="text" name="name" value="" /><br>
        密码: <input type="text" name="pwd" value="" /><br>
        <input type="submit" value="登陆">
    </form>
</body>
</html
<servlet>
	<servlet-name>MethodServlet</servlet-name>
	<servlet-class>home.frank.MethodServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>MethodServlet</servlet-name>
	<url-pattern>/method</url-pattern>
</servlet-mapping>

在地址栏中输入…/method.jsp,具体的跳转顺序应是 method.jsp -> (点击登陆,根据action写的值)找到method对应的servlet类 -> 根据请求方式执行对应的doGet或者doPost方法

Servlet常见错误

接下来说一下使用Servlet,访问页面时经常出现的一些Http状态码,了解这些状态码,有利于修正错误

  • 404: 请求的资源无法访问。出现这个错误时,我们首先应该考虑是不是地址栏中的地址写错了,其次考虑web.xml配置的对应servlet的url-pattern与表单请求的action是否一致
  • 405: 请求的方法不支持。请求里配置的方法与servlet中编写的方法不属于同类型
  • 500: 服务器内部错误。一般是web.xml配置错误或者servlet类编写错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值