一.建立项目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中代码

 @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // this.getInitParameter(); 初始化参数
// this.getServletConfig(); Servlet配置
// this.getServletContext(); Servlet上下文 ServletContext context = this.getServletContext(); String username = "小王";
context.setAttribute("username",username); //将数据存入ServletContext中 }

在GetServlet中的代码

 public class GetServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); String username = (String) context.getAttribute("username"); //获取别的Servlet所保存的参数,实现数据共享 resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
resp.getWriter().println("名字"+ username); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

配置web.xml

 <!--注册Servlet-->
<servlet>
<servlet-name>getc</servlet-name>
<servlet-class>ustc.wzh.servlet.GetServlet</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>getc</servlet-name>
<url-pattern>/getc</url-pattern>
</servlet-mapping>

启动tomcat执行程序

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

执行成功!

2.获取初始化参数配置

新建Java类为GetParam

 public class GetParam extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = this.getServletContext(); String url = (String) context.getInitParameter("url");
resp.getWriter().println(url); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

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

     <!--配置一些web应用初始化参数-->
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param> <!--注册Servlet-->
<servlet>
<servlet-name>getParam</servlet-name>
<servlet-class>ustc.wzh.servlet.GetParam</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>getParam</servlet-name>
<url-pattern>/getParam</url-pattern>
</servlet-mapping>

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

3.请求转发

新建Java类为GetRequestForward

 public class GetRequestForward extends HttpServlet {

     @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("开始请求转发!");
ServletContext context = this.getServletContext(); //设置请求转发路径,再调用forward实现请求转发
context.getRequestDispatcher("/getParam").forward(req,resp); System.out.println("转发成功!");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

在web.xml中编写映射路径

     <!--注册Servlet-->
<servlet>
<servlet-name>getReqFor</servlet-name>
<servlet-class>ustc.wzh.servlet.GetRequestForward</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>getReqFor</servlet-name>
<url-pattern>/getReqFor</url-pattern>
</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文件,添加配置

         <!--在build中配置resources,来防止我们资源导出失败的问题-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>

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

 public class GetText extends HttpServlet {

     @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //读取resources目录下的db.properties内容
InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Properties properties = new Properties();
properties.load(in);
String username = properties.getProperty("username");
String password = properties.getProperty("password"); resp.getWriter().println(username + ":" + password); //读取java目录下的aa.properties内容
InputStream in2 = this.getServletContext().getResourceAsStream("/WEB-INF/classes/ustc/wzh/servlet/aa.properties"); Properties properties2 = new Properties();
properties2.load(in2);
String username2 = properties2.getProperty("username");
String password2 = properties2.getProperty("password"); resp.getWriter().println(username2 + ":" + password2); } @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}

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

修改web.xml中的映射关系

     <!--注册Servlet-->
<servlet>
<servlet-name>getText</servlet-name>
<servlet-class>ustc.wzh.servlet.GetText</servlet-class>
</servlet> <!--Servlet的请求路径-->
<servlet-mapping>
<servlet-name>getText</servlet-name>
<url-pattern>/getText</url-pattern>
</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. Python列表(list)所有元素的同一操作

    针对很普遍的每个元素的操作会遍历每个元素进行操作. 这里给出了几种写法,列表每个元素自增等数学操作同理: 示例:整形列表ilist加1个数.元素类型转字符串: ilist = [1, 2, 3, 10 ...

  2. 给定一个长度为N的数组,找出出现次数大于n/2,n/3的数,要求时间复杂度O(n),空间复杂度O(1)

    先讨论出现次数大于n/2的数字,如果这样的数字存在,那么这个数出现的次数大于其他数出现的次数的总和. 在数组A中,我们定义两个数据集合a1,a2.a1为出现次数大于n/2的数的集合,a2为其余数组成的 ...

  3. MySQL数据类型之BLOB与TEXT及其最大存储限制

    https://blog.csdn.net/q3dxdx/article/details/51014357 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...

  4. String类的方法应用

    String类的几个方法的应用示例: using System;using System.Collections.Generic;using System.Linq;using System.Text ...

  5. Django--模型层进阶

    目录 QuerySet对象 可切片 可迭代 惰性查询 缓存机制 何时查询集不会被缓存? exists()与iterator()方法 exists() iterator() 中介模型 查询优化 表数据 ...

  6. Java 之 线程安全(线程同步)

    一.线程安全 当有多个线程同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,这就是线程安全的. 下面通过一个案例来演示线程的 ...

  7. Cheat Engine 指针

    打开游戏 扫描时间的流程就不多说了 扫描结果 寻找基地址 右击扫描到的地址,选择什么改写了这个地址 会弹出如下窗口 不用管这个窗口,去改变一下游戏时间,出现如下图 随便打开一个,找到了数据块地址和偏移 ...

  8. UISlider基本使用

    UISlider是一个很常用的UI控件,调节屏幕亮度或者调节音量大小等很多地方都可以用到,而且使用方便,下面我来介绍一下UISlider的基本使用. 首先介绍一下基本属性和常用方法: //设置当前sl ...

  9. ffmpeg 详解

    来源:http://blog.itpub.net/9399028/viewspace-1242300/ FFMPEG详解   认识FFMPEG FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几 ...

  10. SQL-连接查询:left join,right join,inner join,full join之间的区别

    参考: https://www.cnblogs.com/lijingran/p/9001302.html https://www.cnblogs.com/assasion/p/7768931.html ...