Servlet 之 ServletContext
package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration; import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class FServlet extends HttpServlet { /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context = this.getServletContext();
String username=context.getInitParameter("username");
Enumeration enu=context.getInitParameterNames();
while(enu.hasMoreElements()){
String key=(String)enu.nextElement();
String value=context.getInitParameter(key);
System.out.println(key+"-========>"+value);
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<context-param>
<param-name>username</param-name>
<param-value>tomcate</param-value>
</context-param>
<context-param>
<param-name>pwd</param-name>
<param-value>123456</param-value>
</context-param>
<!-- 配置servlet到项目中 -->
<servlet>
<!-- 可以随便填只需要注意不要和其他servlet的名字重复即可(建议使用简单类名) -->
<servlet-name>AServlet</servlet-name>
<!-- 配置servlet的完整类名 -->
<servlet-class>cn.jiemoxiaodi.servlet.AServlet</servlet-class>
<init-param>
<param-name>aa</param-name>
<param-value>sdfds</param-value>
</init-param>
</servlet> <!-- 配置上面这个servlet使用那个路径能被访问 -->
<servlet-mapping>
<!-- 此处不能随便写了,必须与上面的servlet对应,表示在为那个servlet配置路径 -->
<servlet-name>AServlet</servlet-name>
<!-- 配置访问这个servlet的路径 (相对路径) /==>http://localhost:8080/day10_servlet/ http://localhost:8080/day10_servlet/AServlet -->
<url-pattern>/AServlet</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>BServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.servlet_config.BServlet</servlet-class>
<init-param>
<param-name>a</param-name>
<param-value>123456sdfd</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>BServlet</servlet-name>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.mygenericservlet.CServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>需哦啊</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>DServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.http.DServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>FServlet</servlet-name>
<servlet-class>cn.jiemoxiaodi.servlet_servletcontext.FServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>CServlet</servlet-name>
<url-pattern>/CServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DServlet</servlet-name>
<url-pattern>/DServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FServlet</servlet-name>
<url-pattern>/FServlet</url-pattern>
</servlet-mapping>
</web-app>
http://localhost:8080/projectname/FServlet
package cn.jiemoxiaodi.servlet_servletcontext; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class HServlet extends HttpServlet { /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.getServletContext().setAttribute("aa", "dsfd");
this.getServletContext().setAttribute("adfa", "dsfd");
this.getServletContext().removeAttribute("aa");
this.getServletContext().removeAttribute("adfa");
System.out.println(this.getServletContext().getAttribute("aa") + "===>"
+ this.getServletContext().getAttribute("adfa"));
}
}
ServletContext对象
介绍
1.这个对象代表着咱们的整个项目.==> 这个对象在一个项目中只存在一个实例.
2.启动项目的时候会自动创建. 关闭服务器的时候会销毁该实例.
3.该对象如何获取呢? ==> servletConfig 中 有一个方法叫做 getServletContext方法 来获得.
功能
一:可以获得项目中的一些配置(web.xml)
getInitParameter(String name) 根据键获得值
getInitParameterNames() 获得所有键
上面这两个方法名字与servletConfig中的一模一样.但是获得的配置信息是
<context-param>
<param-name>userName</param-name>
<param-value>tom</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>1234</param-value>
</context-param>
二:作为我们servlet技术中 三大域对象之一. 如果包含jsp的话,其实有4大域 page域.
application ==> servletContext
session
request
域对象涉及到4个方法
getAttribute(key) 根据键获得值
setAttribute(key,value) 往application域中的map 存放一个键值对
removeAttribute(key) 从application域中的map 删除一个键值对
getAttributeNames(); 从application域中的map 获得所有的键
//获取资源的相关方法
//this.getServletContext().getRealPath(path)
//this.getServletContext().getResourceAsStream(path)
System.out.println(this.getServletContext().getRealPath("/WEB-INF/demo.xml"));
InputStream input= this.getServletContext().getResourceAsStream("/WEB-INF/demo.xml");
System.out.println(input);
三:可以获取项目中的资源.(例如获得项目中存放学生的stu.xml)
//想对WEB-INF/Demo.xml进行操作.我们要先读取出该文件
//如何来读取呢?
//File file = new File("E:/代码/Workspaces0808/Day10-servlet/WebRoot/WEB-INF/demo.xml");
//上面获得demo.xml填写的路径显然是不对的.获得的是工程下的而我们要获得最终部署到服务器上的.
//File file = new File("E:/apache-tomcat-6.0.35/webapps/Day10-servlet/WEB-INF/demo.xml");
//上面这种获得方式就对了.但是 如果把项目再部署到其他地方,那上面这个写死的路径就无效了.
//这样类似获得外部资源的例子很多,所以servletContext对象给出了解决办法.
//getRealPath("/") ==> 获得绝对路径 ,根据参数中的相对路径获得. "/"相对于WebRoot
//getResourceAsStream("/"); ==>直接获得 想要找的资源的流 . 参数还是填相对路径,同上
例子:
String path = getServletContext().getRealPath("/WEB-INF/demo.xml");
System.out.println(path);
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/demo.xml");
System.out.println(is);
使用Class和ClassLoader 获得项目中的资源路径
//web-inf下的
String path1 = getServletContext().getRealPath("/WEB-INF/demo.xml");
//lib下的
String path2 = getServletContext().getRealPath("/WEB-INF/lib/demo.xml");
//src下的
String path3 = getServletContext().getRealPath("/WEB-INF/classes/demo.xml");
//cn.itcast.servlet.servlet_context包下的
String path4 = getServletContext().getRealPath("/WEB-INF/classes/cn/itcast/servlet/servlet_context/demo.xml");
//其实上面例子中path3 和 path4 这两种方式 有些麻烦
//在介绍一种获得资源的方式,是对.class ==> Class 和 classLoader的应用
InputStream is = this.getClass().getResourceAsStream("demo.xml"); // 如果不加"/"==> 相对的是类的当前(包)目录
InputStream is2 = this.getClass().getResourceAsStream("/demo.xml");//如果加了"/" ==> "/"就代表classes目录(src)
//在说下classLoader 下也有方法 classLoader 就是类的加载器. ==> 专门来读取class文件的输入流
//也提供了读取其他文件的方法.(使用classLoader不要读取较大的文件)
// this.getClass().getClassLoader() ==> 获得类的加载器
InputStream is3 = this.getClass().getClassLoader().getResourceAsStream("/demo.xml");// 不论加不加"/",都相对于 classes目录,跟class中加"/" 的相对路径是一样的.
//使用class或classLoader 也可以获得文件的绝对路径
URL url = this.getClass().getResource("demo.xml");
System.out.println(url.getPath());
Servlet 之 ServletContext的更多相关文章
- Servlet之ServletContext以及文件操作
ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...
- servlet ServletConfig ServletContext
ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...
- 2.深入学习Servlet的ServletContext对象
一.建立项目servlet01 在入门Servlet项目中建立一个子项目模块(此处不再赘述如何建立),补全maven项目中的java和resources文件夹,添加类HelloServlet.java ...
- Servlet、ServletContext与ServletConfig的详解及区别
Servlet.ServletContext与ServletConfig的详解及区别 一.Servlet详解 Servlet是一个interface,全局限定名:javax.servlet.Servl ...
- Servlet 使用ServletContext共享数据,读取web.xml配置
ServletContext对象 session和cookie,对于每一个请求用户来说,都是不同的,因为要保证隐私安全. 而有一些数据,可以让所有用户共享,此时就可以用ServletContext对象 ...
- Servlet (二)ServletContext
package cn.sasa.serv; import java.io.IOException; import javax.servlet.ServletContext; import javax. ...
- Servlet之ServletContext获取web上下文路径、全局参数、和Attribute(域)
1)获取web上下文路径 public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...
- [Servlet]研究ServletContext对象
作者信息 作者姓名:金云龙 个人站点:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" Servl ...
- servlet的ServletContext接口
ServletContext Servlet 上下文 每个web工程都只有一个ServletContext对象,也就是不管在哪个servlet里面,获取到的这个ServletContext对象都是同一 ...
随机推荐
- Python-13-堡垒机开发
今天主要是熟悉堡垒机开发流程.
- 如何删除datatable中的一行数据
在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(ind ...
- matlab常用的字符串操作函数之一
1,strcat和strvcat strcat:依次横向连接字符串: strvcat:依次纵向连接字符串: 实例1: >>a1='sophia '; >>a2='is a '; ...
- 【swift学习笔记】一.页面转跳的条件判断和传值
在转跳页面之前我们可能会判断一下是否有输入正确的数据,如下图所示,如果没有数据输入则弹出提示,不进行转跳. 一:页面转跳 1.第一个页面的上放上一个Label一个textfield和一个按钮 2.在第 ...
- 浅谈 underscore 内部方法 group 的设计原理
前言 真是天一热什么事都不想干,这个月只产出了一篇文章,赶紧写一篇压压惊! 前文(https://github.com/hanzichi/underscore-analysis/issues/15)说 ...
- ionic配置 问题小记
1.用命令ionic start myApp tabs新建项目时,在最后面提示ionic\cli.js报错的问题(具体问题描述忘记了) 安装 node-inspector 即可 ,使用命令 cnpm ...
- 平行四边形导航,背景颜色渐变动画(不支持IE6/7/8)
body{ font-size: 14px; } ul ,li{ margin:0px; padding:0px; list-style: none; } .box{ width: 1000px; h ...
- md5和SHA校验码
md5已经不安全了,中国山东大学女学霸王小云破解了一系列密码,当真是巾帼不让须眉.说是破解,其实就是给你一个md5码,让你求出这个md5码所对应的原始信息,显然一个md5对应无数种原始信息.而md5的 ...
- QueryRunner类 的應用,以及ResultSetHandler 接口的实现类
1 .该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式. ResultSetHandler 接口提供了一个单独的方法:Object handle (java.sql. ...
- python文件读写操作
操作文件时一般经历以下步骤: 打开文件 操作文件 1.打开文件: 文件句柄 = open('/path/to/file_name','pattern') pattern: r:只读模式,打开文件时默认 ...