2.深入学习Servlet的ServletContext对象
一.建立项目servlet01
在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java,添加web.xml中的映射关系,添加tomcat (注意保持只有一个jar包方式把所有项目的jar都打进来了,删除其他项目的jar包,添加自己的jar包),运行验证是否搭建正确!
二.ServletContext对象
在web容器启动时,它会为每一个web程序创建一个对应的ServletContext对象,用来代表当前的web的应用。
ServletContext对象的几个重点所用:
共享数据:对于几个不同的Servlet之间可以相互传递数据
获取初始化参数:在web.xml中配置的参数,可以被或得到
请求转发:获得请求转发给别的Servlet
读取资源文件:此处需要注意配置资源过滤防止读取不了资源文件
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对象的更多相关文章
- [Servlet]研究ServletContext对象
作者信息 作者姓名:金云龙 个人站点:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" Servl ...
- Servlet(2):通过servletContext对象实现数据共享
一,ServletContext介绍 web容器在启动时,它会为每一个web应用程序都创建一个ServletContext对象,它代表当前web应用 多个Servlet通过ServletContext ...
- ServletConfig与ServletContext对象(接口)
ServletConfig:封装servlet的配置信息. 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. <ser ...
- servlet ServletConfig ServletContext
ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...
- 重温Servlet学习笔记--servletContext对象
一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...
- Java第三阶段学习(十一、Servlet基础、servlet中的方法、servlet的配置、ServletContext对象)
一.Servlet简介 1.什么是servlet: sun公司提供的一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过java的API动态的向 ...
- Servlet学习(二)——ServletContext对象
1.什么是ServletContext对象 ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象内部封装是该web应用的信息,一个web应用只有一个S ...
- Servlet的学习之Request请求对象(3)
本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...
- Servlet的学习之Response响应对象(2)
本篇接上一篇<Servlet的学习之Response响应对象(1)>,继续从HttpServletResponse响应对象来介绍其方法和功能. 使用setHeader方法结合HTTP协议的 ...
随机推荐
- CSP-S2019 自闭记
$Day0:$ 最后一场zr十连测从200挂到60,嘴上说着攒rp心里觉得药丸. 得知自己在本校考试感觉8错. $Day1:$ 早上7点50到了校门口,没让进QAQ早知道我再下一把棋了. 于是跟熊聊天 ...
- SpringBootSecurity学习(18)前后端分离版之 OAuth2.0 数据库(MyBatis)存储客户端
使用Mybatis查询客户端信息 前面的例子使用了默认的jdbc配置来动态从数据库查询客户端信息,下面来改用更加灵活的mybatis来实现,改用mybatis,首先pom中换成mybatis的依赖: ...
- 《即时消息技术剖析与实战》学习笔记3——IM系统如何保证消息的实时性
IM 技术经历过几次迭代升级,如图所示: 从简单.低效的短轮询逐步升级到相对效率可控的长轮询: 全双工的 Websocket 彻底解决了服务端的推送问题: 基于 TCP 长连接衍生的 IM 协议,能够 ...
- SpringBoot引入第三方jar包或本地jar包的处理方式
在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包,这时没办法通过pom直接引入,那么该怎么解决呢 一般有两种方法 第一种是将本地jar包安装在本地maven库 第二种是将本地ja ...
- 汉诺(hanio)塔问题
规则:大盘子不能压在小盘子上.要求:将A柱子上所有盘(每个盘大小不同)放到C柱子上,使用B柱子作辅助. 比如柱子A上有n个盘,执行以下步骤: 1. 把n-1个盘从源柱移动到临时柱上: 2. 把源柱上剩 ...
- zabbix4.0 本地安装详解及步骤
安装前说明下,下面安装过程中涉及selinux部分仅供参考,可能会导致启动服务时产生各种报错,作者也是在折腾了无数日夜后报错不断而放弃治疗,直接永久关闭了selinux(啊,没有selinux的日子真 ...
- 一个简单便捷的树形显示Ztree
这是本人在闲时研究的一个用于显示树形列表的小玩意. zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 下面就说说怎么用吧 ...
- Eclipse集成Git做团队开发
在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...
- 2019 游族网络java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.游族网络等公司offer,岗位是Java后端开发,因为发展原因最终选择去了游族网络,入职一年时间了,也成为了面 ...
- python数据分析三剑客之: pandas操作
pandas的操作 pandas的拼接操作 # pandas的拼接操作 级联 pd.concat , pd.append 合并 pd.merge , pd.join 一丶pd.concat()级联 # ...