关于Servlet的并发响应

关于Servlet的并发响应

 

http://blog.csdn.net/irelandken/article/details/6927713我们分析了Servlet的生命周期

Servlet的生命周期是这个Servlet被访问时构造,项目被Remove部署时才终止…

 

那么我们现在再来看看,当多个用户以doget/dopost方式同时访问同一个Servlet时,那个响应情况是怎么的呢??是一个一个来执行?还是多线程并行来执行呢??

 

1: 新建web Project

2:新建文件: Servlet_MutiThreads.java

 

 

[java]  view plain copy
  1. package myServlet;  
  2. import java.io.IOException;  
  3.    
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.    
  9.    
  10. public class Servlet_MutiThreads extends HttpServlet {  
  11.    
  12.     private static final long serialVersionUID = 1L;  
  13.    
  14.     @Override  
  15.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  16.            throws ServletException, IOException {  
  17.         
  18.        System.out.println(Thread.currentThread().getName() + " is running");  
  19.         
  20.        try {  
  21.            Thread.sleep(10*1000);  
  22.        } catch (InterruptedException e) {  
  23.            e.printStackTrace();  
  24.        }  
  25.         
  26.        System.out.println(Thread.currentThread().getName() + " is ------------finished");  
  27.     }  
  28.    
  29.     @Override  
  30.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  31.            throws ServletException, IOException {  
  32.         
  33.        doGet(req,resp);  
  34.     }  
  35.    
  36. }  
  37.    


3.XML加入:

[html]  view plain copy
  1.  <servlet>  
  2.   <servlet-name>Servlet_MutiThreads</servlet-name>  
  3.   <servlet-class>myServlet.Servlet_MutiThreads</servlet-class>  
  4. </servlet>  
  5.   
  6. <servlet-mapping>  
  7.   <servlet-name>Servlet_MutiThreads</servlet-name>  
  8.   <url-pattern>/myServlet/Servlet_MutiThreads</url-pattern>  
  9. </servlet-mapping>  


 

那么这个servlet的访问的url是: http://localhost:8080/Servlet_MutiThreads//myServlet/Servlet_MutiThreads

 

这个Servlet里,每次访问都sleep 10s,就是说每个访问的持续时间为10s….(这里为不什么不用wait呢? 是因为sleep时,尽管线程休眠了,但还是不会释放锁的,而这正是我们想要的,而wait是会释放的)

 

 

我们有在地址栏里多次访问这个URL(连续按多次enter):

 

 

我们可以看到,这个访问是并发的,并Servlet的响应也是并发的,查看资料:

 

Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。

 

当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。

 

Servlet容器会自动使用线程池等技术来支持系统的运行

 

我们就验证了Servlet能并发响应多个用户的访问

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1) 可以在一台机器上运行多个服务吗?,会不会很麻烦? 当然,运行多个服务,节省硬件成本是这个系统的目标。 不麻烦,你只需要有中国移动发给你的一些参数,用一个命令就可以初始化一个实例,然后你就可以使用命令来直接启动和停止这个服务。 2) 如何保证性能? 谈到性能,主要是数据库的数据存取。 我已经很仔细地考虑过数据库的存取速度,据此做了一些性能上的优化,但是如果你的上层应用如果有着特殊的存取要求,请在此数据表上加索引,或者联系作者给你解决问题。 其他方面的性能主要是决定于你的物理主机。 3) 到底可以支持多找个服务在同一台主机上运行? 如果你得到的版本没有限制,那么唯一限制你的是你的主机物理参数了。最主要的是CPU和MEM。建议关注主机的CPU和MEM占用率,如果压力很大,请增强硬件。 4) 这个服务支持CMPP的什么版本? 服务器可以设置,可以设置成支持CMPP2.0,CMPP3.0,和自动三种方式。 虽然说CMPP3指定10年了,但是中国移动现在大量地使用CMPP2的网关,所以你需要CMPP2才能和中国移动对接。 如果设置成自动,需要上一级网关支持。CMPP协议是设置成可以支持的,但是有的中国移动的网关不支持。 5) 如何发送短信,以及查阅收到的短信? 直接往cmpp_submit表格填入数据即可,如何有大量的数据,也可以直接导入。但必须确认其中的stat值必须为0,计费等值是你的上级网关认可的,否则对方会拒绝接受。 6) 如何知道短信发送成功? 发送表的Stat=0表示还没有发送,stat=1的时候开始发送,stat=2时候对方已经确认收到,这个时候需要查阅RespStat的值,如果是0,则发送成功。否则用这个值去错误表查询才能了解发送不成功的原因,这个原因是中国移动定义的。 7) 如何确认收到报告? 如果发送的时候要求收到报告,则收到报告时stat=3,这个时候请查阅ReportStat的值,如果为0,则送达,其他的值查阅关于reportStat的值 最终是否收到已经何时才能收到是上级网关决定的。 8) 为什么发送短信的时候没有签名呢,明明我填写了签名的呀? 在湖北移动,上级网关对SP发送的短信会强制加一个签名,这样就不必增加签名了。但是签名的内容必须计算在内。 如果你的上级网关不加签名,而你需要增加签名的话,请将配置“签名短信”设为“YES”即可。(V1.3) 9) 为什么签名会影响短信发送条数? 只要是设置了签名短信为是,或上级网关。那么签名会计算在短信长度在内,当然会影响短信发送条数。 10) 如何拆分短信?拆分短信后的签名是怎么处理的? 只要你发送的短信有一个中文字符,不管是短信内容,还是签名内容。那么整个短信作为中文来发送,否则作为英文来发送。 发送中文短信的时候,不管是汉字,还是中间的英文字符,都会作为一个字来统计,如果不满70字,就是一条,否则就拆分,拆分后每条可以发送67个字。 发送英文每次可以发送140字,如果拆分,拆分后每次只能发送134字。 11) 可以控制短信发送的速度吗? 不能完全控制,因为要受到上一级网关的影响。在上级网关的范围内才可以设置快一点或者慢一点。所以“发送速度”是一个参考值。 12) 我怎么知道每条发送的时间? 查阅submit表可以查到。 13) 有的短信可以发送成功,但是为什么有的发送失败,查阅到返回码为9? 中国一定对每一个SP的权限做了限制,如果发送有一条成功,那么就说明设置没有问题了。 发送失败可以在RespStat查到返回码。例如返回码为9,查阅到是“本网关不负责服务此计费号码”,这个号码是外省的号码,而你的SP权限是不能发送这个号码的。 具体代码请向你的上一级网关查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值