关于web应用上下文Context

本文介绍了Web应用中Context的概念及应用场景,包括应用程序上下文、会话上下文和HTTP请求上下文等,帮助读者理解不同Context的作用及它们如何促进Servlet间的通信。

关于web应用上下文Context

 

 

很多朋友都对Context不太了解,他们说"项目中没看到这个对象啊""但是老是听人提起Context","经常看到ServletContext,PageContext.EJBContext, 还有Spring里面的ApplicationContext等等"
笔者总结了一些对Context的介绍,结合自己的理解,希望可以方便大家更好利用Context

为了向SERVLET提供一个HTTP请求,又提供在运行时刻的请求的信息,容器将HTTP请求封装成JAVA对象,该对象也称为REQUEST,该对象也在其他对象中提供了类似剪贴版似的组件,不同的SERVLET通过它来交换信息,该组件被称为上下文。

应用程序上下文是其中的对象对于应用程序的全部SERVLET使用。

会话上下文其中的对象对于访问了用户的HTTPSESSION对象的SERVLET都可以使用,该HTTPSESSION通常通过调用HTTPREQUEST的方法,会话上下文会通过容器/SERVELT而失效。

HTTP请求上下文,其中的对象对于处理该请求的全部SERVLET都可以使用,该HTTP请求可能从一个SERVLET转发另一个SERVLET,当一个SERVLET包含另一个SERVLET的时候,在HTTP请求上下文中请求也能共享页面上下文,对于当前的JSP而言,在该请求的生命周期中,该上下文可用,页面范围仅仅对JSP有效,对SERVLET无效。

SERVELET上下文的另一种解释,JAVA的SERVLET可以在一系列被称为上下文的共享对象的存放对象,上下文中的名字都由一个相关联的对象组成,同一个应用程序中任何程序都可以从一个上下文中通过名字获得相关联的对象,一个应用程序中的SERVLET还经常需要在一个HTTP请求外来共享某些信息,因此为了管

理这些对象的共享周期,容器提供了3个标准的上下文:应用程序上下文,HTTP请求上下文,会话上下文。一个页面范围内的上下文仅仅对一个页面有效。在页面范围内的对象不可能和其他JSP和SERVLET共享

简单来说,Context就是一个存储器,把相关的东西存起来,可存可取.


载自:http://blog.youkuaiyun.com/defonds/archive/2009/06/04/4241682.aspx

<think>我们正在讨论如何在JSP中获取Web应用上下文路径(ContextPath)。根据引用内容,有几种常见的方法:1.**使用EL表达式`${pageContext.request.contextPath}`**(推荐方式)这是最简洁的方式,直接在JSP页面中通过表达式语言获取上下文路径。例如:```jsp<ahref="${pageContext.request.contextPath}/index.jsp">首页</a>```2.**使用JSP脚本`<%=request.getContextPath()%>`**传统JSP脚本方式,通过内置对象`request`的方法获取:```jsp<ahref="<%=request.getContextPath()%>/index.jsp">首页</a>```3.**使用JSTL设置变量**结合JSTL标签库,先设置一个变量再使用:```jsp<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><c:setvar="ctx"value="${pageContext.request.contextPath}"/><ahref="${ctx}/index.jsp">首页</a>```4.**使用`<base>`标签设置基准路径**在`<head>`中定义基准路径,使页面所有相对路径都基于此基准(需注意此方法会影响页面所有相对路径):```jsp<%StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";%><basehref="<%=basePath%>"><!--之后所有相对路径都会基于basePath--><ahref="index.jsp">首页</a><!--实际路径变为/myapp/index.jsp-->```###关键区别|方法|优点|缺点||------|------|------||`${pageContext.request.contextPath}`|简洁,无需脚本,推荐|仅适用于JSP||`<%=request.getContextPath()%>`|兼容旧JSP版本|混用脚本不优雅||JSTL变量|一次定义多处使用|需引入JSTL||`<base>`标签|简化页面所有链接|可能影响锚点链接|###注意事项-**上下文路径的含义**:Web应用部署时的根路径,如`http://localhost:8080/myapp`中的`/myapp`[^5]。-**空路径情况**:若应用部署在根目录(如ROOT),`getContextPath()`返回空字符串`""`。-**HTML文件限制**:纯HTML无法直接使用EL表达式,需通过JavaScript动态获取路径(如引用[2]所述)。###示例代码**场景:在JSP中引入静态资源**```jsp<!--使用EL表达式--><linkrel="stylesheet"href="${pageContext.request.contextPath}/css/style.css"><!--使用JSTL变量--><c:setvar="ctx"value="${pageContext.request.contextPath}"/><scriptsrc="${ctx}/js/main.js"></script><!--使用脚本--><script>constctx="<%=request.getContextPath()%>";fetch(ctx+"/api/data");//JavaScript中使用路径</script>```###相关问题1.如何在纯HTML文件中获取项目上下文路径?2.为什么推荐使用`${pageContext.request.contextPath}`而不是直接写死路径?3.部署到不同环境时上下文路径变化会导致什么问题?4.如何通过Java代码在Servlet中获取上下文路径?[^1]:引用[1]说明了`pageContext.request.contextPath`的作用[^2]:引用[2]提到HTML替代JSP时路径获取问题[^3]:引用[3]展示了两种设置路径的方法[^4]:引用[4]演示了在JSP脚本中使用`request.getContextPath()`[^5]:引用[5]解释了上下文路径的定义</think>### JSP 获取 Web 应用上下文路径的完整指南 #### 1. **EL表达式方式(推荐)** ```jsp <!-- 直接使用 --> <a href="${pageContext.request.contextPath}/user/profile">用户主页</a> <!-- 结合JSTL设置变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值