首页 > 资讯 > > 内容页

Servlet与JSP内置对象_全球消息

发表时间:2023-03-08 11:49:49 来源:李兴华java2python

本课程主要通过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 {Enumerationenu = config.getInitParameterNames(); // 获取全部初始化参数名称while (enu.hasMoreElements()) {String paramName = enu.nextElement(); // 获取初始化参数名称System.out.println("【InnerObjectServlet.init(ServletConfig config)】" + paramName + " = " + config.getInitParameter(paramName));}}@Override // 进行GET请求的处理protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}@Override // 进行GET请求的处理protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);} }

于是有的同学又开始较劲了,他说:在学习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 {Enumerationenu = super.getServletConfig().getInitParameterNames(); // 获取全部初始化参数名称while (enu.hasMoreElements()) {String paramName = enu.nextElement(); // 获取初始化参数名称System.out.println("【InnerObjectServlet.init(ServletConfig config)】" + paramName + " = " + super.getServletConfig().getInitParameter(paramName));}}@Override // 进行GET请求的处理protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);} }

如果要想观察到初始化参数的获取,就只能够向Servlet发出请求,来观察其输出的内容了。

最近更新