zoukankan      html  css  js  c++  java
  • 3.Servlet的ServletContext对象

    一.建立项目servlet01

    在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java,添加web.xml中的映射关系,添加tomcat (注意保持只有一个jar包方式把所有项目的jar都打进来了,删除其他项目的jar包,添加自己的jar包),运行验证是否搭建正确!

    二.ServletContext对象

    在web容器启动时,它会为每一个web程序创建一个对应的ServletContext对象,用来代表当前的web的应用。

    ServletContext对象的几个重点所用:

    1. 共享数据:对于几个不同的Servlet之间可以相互传递数据

    2. 获取初始化参数:在web.xml中配置的参数,可以被或得到

    3. 请求转发:获得请求转发给别的Servlet

    4. 读取资源文件:此处需要注意配置资源过滤防止读取不了资源文件

    1.共享数据: 在servlet中保存的数据可以在另一个servlet中被访问

    例子:

    在HelloServlet中代码

     1 @Override
     2     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     3 
     4 //        this.getInitParameter();  初始化参数
     5 //        this.getServletConfig();  Servlet配置
     6 //        this.getServletContext(); Servlet上下文
     7 
     8         ServletContext context = this.getServletContext();
     9 
    10         String username = "小王";
    11         context.setAttribute("username",username);  //将数据存入ServletContext中
    12 
    13 
    14     }

    在GetServlet中的代码

     1 public class GetServlet extends HttpServlet {
     2     @Override
     3     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     4 
     5         ServletContext context = this.getServletContext();
     6 
     7         String username = (String) context.getAttribute("username");  //获取别的Servlet所保存的参数,实现数据共享
     8 
     9         resp.setContentType("text/html");
    10         resp.setCharacterEncoding("utf-8");
    11         resp.getWriter().println("名字"+ username);
    12 
    13     }
    14 
    15     @Override
    16     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    17         doGet(req, resp);
    18     }
    19 }

    配置web.xml

     1 <!--注册Servlet-->
     2     <servlet>
     3         <servlet-name>getc</servlet-name>
     4         <servlet-class>ustc.wzh.servlet.GetServlet</servlet-class>
     5     </servlet>
     6 
     7     <!--Servlet的请求路径-->
     8     <servlet-mapping>
     9         <servlet-name>getc</servlet-name>
    10         <url-pattern>/getc</url-pattern>
    11     </servlet-mapping>

    启动tomcat执行程序

    先执行http://localhost:8080/servlet01/hello 此时已经存入数据了,在执行http://localhost:8080/servlet01/getc 显示数据

    执行成功!

    2.获取初始化参数配置

     新建Java类为GetParam

     1 public class GetParam extends HttpServlet {
     2     @Override
     3     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     4 
     5         ServletContext context = this.getServletContext();
     6 
     7         String url = (String) context.getInitParameter("url");
     8         resp.getWriter().println(url);
     9 
    10     }
    11 
    12     @Override
    13     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    14         doGet(req, resp);
    15     }
    16 }

    在web.xml中编写初始化配置项和映射路径

     1     <!--配置一些web应用初始化参数-->
     2     <context-param>
     3         <param-name>url</param-name>
     4         <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
     5     </context-param>
     6 
     7     <!--注册Servlet-->
     8     <servlet>
     9         <servlet-name>getParam</servlet-name>
    10         <servlet-class>ustc.wzh.servlet.GetParam</servlet-class>
    11     </servlet>
    12 
    13     <!--Servlet的请求路径-->
    14     <servlet-mapping>
    15         <servlet-name>getParam</servlet-name>
    16         <url-pattern>/getParam</url-pattern>
    17     </servlet-mapping>

    重新部署tomcat,获取参数成功!

    3.请求转发

     新建Java类为GetRequestForward

     1 public class GetRequestForward extends HttpServlet {
     2 
     3     @Override
     4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     5 
     6         System.out.println("开始请求转发!");
     7         ServletContext context = this.getServletContext();
     8 
     9         //设置请求转发路径,再调用forward实现请求转发
    10         context.getRequestDispatcher("/getParam").forward(req,resp);
    11 
    12         System.out.println("转发成功!");
    13     }
    14 
    15     @Override
    16     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    17         doGet(req, resp);
    18     }
    19 }

    在web.xml中编写映射路径

     1     <!--注册Servlet-->
     2     <servlet>
     3         <servlet-name>getReqFor</servlet-name>
     4         <servlet-class>ustc.wzh.servlet.GetRequestForward</servlet-class>
     5     </servlet>
     6 
     7     <!--Servlet的请求路径-->
     8     <servlet-mapping>
     9         <servlet-name>getReqFor</servlet-name>
    10         <url-pattern>/getReqFor</url-pattern>
    11     </servlet-mapping>

    重新部署tomcat,转发成功!

    4.读取资源文件

    预处理:

    由于我们在java目录下建立的properties和resources目录下建立的properties都被打报道同一路径下:classes,我们俗称这个路径为classpath;

    1.建立properties文件:在resources目录下建立db.properties,在java目录下建立aa.properties

     username=wzh password=123456 

    username=wzh02 password=123456890 

    2.修改当前项目下的pom.xml文件,添加配置

     1         <!--在build中配置resources,来防止我们资源导出失败的问题-->
     2         <resources>
     3             <resource>
     4                 <directory>src/main/resources</directory>
     5                 <includes>
     6                     <include>**/*.properties</include>
     7                     <include>**/*.xml</include>
     8                 </includes>
     9                 <filtering>true</filtering>
    10             </resource>
    11             <resource>
    12                 <directory>src/main/java</directory>
    13                 <includes>
    14                     <include>**/*.properties</include>
    15                     <include>**/*.xml</include>
    16                 </includes>
    17                 <filtering>true</filtering>
    18             </resource>
    19         </resources>

    3.编写读取配置文件的类:GetText

     1 public class GetText extends HttpServlet {
     2 
     3     @Override
     4     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
     5 
     6         //读取resources目录下的db.properties内容
     7         InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
     8 
     9         Properties properties = new Properties();
    10         properties.load(in);
    11         String username = properties.getProperty("username");
    12         String password = properties.getProperty("password");
    13 
    14         resp.getWriter().println(username + ":" + password);
    15 
    16         //读取java目录下的aa.properties内容
    17         InputStream in2 = this.getServletContext().getResourceAsStream("/WEB-INF/classes/ustc/wzh/servlet/aa.properties");
    18 
    19         Properties properties2 = new Properties();
    20         properties2.load(in2);
    21         String username2 = properties2.getProperty("username");
    22         String password2 = properties2.getProperty("password");
    23 
    24         resp.getWriter().println(username2 + ":" + password2);
    25 
    26     }
    27 
    28     @Override
    29     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    30         doGet(req, resp);
    31     }
    32 }

    注意:两个文件名是Rebuild project之后产生的

    修改web.xml中的映射关系

     1     <!--注册Servlet-->
     2     <servlet>
     3         <servlet-name>getText</servlet-name>
     4         <servlet-class>ustc.wzh.servlet.GetText</servlet-class>
     5     </servlet>
     6 
     7     <!--Servlet的请求路径-->
     8     <servlet-mapping>
     9         <servlet-name>getText</servlet-name>
    10         <url-pattern>/getText</url-pattern>
    11     </servlet-mapping>

    重新部署tomcat,读取资源文件成功!

  • 相关阅读:
    快速了解layui中layer的使用
    导航栏切换按钮事件
    jQuery中 end(); 的用法
    JS中关于 一个关于计时器功能效果的实现
    js 中 setInterval 的返回值问题
    javascript 构造函数中的属性与原型上属性优先级的比较
    斐波那契数列 -- 递归算法(-)
    javascript 变量声明有var与无var 的区别
    作用域的理解--第一篇
    Javascript---数组常用方法
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/11943502.html
Copyright © 2011-2022 走看看