ServletContext实现数据共享
ServletContext实现数据共享
补全项目,并把web.xml更新

建目录,建类HelloServlet:



1 package com.wang.servlet; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 import java.io.IOException; 9 import java.io.PrintWriter; 10 11 public class HelloServlet extends HttpServlet { 12 @Override 13 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 14 ServletContext context = this.getServletContext(); 15 } 16 17 @Override 18 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 19 doGet(req, resp); 20 } 21 }
ServletContext是一个凌驾于所有的servlet之上的东西,web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用。
ServletContext对象的主要作用:共享数据:在一个servlet中保存的数据,可以在另一个servlet中拿到。
ServletContext context = this.getServletContext();得到的是同一个ServletContext对象,
ServletContext对象全局唯一。



2.1 HelloServlet代码
1 package com.wang.servlet; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 import java.io.IOException; 9 import java.io.PrintWriter; 10 11 public class HelloServlet extends HttpServlet { 12 @Override 13 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 14 ServletContext context = this.getServletContext(); 15 String username = "王赞"; 16 context.setAttribute("username",username);//将一个数据保存在ServletContext中,名字为:username,值为:王赞 17 } 18 19 @Override 20 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 21 doGet(req, resp); 22 } 23 }
2.2 GetServlet代码
1 package com.wang.servlet; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 import java.io.IOException; 9 10 public class GetServlet extends HttpServlet { 11 @Override 12 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 13 ServletContext context = this.getServletContext(); 14 String username = (String) context.getAttribute("username"); //咱们自己知道类型,所以强转下,告诉计算机 15 //输出到网页上看看 16 resp.setContentType("text/html"); 17 resp.setCharacterEncoding("utf-8"); 18 resp.getWriter().print("名字"+username); 19 } 20 21 @Override 22 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 23 doGet(req, resp); 24 } 25 }
2、注册加映射

1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 5 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 6 version="4.0" 7 metadata-complete="true"> 8 9 <!--注册和映射:设置数据部分--> 10 <servlet> 11 <servlet-name>hello</servlet-name> 12 <servlet-class>com.wang.servlet.HelloServlet</servlet-class> 13 </servlet> 14 <servlet-mapping> 15 <servlet-name>hello</servlet-name> 16 <url-pattern>/hello</url-pattern> 17 </servlet-mapping> 18 19 <!--注册和映射:获取数据部分--> 20 <servlet> 21 <servlet-name>getc</servlet-name> 22 <servlet-class>com.wang.servlet.GetServlet</servlet-class> 23 </servlet> 24 <servlet-mapping> 25 <servlet-name>getc</servlet-name> 26 <url-pattern>/getc</url-pattern> 27 </servlet-mapping> 28 </web-app>
3、解决中文乱码问题

1 resp.setContentType("text/html"); 2 resp.setCharacterEncoding("utf-8");
4、重新指定Tomcate,把名字从s1改为s2

5、先放数据,再读数据的先后过程








浙公网安备 33010602011771号