<c:set>标签

<c:set var="money" scope="session" value="${100*3}"/>
<c:out value="${money}"/>
输出:300

<c:set var="projectSource" value="${entity.projectSourceId}"/>
el表达式取值:${projectSource}


scope作用域:application > session > request > page(默认)
jsp 处理变量的作用域:page(默认) -> request -> session -> application

1.application:服务器启动到停止。Application的作用范围在服务器一开始,到服务器关闭为止Application 的范围最大、停留的时间也最久,
所以使用时要特别注意不然可能会造成服务器负载越来越重的情况。
只要将数据存入application对象,数据的范围范围 (Scope) 就为Application ; application作用域上的信息传递是通过ServletContext实现的,它提供的主要方法如下所示: Object getAttribute(String name):从application中获取信息。
void setAttribute(String name, Object value):向application作用域中设置信息
2.session:HTTP会话开始到结束这段时间。Session的作用范围为一段用户持续和服务器所连接的时间,但与服务器断线,这个属性就无效。只要将数据存入session对象,数据的范围就为Session; session是通过HttpSession接口实现的,它提供的主要方法如下所示。
Object HttpSession.getAttribute(String name):从session中获取信息。
void HttpSession.setAttribute(String name, Object value):向session中保存信息。 HttpSession HttpServletRequest.getSessio():获取当前请求所在的session的对象。 session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。
但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:
如果一定的时间内客户端没有反应,则认为会话结束。Tomcat的默认值为120分钟,但这个值也可以通过HttpSession的setMaxInactiveInterval()方法来设置
3.request:HTTP请求开始到结束这段时间。Request 的范围是指在一JSP网页发出请求到另一个JSP网页之间,设定Request的范围时可利用request对象中的setAttribute( )和getAttribute( );
一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。
Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的。
void setAttribute(String name, Object value):将对象value以name为名称保存到request作用域中。
Object getAttribute(String name):从request作用域中取得指定名字的信息。
JSP中的doGet()、doPost()方法的第一个参数就是HttpServletRequest对象,使用这个对象的setAttribute()方法即可传递信息。
那么在设置好信息之后,要通过何种方式将信息传给其他的Servlet呢?这就要用到RequestDispatcher接口的forward()方法,通过它将请求转发给其他Servlet。
RequestDispatcher ServletContext.getRequestDispatcher(String path):取得Dispatcher以便转发。path为转发的目的Servlet。
void RequestDispatcher.forward(ServletRequest request, ServletResponse response):将request和response转发。
因此,只需要在当前Servlet中先通过setAttribute()方法设置相应的属性,然后使用forward()方法进行跳转,最后在跳转到的Servlet中通过使用getAttribute()方法即可实现信息传递
4.page:当前页面从打开到关闭这段时间。标名pageContext.setAttribute("","");它只能在同一个页面中有效
request和page的生命周期都是短暂的,它们之间的区别:一个request可以包含多个page页(include,forward及filter)
为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts2对HttpServletRequest、HttpSession和ServletContext进行了封装,
构造了三个Map对象来替代这三种对象,在Action中,直接使用HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存和读取数据。
要获取这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类,ActionContext是action执行的上下文,
在ActionContext中保存了action执行所需的一组对象,包括parameters、request、session、application和locale等。
ActionContext类定义了如下方法,用于获取HttpServletRequest、HttpSession和ServletContext对应的Map对象
posted @ 2019-04-18 10:14  lost_s  阅读(182)  评论(0编辑  收藏  举报