目录
3.ServletConfig和ServletContext对象的区别
ServletContext是javax.servlet包下的一个接口,又称上下文对象,是配置对象也是一个域对象;
当服务器启动时,会为服务器中的每一个web应用程序创建一个ServletContext对象;
在web应用中的servlet要想实现资源的共享,可以通过ServletContext来完成;
getInitParameter() //获取指定参数名称的全局参数值
getRealPath(String path) //获得当前项目的服务器磁盘路径
getContextPath() //获取项目的根路径
getAttribute(String parameterName) //获取ServletContext域中指定名称的参数值;
setAttribute(String paramterName,Object parameterValue) //存储参数到ServletContext域中;
removeAttribute(String parameterNam) //将ServletContext域中指定名称的参数移除;
在<servlet>标签种,通过<init-param>标签来配置。有两个子标签:
1. <param-name>:代表初始化参数的key。
2. <param-value>: 代表初始化参数的value。
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>root456</param-value>
</context-param>
- 定义一个类,继承HttpServlet。
- 重写doGet()和doPost()方法。
- 在web.xml进行配置。
- 在请求方法中通过请求对象获取到ServletConfig对象。
- 然后再通过getInitParameter()方法获取到配置的初始化参数。
- 部署并启动项目。
- 通过浏览器测试。
?代码实现:
package com.by.servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
public class ServletConfigServlet extends HttpServlet {
@Override
public void service(ServletRequest servletRequest,
ServletResponse servletResponse) throws ServletException {
//1.获取ServletConfig对象
ServletConfig servletConfig = getServletConfig();
//2.获取Servlet中的初始化参数
String username = servletConfig.getInitParameter("username");
System.out.println(username);
String password = servletConfig.getInitParameter("password");
System.out.println(password);
//3.获取ServletContext对象(域对象)
ServletContext servletContext = servletConfig.getServletContext();
}
}
?param参数不可以在另外的Servlet中获取
?
public class ServletConfigServlet2 extends HttpServlet {
@Override
public void goGet(ServletRequest servletRequest,
ServletResponse servletResponse) throws ServletException {
//1.获取ServletConfig对象
ServletConfig servletConfig = getServletConfig();
//2.获取Servlet中的初始化参数
String username = servletConfig.getInitParameter("username");//不能获取
System.out.println(username);
String password = servletConfig.getInitParameter("password");//不能获取
System.out.println(password);
//3.获取ServletContext对象(域对象)
ServletContext servletContext = servletConfig.getServletContext();
}
}
ServletContext是javax.servlet包下的一个接口,又称上下文对象,是配置对象也是一个域对象;
当服务器启动时,会为服务器中的每一个web应用程序创建一个ServletContext对象;
在web应用中的servlet要想实现资源的共享,可以通过ServletContext来完成;
getInitParameter() //获取指定参数名称的全局参数值
getRealPath(String path) //获得当前项目的服务器磁盘路径
getContextPath() //获取项目的根路径
getAttribute(String parameterName) //获取ServletContext域中指定名称的参数值;
setAttribute(String paramterName,Object parameterValue) //存储参数到ServletContext域中;
removeAttribute(String parameterNam) //将ServletContext域中指定名称的参数移除;
ServletContext不像ServletConfig接口在Servlet标签里配置,而是针对于整个应用的配置,也叫全局的初始化参数;
在<web-APP>标签中,通过<context-param>标签来配置,有两个子标签:
1. <param-name>: 代表全局初始化参数的key。
2.<param-value>: 代表全局初始化参数的value。
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>root456</param-value>
</context-param>
该代码是直接放在<web-app>标签里的?。
ServletContext 实现步骤:
1.定义一个类,继承HttpServlet。
2.重写 doGet和 doPost 方法。
3.在web.xml文件中配置Servlet和ServletContext。
4.获取 ServletContext 对象。
5.测试相关方法的使用。
6.部署并启动项目。
7.通过浏览器测试。
代码实现:
public class ServletContextServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//一个web应用只有一个serveletContext对象,能实现共享
ServletContext servletContext = getServletContext();
String username = servletContext.getInitParameter("username");
String password = servletContext.getInitParameter("password");
System.out.println(username+"---------"+password);
//往servletContext对象添加属性:继承了map
servletContext.setAttribute("msg", "sb");
}
}
param参数可以在另外的Servlet中获取
在写两个分别用来测试:?
public class ServletContextServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//一个web应用只有一个serveletContext对象,能实现共享
ServletContext servletContext = getServletContext();
String username = servletContext.getInitParameter("username");
String password = servletContext.getInitParameter("password");
System.out.println(username+"---------"+password);
Object msg = servletContext.getAttribute("msg");
System.out.println(msg);
}
}
public class ServletContextServlet3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = getServletContext();
//删除servletContext对象中的属性
servletContext.removeAttribute("msg");
}
}
web.xml中的配置:
<servlet>
<servlet-name>context1</servlet-name>
<servlet-class>com.by.servlet.ServletContextServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>context1</servlet-name>
<url-pattern>/context1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>context2</servlet-name>
<servlet-class>com.by.servlet.ServletContextServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>context2</servlet-name>
<url-pattern>/context2</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>context3</servlet-name>
<servlet-class>com.by.servlet.ServletContextServlet3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>context3</servlet-name>
<url-pattern>/context3</url-pattern>
</servlet-mapping>
先访问context1:
再访问context2;
可以接收到msg。
再访问context3,此时msg已被删除,再次访问context2,此时msg为空。
ServletConfig 是针对单个servlet 而言的,在servlet 被创建时初被容器创建,用来存储servlet 初始化参数。Servlet 可以通过 getServletConfig()方法获取ServletConfig 对象。
ServletContext 是针对整个web 应用而言的,在web 应用启动时被容器创建,用来存储应用级别的信息,例如应用名称、上下文路径等。所有servlet 可以通过 getServletContext()方法获取Servle etContext 对象。