** ServletConfig对象
ServletConfig对象主要是在Servlet初始化时加载Servlet的初始化参数,并封装到ServletConfig对象。
使用示例:
>> 先在web.xml中配置<init-param>对象,这个对象必须要在其中在配置它的<param-name>和<param-value>两个属性。
<servlet> <servlet-name>ServletConfigDemo</servlet-name> <servlet-class>com.ibatis01.servlet.ServletConfigDemo</servlet-class> <init-param> <param-name>path</param-name> <param-value>C:\Users\WXH\Pictures\background\001.jpg</param-value> </init-param> <init-param> <param-name>Fine</param-name> <param-value>FE#@NF(*VMM#@(LK)dsf)</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>ServletConfigDemo</servlet-name> <url-pattern>/ServletConfig</url-pattern> </servlet-mapping> |
>> 然后创建一个Servlet,并获取ServletConfig对象
说明:当Servlet配置了初始化参数后,web容器在创建Servlet对象时会自动的把配置的这些参数封装到ServletConfig对象,并在初始化init(ServletConfig config)方法时,将Config对象传递给Servlet对象。在Servlet中有一个getServletConfig()方法获取ServletCongfig()对象。
package com.ibatis01.servlet;
import java.io.IOException; import java.util.Enumeration;
import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class ServletConfigDemo extends HttpServlet {
/** * 1.tomcat服务器把这些参数在加载web应用的时候,封装到servletConfig对象中 * 2.tomcat服务器再调用init方法传入servletConfig对象 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取ServletConfig对象 ServletConfig config=this.getServletConfig();
// 获取初始化属性的值 // String path=config.getInitParameter("path"); // response.getWriter().append("path:"+path+"<br/>");
Enumeration<String> names =config.getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); String value=this.getServletConfig().getInitParameter(name); response.getWriter().append(name+": "+value+"<br/>"); } } } |
还有一个是获取当前的Servlet的名称:this.getServletConfig().getServletName(); // 获取当前的Servlet的名称。
ServletConfig对象的四个函数
String getInitParameter(String name) | 根据参数名获取参数值[web.xml中配置的初始化参数] |
Enumeration getInitParameterNames() | 获取初始化参数的所有名字[可以用Enumeration输出所有的value] |
ServletContext getServletContext() | 得到ServletContext对象[可以不用这个方法,因为在Servlet中也有一个相同的方法] |
String getServletName() | 得到Servlet的名称 |
** ServletContextServlet上下文对象
Web容器在在启动的时候会为每一个web程序创建一个ServletContext对象,代表当前的web程序。所以可以知道ServletContext对象是一个唯一的且全局的对象。因此,所有的servlet都可以共享一个ServletContext对象。
>> 获取ServletContext对象
方式一:this.getServletConfig().getServletContext()
方式二:this.getServletContext()
两种方式效果一样的,因为如下:
public ServletContext getServletContext() { return getServletConfig().getServletContext(); }// 在servlet内部还是会用方式一的 |
个人推荐使用方式二,因为简单一点。
>> 获取web.xml中配置的初始化参数
web.xml配置如下
<context-param> <param-name>AAA</param-name> <param-value>FNDSENISNEFSFN</param-value> </context-param> <context-param> <param-name>BBB</param-name> <param-value>FDFSFESEFWEQFWEF</param-value> </context-param> <context-param> <param-name>CCC</param-name> <param-value>VEWFEWFWEFXWEDF</param-value> </context-param> |
利用context的getInitParameter方法获取属性的value,当然也可先获取name集合,遍历出所有的value[getParameterNames()获取所有的名字]
publicclass ServletContextDemo extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext();
/** * servlet中web.xml配置的参数只有在当前的servlet中获取 * 而全局的参数在所有的servlet中都能获取 */
// 打印所有的全局初始化参数 response.getWriter().append("print global initialize parameters:<br/>"); Enumeration<String> names=context.getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); String value=context.getInitParameter(name); response.getWriter().append(name+": "+value+"<br/>"); } } } |
ServletContext对象常用的方法
String getContextPath() | 获取web程序的路径[其实就是tomcat上部署的应用名称而已] |
String getInitParameter(String name) | 得到web应用的初始化参数值 |
Enumeration getInitParameterNames() | 得到web应用初始化参数数名称 |
void setAttribute(String name, Object) | 设置一个对象在context域对象中 |
Object getAttribute(String name) | 获得一个在context域对象中的值 |
void removeAttribute(String name) | 删除域对象中相应的对象 |
RequestDispatcher getRequestDispatcher(String path) | 请求转发 |
InputStream getResourceAsStream(String path) | 查找具有给定名称的资源 |
ServletContext context = this.getServletContext(); // getContextPath得到web应用程序的路径:部署到tomca服务器上运行的web应用名称 String webPath=context.getContextPath(); response.getWriter().append("Web Application Name:"+webPath+"<br/>");
// 利用getContextPath重定向 //response.sendRedirect(webPath+"/index.jsp"); |
** ServletContext域对象
域对象可以保存数据,获取数据。可以在作用域内共享同一份数据。
>> 保存数据到域对象中
publicclass ServletFrom extends HttpServlet { /** * ServletContext域对象 * 域对象可以完成数据共享 */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data="I am a boy"; // 获取servletcontext对象 ServletContext context=this.getServletContext(); /** * 保存数据到servletcontext域对象中 * setAttribute(key,value) * */ context.setAttribute("data", data); } } |
>> 获取域对象中的数据
publicclass ServletEnd extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context=this.getServletContext(); // 获取servletcontext域对象中的数据 String data=(String)context.getAttribute("data");
response.getWriter().append(data);
// 删除域对象中数据 // context.removeAttribute("data"); } } |
当然还可以删除域对象。
** 转发和重定向区别
#1.转发
* a) 地址栏不会改变
* b) 转发只能转发到当前web程序内的资源
* c) 在转发时,可以吧数据放在request域对象中,进行数据的传递
#2.重定向
* a) 地址栏会改变,变成重定向的地址栏
* b) 重定向可以跳转到任何一个资源[wen内部外部都可以]
* c) 在重定向中不能把数据保存到request域中
publicclass Forword extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 转发 RequestDispatcher dispatcher=this.getServletContext().getRequestDispatcher("/ServletFrom"); dispatcher.forward(request, response); // 重定向 response.sendRedirect(this.getServletContext().getContextPath()+"/ServletFrom"); } } |
具体的区别这篇博文写的很具体:
http://www.cnblogs.com/phpzxh/archive/2010/02/01/1661137.html