ServletConfig类是servlet程序的配置信息类
Servlet程序和ServletConfig对象都是由Tomcat负责创建提供,我们负责使用
Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。
1、可以获取Serlvet程序的别名 servlet-name的值
2、获取初始化参数init-param【属于每个servlet自己】
3、获取SerlvetContext对象
- @Override
- public void init(ServletConfig servletConfig) throws ServletException {
- System.out.println("2 初始化方法");
- //1、可以获取Serlvet程序的别名 servlet-name的值
- System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
- //2、获取初始化参数init-param
- System.out.println("初始化参数username的值:" + servletConfig.getInitParameter("username"));
- System.out.println("初始化参数url的值:" + servletConfig.getInitParameter("url"));
- //3、获取SerlvetContext对象
- System.out.println(servletConfig.getServletContext());
-
- }
【子类重写init方法时,要super一下父类GenericServlet,避免接收不到tomcat提供的ServletConfig对象】
1、ServletContext是一个接口,表示servlet上下文对象
2、一个web工程只有一个ServletContext对象实例
3、ServletContext对象是一个域对象
4、ServletContext对象是在web工程部署启动的时候创建,在web工程停止的时候销毁
【域对象】
域对象是可以向像Map一样存取数据的对象,叫域对象。
这里的域指的是存取数据的操作范围,为整个web工程
存储据 setAttribute() 取数据getAttribute() 删除数据removeAttribute()
1、获取web.xml中配置的上下文参数context-param【属于整个web工程 所有人都可以获取到】
2、获取当前的工程路径
3、获取工程部署后在服务器磁盘上的绝对路径
4、像Map一样存取数据
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //1、获取web.xml中配置的上下文参数context-param
- ServletContext servletContext = getServletConfig().getServletContext();
- String username = servletContext.getInitParameter("username");
- System.out.println("username的参数是:" + username);
- String password = servletContext.getInitParameter("password");
- System.out.println("password的参数是:" + password);
-
- //2、获取当前的工程路径
- String contextPath = servletContext.getContextPath();
- System.out.println("当前工程路径:" + contextPath);
-
- //3、获取工程部署后在服务器磁盘上的绝对路径
- //用 /工程名 替代了项目在服务器硬盘上的绝对路径
- // / 斜杠被服务器解析地址为 http://ip:port/工程名/ 映射到IDEA代码编译后的文件路径下out目录里
- // 也就是realPath: E:\java_study\Study_Code\web03_servlet\out\artifacts\web03_servlet_war_exploded
-
- // "/"已经到了web工程目录下
- System.out.println("工程的绝对路径是:" + servletContext.getRealPath("/"));
- System.out.println("工程下css目录的绝对路径是:" + servletContext.getRealPath("/css"));
- }
输出结果:
- username的参数是:context
- password的参数是:root
- 当前工程路径:/web03_servlet
- 工程的绝对路径是:E:\java_study\Study_Code\web03_servlet\out\artifacts\web03_servlet_war_exploded\
- 工程下css目录的绝对路径是:E:\java_study\Study_Code\web03_servlet\out\artifacts\web03_servlet_war_exploded\css
Using CATALINA_BASE: "C:\Users\hhhhxy\AppData\Local\JetBrains\IntelliJIdea2021.3\tomcat\3dcf7132-dc2a-4c03-8ccf-5e2ef6d64714"
该路径为IDEA整合Tomcat之后,Tomcat被拷贝的一些副本内容,IDEA同样在拷贝后的Tomcat的conf\Catalina\localhost中建立一个xml文件,配置了你的本地工程代码路径
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //获取getServletContext对象
- ServletContext context = getServletContext();
- context.setAttribute("key1", "val1");
- System.out.println("context中key1的值是:"+context.getAttribute("key1"));
- }
输出结果:
context中key1的值是:val1