JavaWeb的ServletContext
一、ServletContext(数据共享):
解释:Web容器启动时,他会为每个web容器创建一个,它代表当前的Web应用;是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。
白话解释:现在有一个,全局的数据,张三可以拿到,李四也可以拿到,王麻子也可以拿到;ServletContext起的作用就是把共给数据传递给每一个想要数据的Servlet的中间键;
二、代码解释:我的项目目录结构都是一样的不会有任何变化
①:在servlet包里面创建一个Helloservlet,附:源码!源码图!
package com.laugh.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 Helloservlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //第一步获取ServletContext对象 ServletContext Context = this.getServletContext(); //设置公共数据 String Name = "Laugh"; String Sex = "男"; int Age = 24; //把上面数据设置成键值对的形式 (key,value) Context.setAttribute("Name",Name); Context.setAttribute("Sex",Sex); Context.setAttribute("Age",Age); //写一个反馈在页面的东西,证明来过 resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html"); PrintWriter writer = resp.getWriter(); writer.print("<h1>我进入了“Helloservlet”里面了!</h1>"); //在后台输入一下,验证进入与否 System.out.println("进入了“Helloservlet”里面了"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
②:再创建一个Getservlet,附:源码!源码图!
package com.laugh.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 GetServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置一下编码格式 resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html"); //想要获取Helloservlet刚刚赋的值,咱得现有ServletContext这个对象 this:因为咱操作操作的都是它这个对象,所以用this ServletContext Context = this.getServletContext(); //咱们在Helloservlet里面的是Set设置了值,所以咱们在getServlet里面获取值就用get //开始生成下面这个的时候类型是Object,这里咱们用String来接,咱们知道存的是字符串嘛,然后会报错,因为程序不知道是字符串所以强行转换一个类型就好,下面以此类推 String Name = (String) Context.getAttribute("Name"); String Sex = (String) Context.getAttribute("Sex"); int Age = (int) Context.getAttribute("Age"); //把拿到的值,输出到页面上 resp.getWriter().println(Name); resp.getWriter().println(Sex); resp.getWriter().println(Age); //在后台输入一下,验证进入与否 System.out.println("进入了“Getservlet”里面了"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
③:配置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"> <!--我这个头是新的--> <!--我是提供 Helloservlet 使用的哦;顺便让Helloservlet给ServletContext赋一下值--> <servlet> <servlet-name>laugh</servlet-name> <servlet-class>com.laugh.servlet.Helloservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>laugh</servlet-name> <url-pattern>/laugh</url-pattern> </servlet-mapping>
<!--我是提供GetServlet使用的哦,在运行完 Helloservlet 的时候,运行我就会显示值啦--> <servlet> <servlet-name>get</servlet-name> <servlet-class>com.laugh.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>get</servlet-name> <url-pattern>/get</url-pattern> </servlet-mapping> </web-app>
④:运行结果(正常运行顺序)
⑤:输出结果(非正常运行顺序)
争取摘到月亮,即使会坠落。