在普通的JavaWeb项目中,会经常在jsp中嵌入java代码,这样会使得jsp代码混乱,可读性查。所以就产生了EL表达式。
传统jsp嵌套java代码都是把java代码放入 <%%> 中,页面同时有HTML代码时就显得很混乱,使用EL表达式可以很好解决此问题。下面看一下EL表达式的用法。
- EL表达式有点“.”操作符
- 有“[]”操作符
两个操作符各有其优缺点,点操作符使用方便而“[]”操作符功能强大
下面进行代码展示:
先在后端Servlet上设置一些属性,供给前端jsp获取:
其中的Student和Address类是自定义类
@WebServlet(value = "/ELInitServlet")
public class ELInitServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Address address = new Address("xa", "bj");
Student student = new Student(1, "zs", address);
//将student放入request域
request.setAttribute("student", student);
//跳转
request.getRequestDispatcher("el.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
- jsp用EL表达式获取普通属性
-------------------------------------<br/>
${requestScope.student}<br/>
${requestScope.student.sno}<br/>
${requestScope.student.name}<br/>
${requestScope.student.address.homeAddress}<br/>
${requestScope.student.address.schoolAddress}<br/>
结果:
@WebServlet(value = "/ELInitServlet")
public class ELInitServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//存放数组
String[] hobbies = new String[] {"football", "basketball"};
request.setAttribute("hobbies", hobbies);
//跳转
request.getRequestDispatcher("el.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
- jsp用EL表达式获取数组
-------------- 数组 ------------------<br/>
${requestScope.hobbies[0]}<br/>
${requestScope.hobbies[1]}<br/>
结果:
@WebServlet(value = "/ELInitServlet")
public class ELInitServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//存放Map属性
Map<String, Object> map = new HashMap<>();
map.put("cn", "中国");
map.put("us", "美国");
request.setAttribute("map", map);
//跳转
request.getRequestDispatcher("el.jsp").forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
- jsp用EL表达式获取map
-------------- map ------------------<br/>
${requestScope.map.cn}<br/>
${requestScope.map.us}<br/>
结果:
4. jsp用EL表达式逻辑运算符和Empty运算符
-------------- 逻辑运算 ------------------<br/>
${3>2}、${3 gt 2}<br/>
${3>2||3<2},${3>2 or 3 < 2}<br/>
-------------- Empty运算:变量为null或不存在时返回值为真 ------------------<br/>
${empty requestScope.hobbies}<br/>
${empty requestScope.hello}<br/>
结果:
5. jsp用EL表达式获取参数对象、隐式对象
form.jsp:
<form action="el.jsp">
用户名:<input name="uname" type="text">
兴 趣;<br/>
足球<input name="hobbies" value="足球" type="checkbox">
篮球<input name="hobbies" value="篮球" type="checkbox">
乒乓球<input name="hobbies" value="乒乓球" type="checkbox">
<input type="submit" value="注册">
</form>
el.jsp:
<%-- EL表达式的隐式对象(自带的对象)
a.作用于访问对象(EL域对象):pageScope、requestScope、sessionScope、applicationScope
如果不指定域对象,默认从小到大取值
b.参数访问对象:获取表单数据(request.getParameter()、request.getParameterValues())
${param} ${paramValues}
c.JSP隐式对象:pageContext,在JSP可以通过pageContext获取其他的JSP隐式对象
--%>
-------------- 获取参数对象 ------------------<br/>
${param.uname}<br/>
${paramValues.hobbies[0]}<br/>
${paramValues.hobbies[1]}<br/>
${paramValues.hobbies[2]}<br/>
-------------- 隐式对象级联获取 ------------------<br/>
${pageContext.request.localPort}<br/>
当form.jsp中按一下图片操作:
点击注册后的结果如下: