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类编写错误

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/20603.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论