如果我们想要在不同的Servlet中进行访问,那么就需要我们新的东西参与了,这个东西就是ServletContext上下文对象,这里以一张图进行简单的描述,我们的Servlet都是被这个ServletContext管理的,这个可以实现不同用户之间的数据共享问题
这里我们写两个Servlet,用一个Servlet去获取另一个Servlet的内容,这里采用注解开发
package com.zhiying.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/a1")
public class HelloServlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
context.setAttribute("username","root");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
package com.zhiying.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/a2")
public class HelloServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username = (String) context.getAttribute("username");
resp.getWriter().print(username);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
如果我们先访问/a2那么会输出null,因为我们还没有设置值,如果设置完值之后,我们能获取到值,所以我们需要先访问/a1再访问/a2
好了,到此,我们的ServletContext可以进行不同Servlet之间的值的共享了