栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用Servlet和JSP开发Java应用程序 ---- EL

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Servlet和JSP开发Java应用程序 ---- EL
  • 无脚本的 JSP 页面
  • EL 表达式
  • 认识 EL 表达式
    • 使用EL表达式和EL中的运算符
    • 使用EL表达式-获取请求参数的值
    • 使用EL表达式-获取Cookie的值
    • 使用EL表达式-获取四个域对象中的属性值
  • 使用EL调用类中静态方法
  • 使用 EL 表达式
  • EL表达式如何处理Null值和获取上下文参数
  • EL表达式练习

无脚本的 JSP 页面

无脚本的JSP页面是没有Java脚本元素(代码段、表达式和声明)的页面
无脚本(Scriptless)的代码使JSP页面易于阅读、维护和调试
EL 和 JSTL 可以用来编写无 Java 脚本元素的页面

EL 表达式

Expression Language - 表达式语言
提供了一种在JSP页面上编写的语言,以减少代码

认识 EL 表达式 使用EL表达式和EL中的运算符


Java表达式和EL表达式
Java表达式:<%= 15 * 15%>
EL表达式:${16 * 16}

算数运算符
算术运算符取余:${13 % 3}
算术运算符取余:${13 mod 3}
算术运算符除:${17 / 5}
算术运算符除:${17 div 5}

比较运算符
比较运算符:${1 > 2}
比较运算符:${1 gt 2}

eq: == 
ne: != 
gt: >  
lt: <  
ge: >= 
le: <= 

逻辑元素符
逻辑运算符-逻辑与:${1 > 2 && 10 > 2 && 3 > 2}
逻辑运算符-逻辑与:${1 > 2 and 10 > 2 and 3 > 2}
逻辑运算符-逻辑或:${1 > 2 || 10 > 2 || 3 > 2}
逻辑运算符-逻辑或:${1 > 2 or 10 > 2 or 3 > 2}
逻辑运算符-逻辑非:${!(2 > 1)}
逻辑运算符-逻辑非:${not(2 > 1)}

三元运算符
三元运算符:${2 > 1 ? 1 : 0}
三元运算符:${2 > 1 ? "Y" : "N"}

使用EL表达式-获取请求参数的值

Java 表达式

<%@page contentType="text/html" pageEncoding="UTF-8"%>


     
        
        使用Java表达式获取请求参数的值
        
        
    
    
        

使用Java表达式获取请求参数的值


* 本页面中使用java表达式获取请求参数的值,用于和second.jsp对比两种获取请求参数值的方式


<% String[] hobbies = request.getParameterValues("hobbies"); %>


账户: <%=request.getParameter("username")%>
密码: <%=request.getParameter("password")%>
性别: <%=request.getParameter("gender")%>
国籍: <%=request.getParameter("nationality")%>
爱好: <%=hobbies[0]%> <%=hobbies[1]%> <%=hobbies[2]%> <%=hobbies[3]%> <%=hobbies[4]%>

EL 表达式

<%@page contentType="text/html" pageEncoding="UTF-8"%>


    
        
        使用EL表达式获取请求参数的值 
        
        
    
    
        

使用EL表达式获取请求参数的值


* 本页面中使用EL表达式获取请求参数的值,用于和first.jsp对比两种获取请求参数值的方式


<%--在EL表达式中,可以使用param这个隐式对象获取请求参数的值,语法:${param.请求参数名}--%> 账户: ${param.username}
密码: ${param.password}
性别: ${param.gender}
国籍: ${param.nationality} <%--如果一个请求参数有多个值,可以使用paramValues隐式对象获取请求参数的值,语法:${paramValues.请求参数名[数组元素索引]},索引从0开始--%>
爱好: ${paramValues.hobbies[0]} ${paramValues.hobbies[1]} ${paramValues.hobbies[2]} ${paramValues.hobbies[3]} ${paramValues.hobbies[4]}


EL表达式提供诸多隐式对象用于获取不同的信息


