el表达式简介
1. EL表达式 在jsp页面中实现计算、逻辑处理、数据显示等功能 目的 : 减少jsp页面中的java代码 2.web资源访问级别 : Servlet域对象 : ① pageContext(页面级别) : 只能在当前页面中使用 ② request : 一次请求过程中使用 ③ session : 一次会话 ④application : 整个应用范围内
创建一个项目,以及一个index.jsp(一个超链接) ; 在src中创建一个Servlet; 创建一个webResource.jsp显示页面. index.jsp:
<a href="HandlerServlet">HandlerServlet</a>
HandlerServlet.java:
package com.lucene.controller;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/HandlerServlet")
public class HandlerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("username", "request_username");
HttpSession session = request.getSession();
session.setAttribute("username", "session_username");
ServletContext context = request.getServletContext();
context.setAttribute("username", "application_username");
response.sendRedirect("webResource.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
webResource.jsp:
<%
pageContext.setAttribute("username","pageContext_username");
%>
<ul>
<li>pageContext级别:<%=pageContext.getAttribute("username") %></li>
<li>request级别:<%=request.getAttribute("username") %></li>
<li>session级别:<%=session.getAttribute("username") %></li>
<li>application级别:<%=application.getAttribute("username") %></li>
</ul>
运行结果:
因为不同资源放在不同的级别中,取资源就会拿到不一样的资源 因为重定向,会产生新的request,新的request没有username变量,所以为null,若用请求转发,就可以取到
request.getRequestDispatcher("webResource.jsp").forward(request, response);
运行结果:
el表达式语法
${表达式} 新建一个el.jsp页面:
4+5=${4+5 }<br>
4*5=${4*5 }<br>
6/4=${6/4 }<br>
6/4=${6 div 4 }<br>
6%4=${6%4 }<br>
6%4=${6 mod 4 }<br>
运行结果: 所以el表达式会按小数进行运算,不会进行取整
el表达式可以对数组、列表等进行运算:
若使用el表达式访问:
<li>pageContext级别:${pageScope.username }</li>
<li>request级别:${requestScope.username }</li>
<li>session级别:${sessionScope.username }</li>
<li>application级别:${applicationScope.username }</li>
运行结果:
当我们使用el表达式获取不同级别的相同变量是: pageContext----->request------>session------>application------>报错
el表达式案例
在包中建立一个实体类: 并且设置 name , sex , age的setter getter 方法 ; 带参数(不带参数)的构造方法 ; toString方法的重写
package com.lucene.model;
public class Person {
private String name;
private String sex;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
public Person(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在com.lucene.controller中创建一个Servlet:
package com.lucene.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lucene.model.Person;
@WebServlet("/PersonServlet")
public class PersonServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public PersonServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Person person = new Person("张三","男",22);
request.setAttribute("person",person);
request.getRequestDispatcher("showPerson.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 不建议使用该方法,应该使用jstl标签库技术重构: 新建jsp界面:
name:${person.name }<br>
sex:${requestScope.person.sex }<br>
age:${requestScope.person.age }<br>
将PersonServlet设置为项目首页:更改lib中的web.xml文件(删除多余的部分只留一个) 运行项目:PersonServlet.java------>showPerson.jsp------>显示 运行结果:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
jstl标签库技术与案例代码重构
jstl标签库技术
新建jsp页面:jstlDemo1.jsp 引入使用@taglib:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
①items : 接收需要处理的数据 ②delims : 分隔符 , 按照分隔符进行分割 ③var : date变量 , 按照切分形成若干部分 , 每个代表一个部分 , 相当于循环过程 ④href : 每一次取出来的地址的内容 , 作为超链接的连接目标 ⑤可视化部分 : 让这个地址作为用户能看到的部分
|