黑马程序员_JAVA 学习笔记22 WEB篇9

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net

<servlet>
    <servlet-name>initTest</servlet-name>
    <servlet-class>servlet.initTest</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
关于服务器启动时的自动 加载servlet加上这样一条语句就可以完成了,
里面的数字为装载的顺序。比如有几个servlet需要自动装载时,可以设定一个装载的顺


序。这种可以完成初始化的工作,可以不要servlet-mapping所以初始化之后 就没法再用


它了。
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
ServletContext sc = req.getServletContext();

if(null == sc.getAttribute("count"))
{
sc.setAttribute("count", 1);
}
else
{
Integer c = (Integer)sc.getAttribute("count");
sc.setAttribute("count", ++c);
}

req.getRequestDispatcher("oneday/context.jsp").forward(req, 


resp);
}
<body>
    <%=application.getAttribute("count") %>
  </body>
这是servletContext对象的用法。
Application的类型就是servletContext。
下面是并发问题:
public class XianCheng extends HttpServlet
{
String username ;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
this.username = req.getParameter("username");

try{
Thread.sleep(10000);
}
catch(Exception e)
{
e.printStackTrace();
}
req.setAttribute("username", username);
req.getRequestDispatcher("oneday/xiancheng1.jsp").forward(req, 


resp);

}
}
<body>
    <%=request.getAttribute("username") %>
    <%=request.getParameter("username") %>
  </body>


上面如果同时打开两个浏览器同时提交的情况下会发生错误,比如一个提交aaa,一个提


交bbb 最后 结果可能都为<%=request.getAttribute("username") %>
bbb,但是下面的<%=request.getParameter("username") %>就不会发生这样的错误。上


面的为什么会发生错误,首先servlet是单实例的,然后username又是成员变量一级的,


所以的有的请求都共享的是同一个变量,所以set进去的值由于并发会发生错误结果。后


面不会出错是因为请求转发的原因,因为对于每一个请求servlet都会创建一个request的


对象,请求的内容位于不同的request对象当中,在servlet中只是把请求转发了一下,所


以用getparameter获得的对象的值是不会错的,因为位于不同的请求对象当中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值