param:获取请求参数的单个值
paramValues:获取一个请求参数的多个值,如多个checkbox提交的同一个请求参数的值
header:获取请求的标头信息
headerValues:获取一个请求标头的多个值
cookie:获取Cookie值
pageScope:获取页面范围的属性值
requestScope:获取请求范围的属性值
sessionScope:获取会话范围的属性值
applicationScope:获取应用程序范围(上下文范围)的属性值
initParam:获取上下文初始化参数


使用EL表达式-获取Cookie的值


Java 代码段获取 Cookie 值

<%@page contentType="text/html" pageEncoding="UTF-8"%>


     
        
        在jsp页面中用java表达式获取cookie的值
        
        
    
    
        

get_cookie1.jsp页面-在jsp页面中用java表达式获取cookie的值


<% //获取Cookie Cookie[] cookies = request.getCookies(); //定义两个变量用于存储读取的两个Cookie的值 String accessTime = ""; String randNum = ""; for (Cookie ck : cookies) { if ("lastAccessTime".equals(ck.getName())) { //如果cookie名称为lastAccessTime accessTime = ck.getValue(); //获取其值 } else if ("randomNumber".equals(ck.getName())) { //如果cookie名称为randomNumber randNum = ck.getValue(); //获取其值 } } %>

* 最后一次请求PutCookieServlet的时间:<%=accessTime%>

* PutCookieServlet产生的随机数字:<%=randNum%>




使用Servlet和JSP开发Java应用程序 ---- EL

EL 表达式获取 Cookie 的值

<%@page contentType="text/html" pageEncoding="UTF-8"%>


     
        
        在jsp页面中用EL表达式获取cookie的值
        
        
    
    
        

get_cookie2.jsp页面-在jsp页面中用EL表达式获取cookie的值


<%--也可使用EL表达式获取cookie的值--%> <%--JSP的EL(Expression Language)表达式: ${表达式}--%> <%--如何使用EL表达式获取Cookie的值: ${cookie.Cookie名称.value}--%>

* 最后一次请求PutCookieServlet的时间:${cookie.lastAccessTime.value}

* PutCookieServlet产生的随机数字:${cookie.randomNumber.value}




使用Servlet和JSP开发Java应用程序 ---- EL

使用EL表达式-获取四个域对象中的属性值

java 表达式获取域对象中的属性值

<%@page contentType="text/html" pageEncoding="UTF-8"%>


    
        
        在jsp页面中使用java表达式获取域对象中的属性值
        
        
     
    
        

get_domain_attribute1.jsp页面
在jsp页面中使用java表达式获取域对象中的属性值


<% //在JSP页面上可以使用四个域对象在不同范围共享数据 pageContext.setAttribute("number1", 100); //PageContext request.setAttribute("number2", 200); //HttpServletRequest session.setAttribute("number3", 300); //HttpSession application.setAttribute("number4", 400); //ServletContext int number5=500; %> * 页面范围属性值:<%=pageContext.getAttribute("number1")%>

* 请求范围属性值:<%=request.getAttribute("number2")%>

* 会话范围属性值:<%=session.getAttribute("number3")%>

* 应用程序范围属性值:<%=application.getAttribute("number4")%>
* java表达式访问java代码段中的变量number5:<%=number5%>

使用Servlet和JSP开发Java应用程序 ---- EL

EL表达式获取域对象中的属性值

<%@page contentType="text/html" pageEncoding="UTF-8"%>


    
        
        在jsp页面中使用EL表达式获取域对象中的属性值
        
        
     
    
        

get_domain_attribute2.jsp页面
在jsp页面中使用EL表达式获取域对象中的属性值


<% pageContext.setAttribute("number1", 100); request.setAttribute("number2", 200); session.setAttribute("number3", 300); application.setAttribute("number4", 400); int number5 = 500; int number6 = 600; //java代码定义的变量只有作为属性加入域对象才可被EL表达式访问 pageContext.setAttribute("number6", number6); %> <%--EL表达式提供四个xxxScope隐式对象,用于获取不同域对象中的属性值,语法:${xxxScope.属性名}或${属性名}--%> * 页面范围属性值:${pageScope.number1} | ${number1}

