Servlet练习和自定义GenericServlet实现类

在web.xml文件中设置两个WEB应用的初始化参数,user、password

定义一个loginServlet,在其中获取请求的user,password,比对其和web.xml文件中定义的请求参数是否一致。若一致,响应Hello:xxx,若不一致,响应Sorry:xxx xxx为user。

Servlet:

  private ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
        this.servletConfig = servletConfig;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service...");
//        1.获取请求参数:username,password
        String username = servletRequest.getParameter("username");
//        2.获取当前web应用的初始化参数:user,password
        String password = servletRequest.getParameter("password");
//        3.比对
        ServletContext servletContext = servletConfig.getServletContext();
        String initUser = servletContext.getInitParameter("user");
        String initPassword = servletContext.getInitParameter("password");

        PrintWriter printWriter = servletResponse.getWriter();
//        4.打印响应字符串
        if (username.equals(initUser) && password.equals(initPassword)){
            printWriter.print("Hello" + username);
        }else{
            printWriter.print("Sorry" + username);
        }
    }

 web.xml:

    <!--配置当前web应用的初始化参数-->
    <context-param>
        <param-name>user</param-name>
        <param-value>YHS</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>123</param-value>
    </context-param>

    <servlet>
        <servlet-name>DengluServlet</servlet-name>
        <servlet-class>com.demo.javaweb.DengluServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DengluServlet</servlet-name>
        <url-pattern>/DengluServlet</url-pattern>
    </servlet-mapping>

  

GenericServlet:

1)是一个Servlet.是Servlet接口和ServletConfig接口的实现类,但是一个抽象类。其中的service方法为抽象方法

2)如果新建的Servlet程序直接继承GenericServlet会使开发更简洁

3)具体实现

- 在GenericServlet中声明了一个ServletConfig类型的成员变量,在init(ServletConfig)方法中对其进行了初始化

- 利用servletConfig成员变量的方法实现了ServletConfig接口的方法

- 还定义了一个init()方法,在init(ServletConfig)方法中对其进行调用,子类可以直接覆盖init()对其中实现对Servlet的初始化

- 不建议直接覆盖init(ServletConfig),因为如果忘记编写super(ServletConfig),而还用了ServletConfig接口的方法,则会出现空指针异常

- 新建的init(){}并非Servlet的生命周期方法,而init(ServletConfig)是生命周期相关的方法

  

package com.demo.javaweb;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;

/*自定义的一个Servlet接口的实现类:让开发的任何Servlet都继承该类,以简化开发
* */
public  abstract class GenericServlet implements Servlet,ServletConfig{
//    以下方法为Servlet接口的方法
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.servletConfig = servletConfig;
        init();
    }

    public void init()throws ServletException{
//        我们自己可以写的创建时的东西
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;

    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {

    }

    private ServletConfig servletConfig;
    //    以下方法为ServletConfig接口的方法
    @Override
    public String getServletName() {
        return servletConfig.getServletName();
    }

    @Override
    public ServletContext getServletContext() {
        return servletConfig.getServletContext();
    }

    @Override
    public String getInitParameter(String s) {
        return servletConfig.getInitParameter(s);
    }

    @Override
    public Enumeration<String> getInitParameterNames() {
        return servletConfig.getInitParameterNames();
    }
}

  

Servlet:

package com.demo.javaweb;

import javax.servlet.*;
import javax.servlet.GenericServlet;
import java.io.IOException;
import java.io.PrintWriter;

public class DengluServlet extends GenericServlet {
    
    private ServletConfig servletConfig;
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init...");
        this.servletConfig = servletConfig;
        super.init(servletConfig);
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service...");
//        1.获取请求参数:username,password
        String username = servletRequest.getParameter("username");
//        2.获取当前web应用的初始化参数:user,password
        String password = servletRequest.getParameter("password");
//        3.比对

        String initUser = getServletContext().getInitParameter("user");
        String initPassword = getServletContext().getInitParameter("password");

        PrintWriter printWriter = servletResponse.getWriter();
//        4.打印响应字符串
        if (initUser.equals(username) && initPassword.equals(password)){
            printWriter.print("Hello" + username);
        }else{
            printWriter.print("Sorry" + username);
        }
    }



    @Override
    public String getServletInfo() {
        System.out.println("getServletInfo...");
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy...");
    }
}

  

原文地址:https://www.cnblogs.com/yangHS/p/10925105.html