下面我将详细讲解“浅谈jsp EL表达式取值过程、page和pagecontext的区别”的完整攻略,希望能对你有所帮助。
什么是EL表达式
EL表达式(Expression Language)是一个用于在JSP中获取数据的表达式语言,主要用于在JSP页面中引用和显示Java Bean中的属性值、参数、方法调用等。它的语法类似于JavaScript和PHP等语言的表达式语言。
EL表达式的取值过程
EL表达式的取值过程包括以下几步:
-
将EL表达式转化为相应的Java语言表达式。
-
根据EL表达式中的变量名,在JSP中搜索相应作用域的属性值,例如,如果使用
${username}
从request作用域中取出username属性的值,则实际上是调用了request.getAttribute("username")
方法。 -
如果变量名没有指明作用域,EL表达式默认从javax.servlet.jsp.PageContext类中获取相应的作用域,例如
${param.username}
即表示从request.getParameter("username")方法中获取username的值。 -
如果EL表达式中的变量名不存在,将返回null值。
page和pageContext的区别
在JSP中,page指代当前页面(也就是JSP页面),而pageContext则是JSP页面的上下文对象。它们之间的区别具体如下:
-
page代表当前JSP页面,是一个隐式对象,可以在JSP页面中直接使用,例如
${pageContext.request.method}
可以写作${request.method}
。 -
pageContext代表当前JSP页面的上下文对象,是一个隐式对象,可以使用
pageContext.getAttribute()
方法来获取指定作用域中的属性值,例如pageContext.getAttribute("username",PageContext.REQUEST_SCOPE)
可以获取request作用域中的username属性值。另外,pageContext还提供了一些其他的常用方法,如pageContext.getOut()
、pageContext.getSession()
等。
示例说明
下面是两个示例,分别说明了EL表达式的取值过程和page和pageContext的区别。
示例1:EL表达式的取值过程
在JSP页面中使用以下EL表达式:${username}
假设该JSP页面被提交到Servlet,Servlet代码如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
request.setAttribute("username", username);
RequestDispatcher rd = request.getRequestDispatcher("result.jsp");
rd.forward(request, response);
}
在result.jsp
页面中,使用以下EL表达式取出username属性的值:${username}
此时,会调用request.getAttribute("username")
方法获取username属性的值,与当前页面作用域为request。
示例2:page和pageContext的区别
在JSP页面中,使用以下代码获取request作用域中的属性值:
<%
String username = (String) request.getAttribute("username");
out.println("username1: " + username);
%>
${requestScope.username}
${pageContext.getAttribute("username", PageContext.REQUEST_SCOPE)}
以上三行代码效果相同,都可以获取到request作用域中的username属性值。
而如果使用以下代码,则表示从pageContext中获取request作用域中的username属性值:
${pageContext.requestScope.username}
${pageContext.getAttribute("username", PageContext.REQUEST_SCOPE)}
此时,会调用request.getAttribute("username")
方法获取username属性的值,与当前页面作用域为request。
希望这个完整攻略能够帮助到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈jsp EL表达式取值过程、page和pagecontext的区别 - Python技术站