下面示例中页面:( -> 表示跳转关系)
index.jsp -> /user(即UserServlet) -> test.jsp或者login.jsp
regist.jsp (单独的,没有跳转)
一.JSP四大作用域
作用域大小:pageContext < request < session < application
1.PageContext域
顾名思义,即作用于该页面
index.jsp中:
<form action="/user" method="get">
<%
request.setAttribute("page_age", 48);
%>
用户名:<input type="text" name="username" value="<%=pageContext.getAttribute("page_age")%>">
<input type="submit" value="提交">
</form>
页面用户名后文本框:
48
2.HttpServletRequest域
作用于一次请求,例如Servlet到jsp
UserServlet中:(映射到/user)
req.setAttribute("req_age2", 90);
req.getRequestDispatcher("login.jsp").forward(req, resp);
login.jsp中:
age:<%=request.getAttribute("req_age2")%>
页面显示:
age:90
3.HttpSession域
作用于一次会话,会话在Http1.0中比哦啊是一次请求一次响应,下一次请求会重新开启一个会话,Http1.1中为了节约资源,提升性能,将请求开始到没有超时的响应结束期间称之为一次会话。
UserServlet中:(映射到/user)
req.getSession().setAttribute("session_age2", 1234);
req.getRequestDispatcher("login.jsp").forward(req, resp);
login.jsp中:
<a href="test.jsp">去测试页面</a>
test.jsp中:
<%=session.getAttribute("session_age2") %>
4.ServletContext域
贯穿整个Servlet的生命周期,也是最大的作用域。因此也常常表示为application,即指代应用上下文。
UserServlet中:(映射到/user)
req.getServletContext().setAttribute("application_age", 90000);
req.getRequestDispatcher("login.jsp").forward(req, resp);
regist.jsp中:
<%=application.getAttribute("application_age")%>
刚开始直接访问regist.jsp,页面显示null,通过index.jsp提交后进入到UserServlet,然后转发到login.jsp,此时因为设置了ServletContext,因此再次访问regist.jsp显示90000
关于更加详细的JSP基础语法,参见: