JavaWeb

JavaWeb-009-GenericServlet详解

2017-10-31  本文已影响21人  53b3f4658edc

简介

GenericServlet的源码

package javax.servlet;
import <a href="http://lib.csdn.net/base/java" class='replace_word' title="Java 知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.IOException;
import java.io.Serializable;
import java.util.Enumeration;
import java.util.ResourceBundle;
public abstract class GenericServlet
  implements Servlet, ServletConfig, Serializable
{
  private static final String LSTRING_FILE = "javax.servlet.LocalStrings";
  private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.LocalStrings");
  private transient ServletConfig config;   //transient:这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化,用来保证不希望这个成员被序列化。

  public void destroy()
  {
  }
  public String getInitParameter(String name)
  {
    ServletConfig sc = getServletConfig();
    if (sc == null) {
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
    }
    return sc.getInitParameter(name);
  }
  public Enumeration getInitParameterNames()
  {
    ServletConfig sc = getServletConfig();
    if (sc == null) {
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
    }
    return sc.getInitParameterNames();
  }
  public ServletConfig getServletConfig()
  {
    return this.config;
  }
  public ServletContext getServletContext()
  {
    ServletConfig sc = getServletConfig();
    if (sc == null) {
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
    }
    return sc.getServletContext();
  }
  public String getServletInfo()
  {
    return "";
  }
  public void init(ServletConfig config)
    throws ServletException
  {
    this.config = config;
    init();
  }
  public void init()
    throws ServletException
  {
  }
  public void log(String msg)
  {
    getServletContext().log(getServletName() + ": " + msg);
  }
  public void log(String message, Throwable t)
  {
    getServletContext().log(getServletName() + ": " + message, t);
  }
  public abstract void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse)
    throws ServletException, IOException;
  public String getServletName()
  {
    ServletConfig sc = getServletConfig();
    if (sc == null) {
      throw new IllegalStateException(lStrings.getString("err.servlet_config_not_initialized"));
    }
    return sc.getServletName();
  }
}

测试代码

package com.mac;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/*
 * GenericServlet:
 * λ    这个抽象类实现了Servlet、ServletConfig、Serializable。
 * λservice方法为抽象方法。
 * λ直接继承这个抽象类,使得开发更加简洁,只需要实现service方法就好。
 * λ在这个抽象类中,有一个ServletConfig成员变量,在ini(ServletConfig)方法中被赋值,可以直接使用getServletConfig方法获得。
 * λ还重载了一个init()方法,在ini(ServletConfig)方法中,对其进行了调用,有需要的话,就在继承之后重写这个方法(不要去动另外一个)。
 * λint()方法不是Servlet的生命周期方法(不会被直接自动调用,但是因为父类的init(ServletConfi)g方法中有调用init()方法,所有还是被调用了))。 
 */

/*
 * Implements: Servlet, ServletConfig, java.io.Serializable
 * Extended by: HttpServlet
 * 定义一般的、与协议无关的 servlet。要编写用于 Web 上的 HTTP servlet,请改为扩
 * 展 javax.servlet.http.HttpServlet。
 * GenericServlet 实现 Servlet 和 ServletConfig 接口。
 * servlet 可以直接扩展 GenericServlet,尽管扩展特定于协议的子类(比如 HttpServlet)更为常见。
 * GenericServlet 使编写 servlet 变得更容易。它提供生命周期方法 init 和 destroy 的简单版本,
 * 以及 ServletConfig 接口中的方法的简单版本。GenericServlet 还实现 log 方法,在 ServletContext 
 * 接口中对此进行了声明。
 * 要编写一般的 servlet,只需重写抽象 service 方法即可。
 */
public class LoginServlet extends GenericServlet {
    private static final long serialVersionUID = 1L;
    @Override
    public void init() throws ServletException {
        System.out.println("我是被重写的init方法");
    }
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        res.setContentType("text/html;charset=UTF-8");
        PrintWriter out = res.getWriter();

        //1.获取ServletContext对应的全局初始化参数(在web.xml中)
        ServletConfig sco = this.getServletConfig();
        System.out.println(sco);
        ServletContext sc = sco.getServletContext();
        String user = sc.getInitParameter("user");
        String password = sc.getInitParameter("password");
        
        //2.获取用户的HTML输入
        String inputUser = req.getParameter("user");
        String inputPassword = req.getParameter("password");
        
        //3.进行用户名和账号的验证
        if( user.equals(inputUser) && password.equals(inputPassword) ) {
            out.println("登录成功!");
        } else {
            out.println("用户名或密码有误!请检查后重试!!!");
        }
    }
}

效果

微信公众号:JavaWeb架构师


其它


关注下方公众号,回复:javaweb_course.code
完整教程PDF版本下载
上一篇 下一篇

猜你喜欢

热点阅读