第5章:作为Web应用:属性和监听者/5.4 Servlet属性的线程安全性、请求属性与请求分派
其他
2018-11-04 14:11:29
阅读次数: 0
- 它不是线程安全的,因为它属于应用所有,全部servlet都都可以修改它,所以在调用setAttribute,removeAttribute时要加锁操作
- 操作方法如:,锁要针对getServletContext对象
- 请求属性是线程安全的,因为每个属性都是一个线程中,而且它的属性值是独立的,不是共享的,所以是安全的
- 它不是线程安全的,因为一个用户可能在多个浏览器窗口连续发送请求,但是对容器来说,它还是属于同一个用户的会话,所以在会话中的setAttribute,removeAttribute操作也不是安全的,也要加锁
- 操作方法如:,锁要针对request.getSession( )对象
- 请求属性就是用请求参数HttpServletRequest request调用setAttribute方法设置某些属性,这些属性可以是某个具体类的对象,然后将设置后的属性传递给应用的其它部分,例如JSP,
- 请求分派就是通过请求参数HttpServletRequest request获取某个JSP的分派器对象,然后再告诉JSP接受请求
- 获取请求分派器对象的两种方式
- 从请求对象获取
//获取my.jsp分配器,这里的my.jsp资源的路径可以是相对路径,也可以带/的绝对路径
RequestDispatcher requestDispatcher = request.getRequestDispatcher("my.jsp");
- 从上下文对象获取
//获取my.jsp分配器,这里的my.jsp必须带/开头的绝对路径
RequestDispatcher requestDispatcher2 = getServletContext().getRequestDispatcher("/my.jsp");
- 代码演示:
//创建某个对象
Dog dog1 = new Dog("mydog1");
Dog dog2 = new Dog("mydog2");
//设置对象属性1
request.setAttribute("dog1", dog1);
//设置对象属性2
request.setAttribute("dog2", dog2);
//获取my.jsp分配器
RequestDispatcher requestDispatcher = request.getRequestDispatcher("my.jsp");
//发送分派请求
requestDispatcher.forward(request, response);
//在后续的my.jsp中可以通过隐藏的HttpServletRequest对象通过getAttribute方法获取到传递过去的属性
转载自blog.csdn.net/u011830122/article/details/83714838