在动态网页编程中,经常需要在一个页面输入某些数据,并在另一个页面读取到输入的数据,甚至在不同的电脑中读取到这个数据。在javaweb编程中,Servlet的ServletContext方法就能够实现这个功能。
关于ServletContext
web容器(即Tomcat服务器)在启动的时候,它会为每一个web程序都创建一个对应的ServletContext对象,这个对象代表着当前的web应用。既然是在一个Servlet中保存数据,在另一个Servlet中读取到数据,这就涉及到多个Servlet。
可以这样理解,ServletContext是凌驾于所有Servlet之上的,并且多个Servlet只对应一个ServletContext;
任何一个Servlet想要保存数据都将数据存入这个ServletContext中,并且任何一个Servlet都可以从这个ServletContext中读取到已经存入的数据,关系图如下:
代码示例
第一个Servlet
第一个Servlet用于向ServletContext写入数据。
package psl.wong.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 HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String username="Hayden-Wong"; //即将写入的数据 servletContext.setAttribute("username",username); //写入到ServletContext中 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } }
第二个Servlet
第二个Servlet用于读取刚刚第一个Servlet写入的数据,并且将其打印在网页上。
package psl.wong.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; import java.io.PrintWriter; public class GetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this.getServletContext(); String attribute = (String) servletContext.getAttribute("username"); //获取String username="Hayden-Wong";servletContext.setAttribute("username",username);的值 PrintWriter writer = resp.getWriter(); writer.print(attribute); //打印到网页上 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } }
xml配置
xml主要配置注册Servlet路径
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"> <display-name>Archetype Created Web Applicationdisplay-name> <servlet> <servlet-name>helloservlet-name> <servlet-class>psl.wong.servlet.HelloServletservlet-class> servlet> <servlet-mapping> <servlet-name>helloservlet-name> <url-pattern>/hellourl-pattern> servlet-mapping> <servlet> <servlet-name>getservlet-name> <servlet-class>psl.wong.servlet.GetServletservlet-class> servlet> <servlet-mapping> <servlet-name>getservlet-name> <url-pattern>/geturl-pattern> servlet-mapping> web-app>