大家好,今天来分享一下servletContext 作用
关于 servletContext 对象, 他代表是整个web 项目,他可以和servlet 或者程序的容器进行通信
同时也可以管理web项目
当一个web项目当中有很多servlet, 那这些servlet之间需要通信
就要使用到servletContext 对象来负责
在java文件夹下
package test02;
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 FirstServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
System.out.println("你好");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
}
}
设置tomcat
会自动跳出这个页面
servletContext 对象
就是一个web容器(像tomcat)在启动的时候,每一个web应用都有一个servletContext 对象,负责管理整个web容器,它也表示当前的web应用
// this.getInitParameter() 初始化参数
//this.getServletConfig() servlet 配置
//this.getServletContext() servlet上下文
这是截图:(以及它具体的摆放位置)
这几个属性百度上都有
this.getServletContext()
是我们今天的关键
servletContext 对象主要的功能:
一. 数据共享(可以让你在一个servlet当中获取到另一个servlet当中的数据)
这句话可能不太好懂
可以看前面的博客
在这里也可以说一下,单个的servlet程序创建过程
-
在idea当中新建一个webapps模板的maven项目(这个不强求,只是为了方便)
-
导入相关依赖
-
写一个类,例如FirstServlet,让他继承HttpServlet 这个类
-
写对应的方法(dopost,doget 这两个)
-
在web.xml 文件中进行注册
注意看它的位置
我们要在web.xml 里面去进行注册
这是在web.xml 里面写的东西
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
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">
<!-- 注册servlet-->
<servlet>
<servlet-name >hello</servlet-name>
<!-- 可以随便写,就是一个别名-->
<servlet-class>test02.FirstServlet</servlet-class>
<!-- 这里一定要指向我们自己刚才写的类,写清楚它所在的具体路径-->
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
<!-- 这是配置它的请求路径-->
</servlet-mapping>
</web-app>
完成之后这个web.xml 的文件就不需要动它了
servlet的代码部分也完成了
接下来我们要配置tomcat服务器
idea配置tomcat服务器看我这个就可以了
接下来我们启动tomcat ,让tomcat把我们的servlet程序在浏览器上进行展示
就是这样
看效果
到这里,我们一个最简单的servlet 程序 就好了
这就是一个单个的servlet程序的创建过程
然而,在一个项目当中,可以有多个servlet程序(只需要重复上面的操作就可以了)
在这里有一个`注意点
就是一个web.xml 文件当中可以同时注册多个servlet程序
在一个项目当中也不会只有一个servlet程序
我们今天要说的这个servletContext 对象就是用来管理各个servlet程序
也可以全局(也就是架构的角度上来看),就是这个样子
再说的白一点,你想创建多少个servlet程序 ,就在web.xml 这个文件里面注册多少个就可以了
接下来,我们看一下
package test02;
import javax.servlet.Servlet;
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 FirstServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
ServletContext context=this.getServletContext(); //上下文
String username = "帅哥"; //这个赋值为中文
context.setAttribute("user",username); //将赋值放到相应的对象当中
//这个我们写的一个 ServletContext实例
//在这里做个演示
//我们在这个把context 对象放到这个类里面
//我们就相当于在这个类里写了数据,FirstServlet这个类是一个servlet程序
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
}
}
`
接下来再写一个类(它属于另外一个servlet程序)
这个类创建好了之后,啥也不用管,先让它继承HttpServlet 这个类
之后写dopost ,doget 这两个方法
package test02;
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 SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
}
}
在SecondServlet这个类里获取FirstServlet的context所设置的数据
package test02;
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 SecondServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
ServletContext context =this.getServletContext();
String username ="帅哥";
context.setAttribute("username",username);
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().print("名字" +username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
}
}
在web.xml文件当中对SecondServlet 进行注册
<servlet>
<servlet-name >hello2</servlet-name>
<servlet-class>test02.SecondServlet</servlet-class>
<!-- 这个是有关于SecondServlet的注册-->
</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
完整的web.xml的文件内容是这样的
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
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">
<!-- 注册servlet-->
<servlet>
<servlet-name >hello</servlet-name>
<servlet-class>test02.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/02</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name >hello2</servlet-name>
<servlet-class>test02.SecondServlet</servlet-class>
<!-- 这个是有关于SecondServlet的注册-->
</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
</web-app>
之后启动Tomcat服务器
servletContext 对象赋予的数据是在FirstServlet类
然而,servletContext 对象的取值与访问工作被放在了SecondServlet类当中
而*FirstServlet类这个类和SecondServlet 这个类属于两个不同的servlet程序*
(这一条是重点)
这个小案例就是证明,servletContext 对象具有数据共享的特征
好了,有关于servletContext 对象的解释就到这里了,谢谢大家