zoukankan      html  css  js  c++  java
  • Servlet基础之ServletContext应用(一)

    Servlet基础之ServletContext应用(一)

    在动态网页编程中,经常需要在一个页面输入某些数据,并在另一个页面读取到输入的数据,甚至在不同的电脑中读取到这个数据。在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 Application</display-name><servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>psl.wong.servlet.HelloServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>   <!-- 写入数据的Servlet的路径 -->
      </servlet-mapping><servlet>
        <servlet-name>get</servlet-name>
        <servlet-class>psl.wong.servlet.GetServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>get</servlet-name>
        <url-pattern>/get</url-pattern>     <!-- 读取数据的Servlet的路径 -->
      </servlet-mapping>
    </web-app>

    在浏览器中测试时,必须要先执行/hello,没有先写入数据而执行/get得到的结果将为NULL。

  • 相关阅读:
    对象属性对话框只能放大不能缩小
    Windows2003 Server升级至SP2后,水晶报表导出EXCEL出错
    磁盘结构损坏且无法读取
    InsusCharacterUtility.dll怎么调用
    会员综合实例
    无法连接SQL Server 2008
    JavaScript alert Utility
    DNS与Active Directory在两台服务器分别布署
    显示用户权限
    焦点新闻图片轮翻广告
  • 原文地址:https://www.cnblogs.com/awong18/p/13251585.html
Copyright © 2011-2022 走看看