ServletContext应用
ServletContext
web容器在启动的时候,会为每个web程序创建一个ServletContext对象,它代表了当前的web应用
1、共享数据
我在这个servlet中保存的数据,可以在另一个servlet中拿到
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// resp.setContentType("text/html");
// resp.setCharacterEncoding("utf-8");
// PrintWriter writer = resp.getWriter();
// writer.print("Hello Servlet!");
ServletContext s = this.getServletContext();
String username="龙龙";
s.setAttribute("username",username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html");
ServletContext m = this.getServletContext();
String username = (String) m.getAttribute("username");
resp.getWriter().print("名字"+username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.zhou.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>getc</servlet-name>
<servlet-class>com.zhou.servlet.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getc</servlet-name>
<url-pattern>/getc</url-pattern>
</servlet-mapping>
测试访问结果:
2、得到初始化信息
public class ServletDemo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String a = servletContext.getInitParameter("url");
PrintWriter writer = resp.getWriter();
writer.print(a);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
web.xml中配置初始化信息及映射
<context-param>
<param-name>url</param-name>
<param-value>http://localhost:3306/mybatis</param-value></param-value>
</context-param>
<servlet>
<servlet-name>getp</servlet-name>
<servlet-class>com.zhou.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getp</servlet-name>
<url-pattern>/getp</url-pattern>
</servlet-mapping>
3.请求转发
public class ServletDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入了ServletDemo2");
ServletContext sC = this.getServletContext();
RequestDispatcher rd = sC.getRequestDispatcher("/getp");//转发的请求路径
rd.forward(req,resp);//调用forward方法实现转发
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
web.xml中配置初始化信息及映射
servlet>
<servlet-name>getp</servlet-name>
<servlet-class>com.zhou.servlet.ServletDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>getp</servlet-name>
<url-pattern>/getp</url-pattern>
4、读取资源文件
Properties
- 在java目录下新建properties
- 在resource目录下新建properties
发现都被打包到了同一个路径下:classes,我们俗称这个路径为classpath
演示
需要一个文件流
username: root
password: 123456
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext sc = this.getServletContext();
InputStream ra = sc.getResourceAsStream("/WEB-INF/classes/db.properties");
Properties properties = new Properties();
properties.load(ra);
String user = properties.getProperty("username");
String pwd = properties.getProperty("password");
resp.getWriter().print(user+":"+pwd);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
<servlet>
<servlet-name>read</servlet-name>
<servlet-class>com.zhou.servlet.ServletDemo3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>read</servlet-name>
<url-pattern>/read</url-pattern>
</servlet-mapping>
测试OK!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