作者:MCphp | 来源:互联网 | 2023-06-21 20:20
ServletContext应用Q:什么叫ServletContext对象A:web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了
ServletContext应用
Q:什么叫ServletContext对象
A:web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用
1、共享数据
在这个Servlet中保存的数据,可以在另外一个servlet中拿到
1.1 代码
1.用于保存数据的HelloServlet代码
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//this.getInitParameter(); 初始化参数
//this.getServletConfig(); Servlet配置
//this.getServletContext(); Servlet上下文环境
ServletContext cOntext= this.getServletContext();
String username = "xy"; //数据
context.setAttribute("username",username); //将一个数据保存在了ServletContext中,名字 username 值 username
System.out.println("Hello");
}
}
2.用于测试获取数据的GetServlet代码
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext cOntext= this.getServletContext();
String username = (String) context.getAttribute("username");//获得ServletContext中存储的数据username(xy)
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字"+username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
3.web.xml代码
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
hello
com.xy.servlet.HelloServlet
hello
/hello
getc
com.xy.servlet.GetServlet
getc
/getc
1.2 代码测试
测试的时候发现了一个问题,如下图所示,获得的数据为null
这说明共享没有成功,这是为什么呢?
原来是因为:这个共享数据还没有被分享出去
换句话说:null的原因是没有setAtturibute 所以应该先访问HelloServlet
也就是说:这个数据是在HelloServlet程序内写入的,我光顾着抓紧测试了,还没有走HelloServlet程序
也就是说还没有共享数据,当然也就没法在测试网页获得数据了
重新测试一下,测试结果为数据共享成功
2、获取初始化参数
2.1 代码
1.用于获取初始化参数的ServletDemo03代码
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 获取初始化参数练习
*/
public class ServletDemo03 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext cOntext= this.getServletContext();
String url = context.getInitParameter("url");
resp.getWriter().print(url);
}
}
2.web.xml代码
url
jdbc:mysql://localhost:3306/mybatis
gp
com.xy.servlet.ServletDemo03
gp
/gp
2.2 代码测试
如下图所示:很明显与我们配置的web应用的初始化参数一致