ServletConfig对象
ServletConfig对象有什么用?
通过此对象可以读取web.xml中配置的初始化参数。
为什么我们要把参数信息放到web.xml文件中呢?我们可以直接在程序中都可以定义参数信息,搞到web.xml文件中又有什么好处呢?
好处就是:能够让你的程序更加灵活【更换需求,更改配置文件web.xml即可,程序代码不用改】
配置web.xml文件配置的参数信息
<servlet>
<servlet-name>MyServletDemo1</servlet-name>
<servlet-class>com.jiuyue.servlet.MyServlet</servlet-class>
<!--WEB应用程序在启动时,就会装载并创建Servlet的实例对象、
以及调用Servlet实例对象的init()方法。-->
<!--<load-on-startup>1</load-on-startup>-->
<!--此时不能使用<load-on-startup>-->
<init-param>
<param-name>name</param-name>
<param-value>jiuyue</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyServletDemo1</servlet-name>
<url-pattern>/MyServletDemo1</url-pattern>
</servlet-mapping>
在Servlet中获取ServletConfig对象,通过ServletConfig对象获取在web.xml文件配置的参数
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
//获取ServletConfig对象
ServletConfig servletConfig = this.getServletConfig();
//根据配置获取数据
String name = servletConfig.getInitParameter("name");
System.out.println("name: "+name);
}
控制台输出(这里发起doGet请求):
doGet
name: jiuyue
ServletContext对象
什么是ServletContext对象?
当Tomcat启动的时候,就会创建一个ServletContext对象。它代表着当前web站点
ServletContext有什么用?
1、ServletContext既然代表着当前web站点,那么所有Servlet都共享着一个ServletContext对象,所以Servlet之间可以通过ServletContext实现通讯。
2、ServletConfig获取的是配置的是单个Servlet的参数信息,ServletContext可以获取的是配置整个web站点的参数信息
3、利用ServletContext读取web站点的资源文件
4、实现Servlet的转发【用ServletContext转发不多,主要用request转发】
Servlet之间实现通讯
ServletContext对象可以被称之为域对象其实域对象可以简单理解成一个容器【类似于Map集合】
实现Servlet之间通讯就要用到ServletContext的setAttribute(String name,Object obj)方法.
MyServlet01类
public class MyServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String name= "jiuyue";
//在MyServlet01设置域对象
servletContext.setAttribute("myName",name);
}
}
MyServlet02类
public class MyServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取ServletContext对象
ServletContext servletContext = this.getServletContext();
//通过关键字获取存储在域对象的值
String value = (String) servletContext.getAttribute("myName");
System.out.println(value);
}
}
访问MyServlet02可以获取MyServlet01存储的信息,从而实现多个Servlet之间通讯。
刚开始直接访问MyServlet02并没有获取到数据myName信息,其实是要先访问MyServlet01再来访问MyServlet02才能获取到数据myName信息。
MyServlet01设置域对象在JSP中获取数据值
public class MyServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String name= "jiuyue";
//在MyServlet01设置域对象
servletContext.setAttribute("myName",name);
req.getRequestDispatcher("test.jsp").forward(req,resp);
}
}
test.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Hello,MyServlet01</h1><br>
<h1>${myName}</h1>
</body>
</html>
“扫码关注“