您的位置:首页 > 其它

ServletConfig和ServletContext

2011-10-18 15:15 176 查看
ServletConfig和ServletContext
Public class GenericServlet implements Servlet,ServletConfig{

Private ServletConfig conf;

Public void init(ServletConfig conf){

This.conf=conf;

}

Public ServletConfig getServletConfig(){

Return conf;

}

}

Public class HttpServlet extends GenericServlet{

//

}

ServletConfig

– 给Servlet类配置初始化参数

– 在Servlet类中获取它的初始化参数值

ServletContext

– 配置Web应用上下文初始化参数

– 在Servlet类中获取Web应用上下文的初始化参数值

– ServletContext的其他用途

• public void setAttribute(String name, Object obj):根据指定名name把对象obj存放到应用上下文范围中。

• public Object getAttribute(String name):根据指定名从应用上下文范围中获取到该属性对象。

• public void removeAttribut(String name):根据指定名从应用上下文范围中移除该属性。

每个xxxServlet都有一个ServletConfig对象,这个ServletConfig对象只对自己有效

FirstServlet ServletConfig对象

SecondServlet ServletConfig对象

<init-param>
<param-name>corporation</param-name>
<param-value>csdn</param-value>
</init-param>

初始化参数

<web-app>

<servlet>servlet名字和servlet类</servlet>

<servlet-mapping>Servlet名字和要映射成的url模式</servlet-mapping>

</web-app>

一个web应用程序有一个ServletContext对象

<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>

<web-app>

<servlet>servlet名字和servlet类</servlet>

<servlet-mapping>Servlet名字和要映射成的url模式</servlet-mapping>

<context-param>参数名和参数值</context-param>

</web-app>

如何获取ServletContext:[上下文对象]

ServletConfig conf=this.getServletConfig();

ServletContext context=conf.getServletContext();

String encoding=Context.getInitParameter(“encoding”);//通过上下文对象获取参数encoding的值

ServletCoonfig sc=this.getServletConfig();//获取ServletConfig的引用

在service中如下配置是设置上下文

<Context path=”/demo”docBase=”./demo”>

<Paramter name=”companyName”value=”csdn”>

</Context>

ServletContext作用域为整个程序

通过上下文对象设置属性名和属性值

setAttribute(“属性名”,”属性值”);

ServletConfig和ServletContext的区别

整个Web应用只有一个ServletContext,在部署Web应用的时候,容器会建立这一个ServletContext对象,这个上下文对Web应用中的每个Servlet和JSP都可用。

Web应用中的各个Servlet都有自己的ServletConfig,它只对当前Servlet有效。

线程安全问题

servlet对象一旦创建并init()后,开启线程servlce()

当多条线程同时启用,访问共享资源时,会出现不安全,可以加锁

不能在方法前面加锁,否则影响多线程的并发运行

//一个消息头字段对应的多次出现的值

Enumeration values=request.getHeaders(headerName);//返回的是枚举类型的对象

While(values.hasMoreElements()){

values.nextElement();

}

System.out.println(headerName+”: ”+request.getHeader(headerName));

提交请求到提供下载的servlet

String referrer=request.getHeader(“referer”);

String sitePart=http://+request.getServerName();

If(referrer!=null && referrer.startsWith(sitePart)){

//处理正当的下载请求,这里只进行示意

out.println(“dealing download…….”);

}

else{

//非法下载请求跳转到本站的下载说明页

RequestDispatcher rd==request.getRequestDispatcher(“/down.html”);

rd.forward(request,response);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: