本课程主要通过JSP开发中使用过的内置对象,为读者分析了Java开发中的Servlet类结构与request、response内置对象类型的对应关系。
(资料图)
通过之前的讲解已经清楚的发现,所有的doGet()/doPost()方法上都默认提供了HttpServletRequest、HttpServletResponse两个接口的实例了,那么随后只需要考虑获取其他的几个内置对象即可,可以获取到的内置对象实际上只有五个:ServletConfig、ServletContext、HttpSession。
在之前进行Servlet生命周期分析的时候,曾经分析过一个“init()”方法,这个方法中可以直接接收ServletConfig内置对象,也就是说如果要想获取所有的初始化配置参数,最简单的方式就是可以在init()中完成,同时这个方法只在Servlet使用之前默认执行一次,所以适合于完成初始化操作。
范例:观察ServletConfig使用
package com.yootk.servlet;import jakarta.servlet.ServletConfig;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebInitParam;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;// 在实际的项目开发中,初始化参数一般都会使用一些英文或字母进行的标记配置,很少会出现中文@WebServlet(urlPatterns = {"/inner"}, initParams = {@WebInitParam(name = "message", value = "yootk"),@WebInitParam(name = "teacher", value = "Small Lee")},loadOnStartup = 1) // 直接使用默认的value属性进行匹配public class InnerObjectServlet extends HttpServlet {@Overridepublic void init(ServletConfig config) throws ServletException {Enumeration
于是有的同学又开始较劲了,他说:在学习JSP的时候好像可以使用config内置对象随处的获取初始化的配置参数,我不想这样只是简单的在init()方法里面来获取所需要的初始化参数,怎么办呢?于是JakartaEE考虑到了各类同学的需求,所以也可以直接在Servlet中的服务处理方法里面利用父类提供的方法获取ServletConfig对象。
【Servlet接口】public ServletConfig getServletConfig();
【GenericServlet】public ServletContext getServletContext();
范例:观察GenericServlet父类中的相关定义
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
private transient ServletConfig config;
public void init(ServletConfig config) throws ServletException {
this.config = config; // 为本类中的ServletConfig对象实例化
this.init();
}
public ServletConfig getServletConfig() {
return this.config;
}
}
通过以上的分析就可以发现,只要利用父类所提供的getServletConfig()方法就可以轻松的获取到ServletConfig内置对象,这样就不必将初始化参数的获取操作只放在init()方法中完成了。
// 在实际的项目开发中,初始化参数一般都会使用一些英文或字母进行的标记配置,很少会出现中文@WebServlet(urlPatterns = {"/inner"}, initParams = {@WebInitParam(name = "message", value = "yootk"),@WebInitParam(name = "teacher", value = "Small Lee")},loadOnStartup = 1) // 直接使用默认的value属性进行匹配public class InnerObjectServlet extends HttpServlet {@Override // 进行GET请求的处理protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Enumeration
如果要想观察到初始化参数的获取,就只能够向Servlet发出请求,来观察其输出的内容了。