深入体验JavaWeb开发内幕之servlet中的ServletContext的相关内容和实例展示
来源:互联网 发布:酷狗网络歌手图片 编辑:程序博客网 时间:2024/06/07 18:16
ServletContext
• WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
• ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
也可以使用 this.getServletContext方法
如:
在servlet1中:
//获取上下文:
//1、ServletContext context=this.getServletContext(); //2.ServletContext context =this.getServletConfig().getServletContext();
• 由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。多个Servlet通过ServletContext对象实现数据共享。
• ServletContext对象通常也被称之为context域对象。(request,session,page)
setAttribute(),getAttribute();
例:使用ServletContext实现两个Servlet数据共享
在servlet2.java中
package net.csdn; import java.io.IOException;importjava.io.PrintWriter; importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse; public class servlet2 extends HttpServlet { publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { this.getServletContext().setAttribute("data2","1992"); PrintWriterout = response.getWriter(); out.println("servlet"); } publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { doGet(request,response); } }//然后在servlet3.java中:package net.csdn; importjava.io.IOException;importjava.io.PrintWriter; importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse; public class servlet3 extends HttpServlet { publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { System.out.println(this.getServletContext().getAttribute("data2")); PrintWriterout = response.getWriter(); out.println(context); } publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { doGet(request,response); } }
ServletContext应用
•获取WEB应用的初始化参数。
<context-param>
<param-name>data</param-name>
<param-value>xxxx</param-value>
</context-param>
例:设置ServletContext初始化参数,然后对其获取。
如在web.xml文件中:
<?xmlversion="1.0" encoding="UTF-8"?><web-appversion="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"> <context-param> <param-name>data</param-name> <param-value>1991</param-value> </context-param> <servlet> <servlet-name>FirstWeb</servlet-name> <servlet-class>net.csdn.ServletWeb</servlet-class> </servlet> <servlet> <servlet-name>servlet1</servlet-name> <servlet-class>net.csdn.servlet1</servlet-class> </servlet> <servlet> <servlet-name>servlet2</servlet-name> <servlet-class>net.csdn.servlet2</servlet-class> </servlet> <servlet> <servlet-name>servlet3</servlet-name> <servlet-class>net.csdn.servlet3</servlet-class> </servlet> <servlet> <servlet-name>servlet4</servlet-name> <servlet-class>net.csdn.servlet4</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstWeb</servlet-name> <url-pattern>/firstWeb</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlet1</servlet-name> <url-pattern>/servlet1</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlet2</servlet-name> <url-pattern>/servlet2</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlet3</servlet-name> <url-pattern>/servlet3</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>servlet4</servlet-name> <url-pattern>/servlet4</url-pattern> </servlet-mapping></web-app>
然后在servlet1.java
package net.csdn; importjava.io.IOException;importjava.io.PrintWriter; importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletConfig;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;import javax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse; public class servlet1 extends HttpServlet { publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { ServletContextcon = this.getServletContext(); String context=(String)con.getInitParameter("data"); PrintWriter out = response.getWriter(); out.println(con); } publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { doGet(request,response); } }
中进行获取。
•实现Servlet的转发。
RequestDispatcher rd =getServletContext().getRequestDispatcher(“/1.jsp”);
rd.forward(request,response);
如何把数据传到 1.jsp ?(可以通过request域,不能用context域)
例:编写一个转发实现由servlet1到index.jsp的转发
在servlet1.java中:
package net.csdn; importjava.io.IOException;importjava.io.PrintWriter; importjavax.servlet.RequestDispatcher;importjavax.servlet.ServletConfig;importjavax.servlet.ServletContext;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse; public class servlet1 extends HttpServlet { publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { ServletContextcon = this.getServletContext(); RequestDispatcher rd =con.getRequestDispatcher("/index.jsp"); rd.forward(request, response); } publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { doGet(request,response); } }
在index.jsp中:
<%@ pagelanguage="java" import="java.util.*"pageEncoding="ISO-8859-1"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <metahttp-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control"content="no-cache"> <meta http-equiv="expires"content="0"> <meta http-equiv="keywords"content="keyword1,keyword2,keyword3"> <metahttp-equiv="description" content="This is my page"> <!-- <linkrel="stylesheet" type="text/css"href="styles.css"> --> </head> <body> This is my JSP page. <br> <!--在此处获取应用的上下文中的属性data2的值--> <%= application.getAttribute("data2")%> </body></html>
•利用ServletContext对象读取资源文件。
–得到文件路径
–读取资源文件的三种方式
–.properties文件(属性文件)
例如:通过ServletContext读取配置文件的内容。
如在src下有一个file.properties的配置文件
文件内容:
username = root;
password = root;
然后通过servlet4.java进行读取:
方式一:
package net.csdn; import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Properties; import javax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse; public class servlet4 extends HttpServlet { publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { //在servlet类内使用this.getServletContext().getResourceAsStream() InputStreamis =this.getServletContext().getResourceAsStream("/WEB-INF/classes/file.properties"); Propertiesp = new Properties(); p.load(is); System.out.println(p.getProperty("username")); PrintWriterout = response.getWriter(); out.println("servlet"); } publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { doGet(request,response); } }
方式二:
package net.csdn; import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.util.Properties; import javax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse; public class servlet4 extends HttpServlet { publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { //2、在servlet类内使用this.getServletContext().getRealPath() String path =this.getServletContext().getRealPath("/WEB-INF/classes/file.properties"); FileInputStream fis = new FileInputStream(path); Propertiesp = new Properties(); p.load(fis); System.out.println(p.getProperty("username")); } publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { doGet(request,response); } }
方式三:通过一个普通类进行读取file.properties文件内容:
NormalClass.javapackage net.csdn; importjava.io.IOException;import java.io.InputStream;import java.util.Properties; public class NormalClass { publicstatic void main(String[] args) throws IOException { InputStreamfis = NormalClass.class.getClassLoader().getResourceAsStream("file.properties"); Properties p =new Properties(); p.load(fis); System.out.println(p.getProperty("username")); } }
即可完成对file.properties文件的读取工作。
ServletConfig和ServletContext的区别
–整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。
–Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。
- 深入体验JavaWeb开发内幕之servlet中的ServletContext的相关内容和实例展示
- 深入体验JavaWeb开发内幕——Servlet入门
- 深入体验JavaWeb开发内幕——关于servlet的一些实现细节
- 深入体验JavaWeb开发内幕——JSP技术简介之二JSP中的指令和out隐式对象
- 深入体验JavaWeb开发内幕之Response对象
- 深入体验JavaWeb开发内幕之Response对象操作实例之通过Response实现重定向和刷新跳转并跳转页面
- 深入体验JavaWeb开发内幕之Response对象操作实例之通过Response实现重定向和刷新跳转并跳转页面
- 深入体验JavaWeb开发内幕——文件的上传和下载
- 深入体验JavaWeb开发内幕之Response对象操作实例之通过Response实现图片验证码
- JAVAWEB开发之Servlet和ServletContext详解(5)
- 深入体验javaWeb开发内幕——Servlet Filter(过滤器)
- 深入体验JavaWeb开发内幕——关于JEE中的response、resquest应答、请求头的编码问题的解决
- 深入体验JavaWeb开发内幕——关于JEE中的response、resquest应答、请求头的编码问题的解决
- 深入体验JavaWeb开发内幕——一个获取form表单中的相关组件值的应用
- 深入体验JavaWeb开发内幕——pageContext对象与JSP中标签的简介和相关应用
- 深入体验JavaWeb开发内幕——pageContext对象与JSP中标签的简介和相关应用
- 深入体验JavaWeb开发内幕——pageContext对象与JSP中标签的简介和相关应用
- 深入体验JavaWeb开发内幕——Request中的乱码问题及解决
- python类型比较的3种方式
- android的selector的使用方法
- python 字符串替换
- mysql处理上百万条的数据库如何优化语句来提高处理查询效率
- 虎扑上看到的一种js对table的排序控件
- 深入体验JavaWeb开发内幕之servlet中的ServletContext的相关内容和实例展示
- Step by Step Setup Git Server on Windows with CopSSH + msysGit and Integrate Git with Visual Studio
- jvm参数
- Cisco Router中的模块
- php的Heredoc技术使用介绍
- Iphone怎么创建证书部署真机调试
- unity3d粒子效果--羽毛的飞溅
- 文本分类入门(十)特征选择算法之开方检验 .
- 命令行运行jmeter脚本