- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章深入了解Java ServletContext由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
什么是ServletContext?
根据字面意思即Servlet上下文 。
服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象,这个对象是 全局唯一的,工程内部的所有servlet都共享这个对象,所有应用程序共享对象 。
下面用一段简单的代码来证明一下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import
javax.servlet.ServletContext;
import
javax.servlet.ServletException;
import
javax.servlet.annotation.WebServlet;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
@WebServlet
(
"/ServletContext2"
)
public
class
ServletContext2
extends
HttpServlet{
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
ServletContext servletContext =
this
.getServletContext();
System.out.println(
"ServletContext2的地址:"
);
System.out.println(servletContext);
}
@Override
protected
void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
this
.doGet(req, resp);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import
javax.servlet.RequestDispatcher;
import
javax.servlet.ServletException;
import
javax.servlet.annotation.WebServlet;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
@WebServlet
(
"/ServletContext"
)
public
class
ServletContext
extends
HttpServlet{
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
this
.doPost(req, resp);
}
@Override
protected
void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
javax.servlet.ServletContext servletContext =
this
.getServletContext();
System.out.println(
"ServletContext2的地址:"
);
System.out.println(servletContext);
RequestDispatcher servletContext2 = req.getRequestDispatcher(
"ServletContext2"
);
servletContext2.forward(req,resp);
}
}
|
可以看到二者的地址一模一样 。
ServletContext对象的生命周期 。
诞生:web部署到服务器上,启动服务器,此时上下文环境对象创建,只要tomcat服务器不关闭,上下文环境对象就一直 存在 。
销毁:关闭服务器或者是从web服务器上卸载该程序的时候,该对象销毁 。
怎么创建ServletContext对象?
方法一:
javax.servlet.ServletContext servletContext = this.getServletContext(),
方法二
javax.servlet.ServletContext servletContext1 = req.getServletContext(),
方法三:
javax.servlet.ServletContext servletContext3 = this.getServletConfig().getServletContext(),
ServletContext对象的作用与相关方法 。
1.是一个域对象* 。
什么是域:域其实就是一个map结构,及存入一个键值对,来存储获取数据 作用范围:本工程内部 域对象可以被本工程内所有的servlet对象共享,因为一个工程只有一个servletcontext对象 。
方法介绍: 存储数据: void setAttribute(String var1, Object var2),
移除数据: void removeAttribute(String var1),
获取数据: Object getAttribute(String var1); 1.由于取出的是一个Object类型,需要强转 2.如果指定的属性名不存在,则返回null 。
2.可以获取文件的真实路径 。
真实路径:即部署在服务器是的路径 String getRealPath() 获取文件的真实路径 。
不同目录下访问资源的方式不同 。
1
2
3
4
5
6
7
8
9
|
//src下的资源访问
String realPath = servletContext.getRealPath(
"/WEB-INF/classes/a.text"
);
System.out.println(realPath);
//WEB-INF下的资源访问
String realPath1 = servletContext.getRealPath(
"/WEB-INF/b.text"
);
System.out.println(realPath1);
//web目录下的资源访问
String realPath2 = servletContext.getRealPath(
"/c.text"
);
System.out.println(realPath2);
|
代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import
javax.servlet.RequestDispatcher;
import
javax.servlet.ServletException;
import
javax.servlet.annotation.WebServlet;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
@WebServlet
(
"/ServletContext"
)
public
class
ServletContext
extends
HttpServlet{
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
this
.doPost(req, resp);
}
@Override
protected
void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
javax.servlet.ServletContext servletContext =
this
.getServletContext();
//src下的资源访问
String realPath = servletContext.getRealPath(
"/WEB-INF/classes/a.text"
);
System.out.println(realPath);
//WEB-INF下的资源访问
String realPath1 = servletContext.getRealPath(
"/WEB-INF/b.text"
);
System.out.println(realPath1);
//web目录下的资源访问
String realPath2 = servletContext.getRealPath(
"/c.text"
);
System.out.println(realPath2);
}
}
|
结果 。
3.获得MIME类型 。
s什么是MIME类型,是在互联网通信过程中定义等等一种文件数据类型 格式:大类型/小类型 image/jpeg 获取: String getMimeType(String file) 。
代码如下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import
javax.servlet.RequestDispatcher;
import
javax.servlet.ServletException;
import
javax.servlet.annotation.WebServlet;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
java.io.IOException;
@WebServlet
(
"/ServletContext"
)
public
class
ServletContext
extends
HttpServlet{
@Override
protected
void
doGet(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
this
.doPost(req, resp);
}
@Override
protected
void
doPost(HttpServletRequest req, HttpServletResponse resp)
throws
ServletException, IOException {
javax.servlet.ServletContext servletContext =
this
.getServletContext();
String filename=
"a.jpg"
;
String mimeType = servletContext.getMimeType(filename);
System.out.println(mimeType);
}
}
|
结果 。
以上就是ServletContext对象的一些基础知识,如有错误还请各位批评指正,喜欢我的文章可以点赞呀,也可以关注我,我会经常跟新文章 。
以上就是深入了解Java ServletContext的详细内容,更多关于Java ServletContext的资料请关注我其它相关文章! 。
原文链接:https://www.cnblogs.com/pjhaymy/p/13424324.html 。
最后此篇关于深入了解Java ServletContext的文章就讲到这里了,如果你想了解更多关于深入了解Java ServletContext的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个 JSP 网站,不是 Spring MVC,它有一个配置文件 web.xml。 我想要获取 web.xml 文件中的一些设置。 但是,我想从“源包”文件夹中的类中访问这些设置。 我知道我可以将
什么是ServletContext? 根据字面意思即Servlet上下文 服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象,这个对象是 全局唯一的,工程内部的所
我有一个类别列表,这些类别需要存在于应用程序的ServletContext范围内,因为该列表将由每个 View 访问,并且不需要修改。 我尝试在BootStrap.groovy的init方法中设置一个
ServletContext 是否在请求期间更新。例如我有这个代码: public void action(@Context ServletContext context) { Thread.sl
我正在将一些JSF代码从一个项目迁移到另一个项目,突然在我的新项目中ServletContext.TEMPDIR值失败了。我已经遍历了大多数文件,但这是唯一的错误,我不确定该在哪里修复。 tempdi
我正在尝试从服务访问servletContext(应用程序上下文)到集成测试中。 以下是我尝试让它进入我的集成测试的方法: import org.codehaus.groovy.grails.web.
我有 .NET 背景,正在尝试一些 Java(Servlet/JSP)基础知识。在.NET中,我们有ViewState、Session、Application变量。据我所知,Application 变
属性 repository 返回 null。 public class BaseServlet extends HttpServlet { protected MyPersistentMana
因此,我正在尝试建立一个在应用程序的多次使用(页面访问)中保持持久的 Mongo 连接。我厌倦了测试期间建立的所有这些连接,并且我想通过拥有单个持久连接来使用正确的过程。最佳实践等等。 这是我所拥有的
我正在我的 ServletContext 中存储一个 HashMap 对象。但是多个请求线程正在读取和修改这个 HashMap。 因为我相信 ServletContext 对象在请求线程之间共享,所以
您能否解释一下如何在我的Application 的子类中获取ServletContext 实例?可能吗?我试过像下面的代码片段那样做,但它似乎不起作用 - ctx 未设置: import javax.
我正在尝试手动引导 dispatcherservlet 作为练习。代码是 ServletRegistration.Dynamic dispatcher = container.addServlet(
这里的前提是,我不允许在这个网站上使用JavaScript或Cookies。 但是,我不想在每项至少需要密码 15-30 分钟的基本任务中询问用户密码。 我也不喜欢将密码保存到临时文件中,以防程序死掉
如果我使用 ../,为什么 ServletContext#getRealPath() 不会返回正确的路径 此代码有效:- System.out.println(context.getRealPath(
我正在使用上下文来共享登录 session 。我使用 setAttibute 函数。我知道 HttpSession 具有设置最大超时时间的属性。 是否可以以类似的方式设置上下文属性? ServletC
ServletConfig 和 ServletContext 接口(interface)有什么区别? 最佳答案 ServletConfig 参数是为特定 servlet 指定的,其他 servlet
我想听听你的意见。我正在开发一个 Servlet,它必须签署发送到端点的请求。 为了避免从服务器的 keystore 文件中读取、加载它并获取私钥,我在实现 ServletContextListene
我正在寻找一种方法将一些数据从数据库加载到 HashMap 中,并使该映射可用于所有根资源类和一些其他提供程序类(更准确地说是 ContainerRequestFilter 的实现)。我找到并实现了一
是否可以使用此API获取远程资源:ServletContext.getResourceAsStream() 例如:ServletContext.getResourceAsStream("http://
我的 RemoteServiceServlet 的日志输出(GWT) 在使用 getServletContext().log("anything"); 时不会显示在日志文件或标准输出中 对于依赖注入(
我是一名优秀的程序员,十分优秀!