ServletConfig和ServletContext

 

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);

}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