(24)ServletConfig和ServletContext

 

11,10,18

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{

      

}

 

1、ServletConfig:每一个servlet对象都有一个ServletConfig对象

例如:

FirstServlet -------- ServletConfig对象

SecondServlet---------ServletConfig对象

2、

web.xml

<web-app>

       <servlet>servlet名字和servlet类

       <init-param>初始化参数</init-param>

       </servlet>

       <servlet-mapping>servlet名字和url模式</servlet-mapping>

       <context-param>参数名和参数值,对所有servlet都有效</context-param>

</web-app> //根标签

 

 

ServletContext 上下文对象,一个web应用有一个ServletContext对象。

它里面有setAttribute();方法:设置属性名和属性值

            getAttribute("属性名");

application       session    request

Enumeration getAttributeNames()

removeAttribute()

 

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

 

临界资源,共享资源

 

 

上下文的参数:

在server文件中进行配置。

<Context path="/demo" docBase=".\demo">

       <Parameter name="companyName" value="csdn"/>

</Context>

 

3、Servlet的线程安全问题:

(1)使用synchronized

–        使用synchronized关键字同步操作成员变量和共享数据的代码,就可以防止可能出现的线程安全问题。

(2)尽量少使用成员变量和共享数据

–        ServletContext是可以多线程同时读/写成员变量和共享数据的,线程是不安全的。

–        ServletRequest对象在service方法的范围内是有效的,不要试图在service方法结束后仍然保存请求对象的引用。

–        Servlet本身就是多线程的,在Servlet中再创建线程,将导致执行情况复杂化,出现多线程安全问题

 

 

4、ServletConfig和ServletContext的区别

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

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

使用synchronized

使用synchronized关键字同步操作成员变量和共享数据的代码,就可以防止可能出现的线程安全问题。

尽量少使用成员变量和共享数据

ServletContext是可以多线程同时读/写成员变量和共享数据的,线程是不安全的。

ServletRequest对象在service方法的范围内是有效的,不要试图在service方法结束后仍然保存请求对象的引用。

Servlet本身就是多线程的,在Servlet中再创建线程,将

致执行情况复杂化,出现多线程安全问题

 

二、

1、HttpServletRequesr简介

WEB客户端发送给WEB服务器的HTTP请求消息分为三个部分:

(1)请求行: GET demo/login?username=xxx&password=1234 HTTP/1.1

       POST demo/login HTTP/1.1

(2)请求消息头:

(3)消息正文(也叫实体内容)username=xxx&password=1234

 

Servlet API中定义的ServletRequest及人口用于封装请求消息。

 

 

2、获取请求行的相关信息:

 

 

3、获取网络连接消息:

 

 

4、获取请求头信息:

 

 

<a href=" ">资源下载</a>  为了吸引访问量。 “盗链”,

 

 

阅读更多
个人分类: 课堂笔记
想对作者说点什么? 我来说一句

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

关闭
关闭
关闭