* 请求范围属性值:${requestScope.number2} | ${number2}

* 会话范围属性值:${sessionScope.number3} | ${number3}

* 应用程序范围属性值:${applicationScope.number4} | ${number4}
* EL表达式访问java代码段中的变量number5:${number5}

* EL表达式访问java域对象属性number6:${pageScope.number6} | ${number6}

使用Servlet和JSP开发Java应用程序 ---- EL


EL表达式获取域对象中的属性值,域对象的属性在Servlet中添加的

<%@page contentType="text/html" pageEncoding="UTF-8"%>


    
        
        在jsp页面中使用EL表达式获取域对象中的属性值
        
        
     
    
        

get_domain_attribute3.jsp页面
在jsp页面中使用EL表达式获取域对象中的属性值,域对象的属性在Servlet中添加的


* 请求范围属性值num1:${requestScope.num1}

* 会话范围属性值num2:${sessionScope.num2}

* 应用程序范围属性值num3:${applicationScope.num3}

* 学生信息:${requestScope.student.sname} | ${requestScope.student.srollno} | ${requestScope.student.sgender} | ${requestScope.student.spassword} | ${requestScope.student.sbatch}

* 狗(毛毛)信息:${sessionScope.dog.name} | ${sessionScope.dog.type} | ${sessionScope.dog.age}

* 列表第一只狗的信息:${requestScope.dogList[0].name} | ${requestScope.dogList[0].type} | ${requestScope.dogList[0].age}

* 字符串数组的各个值:${requestScope.names[0]} | ${requestScope.names[1]} | ${requestScope.names[2]}

* 对象数数组的各个值:${requestScope.info[0]} | ${requestScope.info[1]} | ${requestScope.info[2]}

使用Servlet和JSP开发Java应用程序 ---- EL
package com.qdu.servlet;

import com.qdu.entity.Dog;
import com.qdu.entity.Student;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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("/pas")
public class PutAttributeServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //通常是发送请求给servlet,servlet转发请求给jsp
        //在Servlet中可以使用请求对象、会话对象、上下文对象这三个域对象用于在不同范围共享数据
        //请求对象中的属性只有转发请求才能共享给下个组件(jsp或servlet)
        req.setAttribute("num1", 111);

        HttpSession session = req.getSession();
        session.setAttribute("num2", 222);

        ServletContext ctx = getServletContext();
        ctx.setAttribute("num3", 333);

        Student s = new Student("2020208888", "Anna", "123456", "女", "20软件J01");
        Dog d = new Dog("毛毛", "哈士奇", 2);

        req.setAttribute("student", s);
        session.setAttribute("dog", d);

        //假设用一个数组存储了很多个字符串表示的名字
        String[] array1 = {"小强", "小明", "小兰", "小花"};
        req.setAttribute("names", array1);

        //假设用一个数组存储了一个学生的名字、成绩排名和平均分,因为数据类型不同,所以可以考虑使用Object数组
        Object[] array2 = {"小明", 2, 97.3};
        req.setAttribute("info", array2);
        
        List list=new ArrayList<>();
        list.add(new Dog("球球","泰迪",2));
        list.add(new Dog("旺财","柴犬",5));
        list.add(new Dog("哈利","哈士奇",8));
        list.add(new Dog("开心","边牧",10));
        req.setAttribute("dogList", list);
        
        req.getRequestDispatcher("/get_domain_attribute3.jsp").forward(req, resp);
    }
}

使用EL调用类中静态方法


在类中定义静态方法

package com.qdu.util;

import java.util.Random;


public class NumberUtil {

    private static Random ran = new Random();
    
    
    public static int getRandomNumber() {
        return ran.nextInt(100) +1;  //1-100
    }

    
    public static int square(int x) {
        return x * x;
    }

    
    public static int sum(int a, int b) { //严格来说,方法名+参数列表叫做方法的签名
        return a + b;
    }
}

