一.建立项目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. }

在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,读取资源文件成功!

2.深入学习Servlet的ServletContext对象的更多相关文章

  1. [Servlet]研究ServletContext对象

    作者信息 作者姓名:金云龙 个人站点:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" Servl ...

  2. Servlet(2):通过servletContext对象实现数据共享

    一,ServletContext介绍 web容器在启动时,它会为每一个web应用程序都创建一个ServletContext对象,它代表当前web应用 多个Servlet通过ServletContext ...

  3. ServletConfig与ServletContext对象(接口)

    ServletConfig:封装servlet的配置信息. 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. <ser ...

  4. servlet ServletConfig ServletContext

    ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...

  5. 重温Servlet学习笔记--servletContext对象

    一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...

  6. Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)

    一.Servlet简介  1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...

  7. Servlet学习(二)——ServletContext对象

    1.什么是ServletContext对象 ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象内部封装是该web应用的信息,一个web应用只有一个S ...

  8. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

  9. Servlet的学习之Response响应对象(2)

    本篇接上一篇<Servlet的学习之Response响应对象(1)>,继续从HttpServletResponse响应对象来介绍其方法和功能. 使用setHeader方法结合HTTP协议的 ...

随机推荐

  1. go get 命令

    示例: go get github.com/jinzhu/gorm 下载并安装gorm包. 远程代码库有github,GitLlab,Gogs 命令介绍说明: -fix : 比如,我的代码是一年前1. ...

  2. Phoenix连接安全模式下的HBase集群

    Phoenix连接安全模式下的HBase集群 HBase集群开启安全模式(即启用kerberos认证)之后,用户无论是用HBase shell还是Phoenix去连接HBase都先需要通过kerber ...

  3. 浅浅的叙WPF之数据驱动与命令

    之前一直开发Winfrom程序,由于近一段时间转开发Wpf程序,刚好拜读刘铁锰<深入浅出WPF>对此有一些理解,如有误导指出,还望斧正!!! 说道WPF数据驱动的编程思想,MVVM,是为W ...

  4. windows10结束进程

    .net winfrom 程序关于结束进程触发事件 在任务管理器中有进程.详细信息栏 在进程栏对应用程序结束任务,会触发应用程序窗体的FormClosed事件 在详细信息栏对应用程序结束任务,不会触发 ...

  5. CentOS8 安装MySQL8.0

    2019/11/25, CentOS 8,MySQL 8.0 摘要: CentOS 8 安装MySQL 8.0 并配置远程登录 安装MySQL8.0 使用最新的包管理器安装MySQL sudo dnf ...

  6. Spring Boot 的自动配置探究、自制一个starter pom

    //TODO @Conditional @Condition

  7. Socker编程之TCP

    一:TCP介绍 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 7 ...

  8. React Context API

    使用React 开发程序的时候,组件中的数据共享是通过数据提升,变成父组件中的属性,然后再把属性向下传递给子组件来实现的.但当程序越来越复杂,需要共享的数据也越来越多,最后可能就把共享数据直接提升到最 ...

  9. 腕表wacche英语wacche手表

    watch As a noun, from Middle English wacche, Etymology As a noun, from Middle English wacche,See bel ...

  10. Keras上实现简单线性回归模型

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/marsjhao/article/detai ...