其他更多java基础文章: java基础学习(目录)
Servlet规范核心类图
接下来我们要说的是Servlet的四个类:
ServletConfig对象,ServletContext对象、下一节讲request对象,response对象
从图中我们可以知道这几个对象之间的联系!
ServletConfig对象
获取ServletConfig对象
- 通过继承父类(HttpServlet或GenericServlet)的方法得到一个ServletConfig对象
ServletConfig config = this.getServletConfig();
ServletConfig对象的作用
- getServletName() :获取servlet的名称,也就是我们在web.xml中配置的servlet-name
- getServletContext():获取ServletContext对象,该对象的作用看下面讲解
- getInitParameter(String):获取在servlet中初始化参数的值。这里注意与全局初始化参数的区分。这个获取的只是在该servlet下的初始化参数
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.hiway.servlet.Myservlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>123456</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/Myservlet</url-pattern>
</servlet-mapping>
- getInitParameterNames():获取在Servlet中所有初始化参数的名字,也就是key值,可以通过key值,来找到各个初始化参数的value值。注意返回的是枚举类型
Enumeration<String> initParameterNames = this.getInitParameterNames();
while(initParameterNames.hasMoreElements()){
String name = initParameterNames.nextElement();
String value = this.getInitParameter(name);
}
ServletContext对象
获取ServletContext对象
- 通过ServletConfig获取,如果继承父类(HttpServlet或GenericServlet),则可直接调用方法获取
getServletContext();
//或
getServletConfig().getServletContext();
- 还有一种在web应用中,通过HttpServletRequest获取
request.getSession().getServletContext()
ServletContext对象的作用
tomcat为每个web项目都创建一个ServletContext实例,tomcat在启动时创建,服务器关闭时销毁,在一个web项目中共享数据,管理web项目资源,为整个web配置公共信息等,通俗点讲,就是一个web项目,就存在一个ServletContext实例,每个Servlet读可以访问到它。
1. web项目中共享数据
在一定范围内(当前应用),使多个Servlet共享数据getAttribute(String name)、setAttribute(String name, Object obj)、removeAttribute(String name)
1.1 setAttribute(String name, Object obj) 在web项目范围内存放内容,以便让在web项目中所有的servlet读能访问到
1.2 getAttribute(String name) 通过指定名称获得内容
1.3 removeAttribute(String name) 通过指定名称移除内容
2. 获取全局配置信息
整个web项目初始化参数 (这个就是全局初始化参数,每个Servlet中都能获取到该初始化值)
2.1)getInitPatameter(String name) //通过指定名称获取初始化值
2.2)getInitParameterNames() //获得枚举类型
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
3. 获取web项目资源
3.1)获取web项目下指定资源的路径 :
String getRealPath(String path);//根据资源名称得到资源的绝对路径
ServletContext servletContext = this.getServletContext();
String path = servletContext.getRealPath("/WEB-INF/web.xml");
System.out.println(path);
F:\myworkspace\ServletTest\out\artifacts\ServletTest_war_exploded\WEB-INF\web.xml
3.2)获取web项目下指定资源的内容,返回的是字节输入流。InputStream getResourceAsStream(java.lang.String path)
InputStream in = servletContext.getResourceAsStream("/WEB-INF/web.xml");
InputStreamReader isr = new InputStreamReader(in,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String s = null;
while((s =br.readLine())!=null){
System.out.println(s);
}
3.3)getResourcePaths(java.lang.String path) 指定路径下的所有内容。
Set set = servletContext.getResourcePaths("/WEB-INF");
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
3.4)实现servlet的转发
RequestDispatcher getRequestDispatcher(String path) ;//参数表示要跳转到哪去
RequestDispatcher rd = servletContext.getRequestDispatcher("/Servlet1");
rd.forward(req,resp);