package com.qdu.util;


public class StringUtil {

    public static String getMobile(String mobile){
        return mobile.substring(0,3)+"****"+mobile.substring(7,11);
    }
}

创建TLD(Tag Library Descriptor标记库描述符



    
    1.0
    
    fc
    
    
    
    http://www.anna.com/func/core
  
    
    
    
    
    
        
        rand
        获取一个1-100以内的随机整数
        
        com.qdu.util.NumberUtil
        
        
        int getRandomNumber()
    
    
    
        square
        计算一个整数的平方值
        com.qdu.util.NumberUtil
        int square(int)
    
    
    
        sum
        计算两数之和
        com.qdu.util.NumberUtil
        int sum(int, int)
    
    
    
        getMobile
        获取电话号码
        com.qdu.util.StringUtil
        java.lang.String getMobile(java.lang.String)
    
  


在jsp页面使用taglib指令引入TLD




<%@taglib uri="http://www.anna.com/func/core" prefix="fc" %> 

在EL表达式中调用方法

<%--
    使用EL调用类中静态方法
--%>



<%@taglib uri="http://www.anna.com/func/core" prefix="fc" %> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 


     
        
        使用EL调用类中静态方法
        
        
    
    

        

使用EL调用类中静态方法


* 使用EL调用类中静态方法的步骤:
1) 在类中定义静态方法
2) 创建TLD(Tag Library Descriptor标记库描述符,一个xml文件,描述如何使用标记或函数)文件,TLD中不仅可以描述标记,还可描述函数,描述如何使用函数(function)
3) 在jsp页面使用taglib指令引入TLD
4) 在EL表达式中调用方法即可,调用语法:${TLD别名:函数名(参数列表)}


* 调用getRandomNumber()方法: ${fc:rand()}

* 调用square()方法: ${fc:square(4)}

* 调用sum()方法: ${fc:sum(2, 4)}

* 调用getMobile()方法: ${fc:getMobile("18706579002")}


使用 EL 表达式 EL表达式如何处理Null值和获取上下文参数

如果只是显示一个空值,EL表达式自动处理空值,什么都不显示

* 属性或变量值:${number}

EL表达式中,使用空值进行算术运算,则空值做0处理

* 求和:${number + 6}

EL表达式中,在比较运算中使用空值,则做false处理

* 逻辑判断:${result ? 1 : 0}

使用EL表达式获取上下文参数(context parameter)



    

    
        encoding
        UTF-8
    
    
    
        email
        anna@qdu.edu.cn
    
    
    
        
            30
        
    


EL表达式提供initParam隐式对象,用于获取上下文参数,语法:${initParam.参数名}

* 上下文参数encoding: ${initParam.endcoding}
EL表达式练习

            

* 请求参数name的值:${param.name}
* 请求参数address的值:${paramValues.address[0]} | ${paramValues.address[1]}
* 属性number的值:${pageScope.number}
* 属性msg的值:${requestScope.msg}
* 属性username的值:${sessionScope.username}
* 属性onlineCount的值:${applicationScope.onlineCount}
* 员工小明的所有信息:${requestScope.emp1.empId} | ${requestScope.emp1.empName} | ${requestScope.emp1.empGender} | ${requestScope.emp1.empGrade} | ${requestScope.emp1.empDob}
* 员工小花的所有信息:${sessionScope.emp2.empId} | ${sessionScope.emp2.empName} | ${sessionScope.emp2.empGender} | ${sessionScope.emp2.empGrade} | ${sessionScope.emp2.empDob}
* 上下文参数dbusername的值:${initParam.dbusername}
* 上下文参数dbpassword的值:${initParam.dbpassword}
* 属性data的所有元素值:${pageScope.data[0]} | ${pageScope.data[1]} | ${pageScope.data[2]} | ${pageScope.data[3]} | ${pageScope.data[4]}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839525.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号