一、ServletConfig类使用
ServletConfig类时Servlet程序的配置信息类,使用Servlet可以实现
- 获取Servlet程序的别名,既web.xml中配置servlet-name标签的值
- 获取初始化参数,既web.xml中init-param标签的值
- 获取ServletContext对象
获取servlet-name别名
在HelloServlet中使用ServletConfig, 其中init方法中包含了ServletConfig类作为方法参数,可以直接使用servletConfig获取web.xml中的一些配置
@Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("生命周期2-init初始化方法"); // 获取servlet程序的servlet-name配置的名称 String alias = servletConfig.getServletName(); System.out.println("HelloServlet的别名是:" + alias); } 复制代码
重启Tomcat,浏览器输入 http://localhost:8080/hello
控制台成功输出web.xml中配置的servlet-name标签的值
获取init-param初始化参数
在web.xml中配置初始化参数
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.lilith.servlet.HelloServlet</servlet-class> <init-param> <param-name>username</param-name> <param-value>root</param-value> </init-param> </servlet> 复制代码
在HelloServlet中增加代码获取init-param配置的值
@Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("生命周期2-init初始化方法"); // 获取servlet程序的servlet-name配置的名称 String alias = servletConfig.getServletName(); System.out.println("HelloServlet的别名是:" + alias); // 获取servlet程序的初始化参数 String username = servletConfig.getInitParameter("username"); System.out.println("初始化参数user的值为:" + username); } 复制代码
重新启动Tomcat
控制台根据param-name获取到param-value的值
获取ServletContext对象
使用servletConfig的getServletContext方法获取ServletContext对象。
@Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("生命周期2-init初始化方法"); // 获取servlet程序的servlet-name配置的名称 String alias = servletConfig.getServletName(); System.out.println("HelloServlet的别名是:" + alias); // 获取servlet程序的初始化参数 String username = servletConfig.getInitParameter("username"); System.out.println("初始化参数username的值为:" + username); // 获取ServletContext对象 ServletContext servletContext = servletConfig.getServletContext(); System.out.println("ServletContext对象:" + servletContext); } 复制代码
重新启动Tomcat,浏览器输入http://localhost:8080/hello
Servlet程序和ServletConfig对象都是由Tomcat负责创建的,Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建是都会创建一个对应的ServletConfig对象
在其他地方使用ServletConfig对象
在其他方法中使用ServletConfig可以直接调用getServletConfig方法来获取ServletConfig对象;在controller包中新增HalloServlet,在doPost方法中获取ServletConfig对象
public class HalloServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 通过servletConfig获取Servlet配置的信息 ServletConfig servletConfig = getServletConfig(); System.out.println(this.getClass() + "中通过getServletConfig方法获取ServletConfig"); ServletContext servletContext = servletConfig.getServletContext(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } 复制代码
在web.xml中配置HalloServlet的访问路径
<servlet> <servlet-name>HalloServlet</servlet-name> <servlet-class>com.lilith.servlet.HalloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HalloServlet</servlet-name> <url-pattern>/hallo</url-pattern> </servlet-mapping> 复制代码
重启Tomcat,浏览器访问 http://localhost:8080/hallo
要获取web.xml中配置的param-value,要重写父类的init方法,负责会报错空指针异常
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 通过servletConfig获取Servlet配置的信息 ServletConfig servletConfig = getServletConfig(); System.out.println(this.getClass() + "中通过getServletConfig方法获取ServletConfig"); // 获取servlet程序的初始化参数 String username = servletConfig.getInitParameter("username"); System.out.println("初始化参数username的值为:" + username); ServletContext servletContext = servletConfig.getServletContext(); } @Override public void init(ServletConfig config) throws ServletException { super.init(config); } 复制代码
web.xml增加初始化配置
<servlet> <servlet-name>HalloServlet</servlet-name> <servlet-class>com.lilith.servlet.HalloServlet</servlet-class> <init-param> <param-name>username</param-name> <param-value>stark</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>HalloServlet</servlet-name> <url-pattern>/hallo</url-pattern> </servlet-mapping> 复制代码
重新启动Tomcat,浏览器输入http://localhost:8080/hallo
控制台成功输出初始化配置的值
二、ServletContext类的使用
ServletContext是什么?
- ServletContext是一个接口,表示Servlet的上下文
- 一个Web工程中只有一个ServletContext对象
- ServletContext是一个域对象
域对象就是可以向Map一样存取数据,叫做域对象,这里的域对象指的是存取数据的操作范围,域对象中使用三个方法操作数据 setAttribute:存数据 getAttribute:取数据 removeAttribute:删除数据
ServletContext有以下作用
- 获取web.xml中配置的上下文参数context-param
- 获取当前的工程路径
- 获取工程部署后在服务器上的绝对路径
- 存取数据
获取上下文参数
在controller包中新建BonjourServlet
public class BonjourServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Bonjour Post"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取web.xml中的上下文参数context-param ServletContext servletContext = getServletContext(); String username = servletContext.getInitParameter("username"); System.out.println("上下文参数username的值为:" + username); } }