Servlet——javax.servlet.*;ServletRequest; ServletResponse; ServletConfig; ServletContext; GenericServlet;

ServletRequest
    每一个HTTP请求,Servlet容器都会创建一个ServletRequest实例,并将它传给Servlet的service方法。
    ServletRequest接口中的部分方法:
        public int getContentLength()  返回请求主体中的字节数。若不知字节长度,返回-1.
        public String getContentType()  返回请求主体的MIME类型,若不知,返回null。
        public String getParameter(String name)  返回指定请求参数的值。通常用来返回一个HTML表单域的值,例:String id = request.getParameter("id");。
        public String getProtocol()  返回HTTP请求的协议名称和版本号
ServletResponse
    在调用一个Servlet的service方法之前,Servlet容器会先创建一个ServletResponse,并将它传给service方法。
    ServletResponse中getWriter方法,它返回可以将文本传给客户端的java.io.PrintWriter。在默认情况下,PrintWriter对象采用ISO-8859-1编码。
   
ServletConfig
    在Servlet容器初始化Servlet时,Servlet容器将ServletConfig传给Servlet的init方法。
    从Servlet内部获取某个初始参数的值,应该在init方法中让ServletConfig调用getInitParameter方法。
    String getInitParameter(String name) 返回某个参数值
    Enumeration<String> getInitParameterNames()  返回初始参数名称
   
ServletContext
    每个Web应用程序只有一个context。
    调用getServletContext方法可获得ServletContext。
    保存在ServletContext中的对象称作属性,处理属性有以下方法:
        Object getAttribute(String name)
        Enumeration<String> getAttributeNames()
        void setAttribute(String name, Object object)
        void removeAttribute(String name)
       
GenericServlet
    通过实现Servlet接口来编写的Servlet,必须为Servlet接口中的所有方法提供实现,即使有些方法没有方法体,并且还需要将ServletConfig对象保存在一个类级变量中。
    GenericServlet抽象类实现了Servlet和ServletConfig,并完成以下工作:
        将init方法中的ServletConfig赋值给一个类级变量,使它可以通过调用getServletConfig来获取。
        为Servlet接口中的所有方法提供默认实现
        提供方法来包装ServletConfig中的方法。
    GenericServlet通过在init方法中将ServletConfig对象赋给一个类级变量servletConfig,实现对ServletConfig的保存。
    如果在类中覆盖这个方法,则调用Servlet中的init方法,并且必须调用super.init(servletConfig)来保存ServletConfig。为避免这么做,GenericServlet提供了一个无参init方法,当把ServletConfig赋给servletConfig之后,这个方法会被第一个init方法调用(在有参init方法中调用无参init方法)。这意味着,可以通过覆盖无参init方法来编写初始化代码,ServletConfig仍由GenericServlet实例保存。
package com.java.servlet.test;
import javax.servlet.annotation.WebServlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebInitParam;

@WebServlet(name="GenericServletTest", urlPatterns= {"/generic"},
    initParams= {//initParams可以设置初始化参数
            @WebInitParam(name="admin", value="Tom"),
            @WebInitParam(name="email", value="admin@example.com")
    })
public class GenericServletTest extends GenericServlet{
    
    private static final long serialVersionUID = 62500890L;
    //继承GenericServlet抽血类,只需覆盖service方法即可
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        ServletConfig servletConfig = getServletConfig();
        //从servletConfig中获取提前设置的初始化参数
        String admin = servletConfig.getInitParameter("admin");
        String email = servletConfig.getInitParameter("email");
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        writer.print("<html><head></head><body>" + "Admin:" + admin 
                + "<br/>Email:" + email + "<body></html>");
    }

}

 代码结果截图:

 

posted @ 2019-07-24 11:30  !O0O!  阅读(166)  评论(0)    收藏  举报