当前位置: 代码迷 >> Web前端 >> Servlet技术-Servlet强化
  详细解决方案

Servlet技术-Servlet强化

热度:326   发布时间:2012-11-13 10:00:50.0
Servlet技术---Servlet深化

Servlet的线程安全问题,多个客户端访问Servlet时,Servlet就会创建一个线程,并调用service方法,因此service方法在同时访问一个资源的时候,就会出现安全问题。

SingleThreadModel接口已经过时,实现SingleThreadModel接口,客户端访问Servlet时就会创建一个Servlet对象

解决Servlet线程安全问题,需要用到线程同步解决。代码如下:
privateintcount=0;

    publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

       synchronized (this) {

           count++;

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e1) {

              //TODO Auto-generated catch block

              e1.printStackTrace();

           }

           response.getWriter().print(count);

       }

   

如果不用线程的同步就会出现相同的数据,造成资源的安全问题;

这里的Thread.sleep(1000);不能向外面抛出异常,只能处;

由于利用线程同步,就加锁了,在客户端访问资源的时候,请求的时间相对长,是因为下一个客户必须等上一个客户释放了锁,才能访问资源;

这就解决了Servlet的线程安全问题。

 

ServletConfig对象

Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。

 

servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servletinit方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

  相关解决方案