我在看《Servlet与JSP核心编程》时,文中在介绍基于ServletContext的RequestDispatcher的时候需要同步,我一直没有想明白什么场景有问题,为什么在this上同步。相关代码如下:
synchronized{
ValueObject value = new valueObject();
getServletContext().setAttribute("key", value);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Somepage.jsp");
dispatcher.forward(request, response);
}
synchronized{
ValueObject value = new valueObject();
getServletContext().setAttribute("key", value);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/Somepage.jsp");
dispatcher.forward(request, response);
}
解决方案 »
- myclipse建立不起web service project
- JSP 进行数据库开发
- 关于MyEclipse里导入工程的疑惑
- 在发布项目的时候报这个错误?100分求助!!!!!!!!!!!!!!!!
- document未定义?
- 大家帮帮忙,看看这个页面有什么问题,怎么会出现后面那样的错误?
- @@@@@@@@@@@@@@@@@@@@@ 请教一个hibernate问题 @@@@@@@@@@@@@@@@@@@@@@@@
- java新手 关于web框架的问题
- 請問,在B/S結構開發的MIS中,如何保證數據正確性
- jquery easyUI 的冻结列问题!求大神进来帮帮忙!
- 项目出现问题,严重: Exception sending context initialized event to listener instance...
- 我写了一个javabean但是是默认的包名,这样还能实现显示的功能么?里面的class该怎么写呢?有没有什么方法补救,不重写了!灰常欢迎大家来呃
我还有个疑问,一般来说Application Server在第一个请求过来的时候会将Somepage.jsp编译成servlet,然后load到内存中,以后其他请求过来的时候就不需要再次读文件了。就算几乎同时两个初始请求过来导致Application Server读Somepage.jsp,这个时候Application Server应该自己同步的。否则岂不是所有的jsp都要被同步保护起来吗?
getServletContext().setAttribute("key", value);这里需要同步,因该是
getServletContext().setAttribute("key", value);
Servlet中ServletContext与HttpSession在用setAttribute时都要同步
可能出现
线程一调用ServletContext.setAttribute("a", "aaa");
线程二调用ServletContext.setAttribute("a", "bbb");
线程一转到JSP页面调用ServletContext.getAttribute("a");
这时打印的是bbb
线程二转到JSP页面调用ServletContext.getAttribute("a");
这时打印的是bbb
我自己没有权限修改帖子,书中写的是synchronized(this),也就是说是用该Servlet的锁进行同步。所以这个是没有办法阻止其他Servlet的线程访问ServletContext的,因此这个解释还是不对
而B操作跳到 b.jsp去可能会影响A的结果如果不加锁肯能会跳错,看是不是这样