jsp中转发和重定向区别是什么(Java Web中的ServletContext对象)
目录
ServletContext对象
获取上下文初始化参数的相关方法
创建ServletContext对象
1)通过 GenericServlet 提供的 getServletContext() 方法
2)通过 ServletConfig 提供的 getServletContext() 方法
3)通过 HttpSession 提供的 getServletContext() 方法
4)通过 HttpServletRequest 提供的 getServletContext() 方法
上下文初始化参数
局部参数
全局参数
获取ServletContext的全局参数
ServletContext 属性与上下文初始化参数对比
实现数据通讯
数据通讯的程序实例:
在浏览器中的操作
ServletContext对象
Web 应用中的所有 Servlet 共享同一个 ServletContext 对象 ,不同 Servlet 之间可以通过 ServletContext 对象实现数据通讯 ,因此 ServletContext 对象也被称为 Context 域对象 。
域对象是服务器在内存上创建的存储空间 ,该空间用于不同动态资源(例如 Servlet 、JSP)之间传递与共享数据 。
获取上下文初始化参数的相关方法
String getInitParameter(String name) 根据初始化参数名 name ,返回对应的初始化参 数值 。 Enumeration getInitParameterNames() 返回 Web 应用所有上下文初始化参数名的枚举 集合 ,如果没有上下文初始化参数 ,则返回一个空的枚举集合 。创建ServletContext对象
1)通过 GenericServlet 提供的 getServletContext() 方法
//通过 GenericServlet的getServletContext方法获取ServletContext对象 ServletContext servletContext = this.getServletContext();2)通过 ServletConfig 提供的 getServletContext() 方法
//通过 ServletConfig的 getServletContext方法获取ServletContext对象 ServletContext servletContext = this.getServletConfig().getServletContext(); //通过 Config的 getServletContext方法获取ServletContext对象 ServletContext context = config.getServletContext();3)通过 HttpSession 提供的 getServletContext() 方法
//通过 Session的 getServletContext方法获取ServletContext对象 ServletContext context = req.getSession().getServletContext();4)通过 HttpServletRequest 提供的 getServletContext() 方法
//通过 HttpServletRequest的 getServletContext方法获取ServletContext对象 ServletContext servletContext = req.getServletContext();上下文初始化参数
局部参数
<servlet> <init-param> <param-name>name</param-name> <param-value>Lungcen</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>110120130</param-value> </init-param> </servlet>全局参数
<context-param> <param-name>姓名</param-name> <param-value>Lungcen</param-value> </context-param> <context-param> <param-name>年龄</param-name> <param-value>19</param-value> </context-param>获取ServletContext的全局参数
Enumeration<String> names = this.context.getInitParameterNames(); while (names.hasMoreElements()) { String s = names.nextElement(); writer.write(s + "->" + context.getInitParameter(s) + "<br/>"); }ServletContext 属性与上下文初始化参数对比
不 同 点 ServletContext 的属性 上下文初始化参数 创 建 方 式 ServletContext 的属性通过调用 ServletContext 接口的 setAttribute() 方法 创建 上下文初始化参数通过 web.xml 使用 元素配置 可 进 行 的 操 作 ServletContext 的属性可以通过 ServletContext 接口的方法进行读取 、新 增 、修改 、移除等操作 上下文初始化参数在容器启动后只能被 读取 ,不能进行新增 、修改和移除操作 生 命 周 期 ServletContext 中属性的生命周期从创建开 始 ,到该属性被移除(remove)或者容器关 闭结束 上下文初始化参数的生命周期 ,从容器 启动开始 ,到 Web 应用被卸载或容器 关闭结束 作 用 使用 ServletContext 中的属性可以实现 Servlet 之间的数据通讯 使用上下文初始化参数无法实现数据通讯实现数据通讯
在 Servlet 中 ,调用 ServletContext 接口的 setAttribute() 方法可以创建一些属性 ,这些属性被存 放在 ServletContext 对象中 。应用中所有 Servlet 都可以对这些属性进行访问和操作,通过它们可以实现应用内不同 Servlet 之间的数据通讯 。
void setAttribute(String name, Object object) 把一个 Java 对象与一个属性名绑定 ,并将它作为一个属 性存放到 ServletContext 中 。 参数 name 为属性名 ,参数 object 为属性值 。 void removeAttribute(String name) 从 ServletContext 中移除属性名为 name 的属性 。 Object getAttribute(String name) 根据指定的属性名 name,返回 ServletContext 中对应 的属性值 。数据通讯的程序实例:
package com.zpark.servlet; 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; import java.io.PrintWriter; @WebServlet(urlPatterns = "/LLL.do") public class MyServlet04 extends HttpServlet { @Override public void init() throws ServletException { getServletContext().setAttribute("count", 0); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Integer count = (Integer) getServletContext().getAttribute("count"); count++; getServletContext().setAttribute("count", count); resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); writer.write("欢迎来到界面" + count); writer.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); doGet(req, resp); } } package com.zpark.servlet; 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; import java.io.PrintWriter; @WebServlet("/Lun5.do") public class MyServlet05 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter writer = resp.getWriter(); Integer count = (Integer) getServletContext().getAttribute("count"); writer.write("今天是一个好日子" + count); writer.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("utf-8"); doGet(req, resp); } }在浏览器中的操作
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!