jsp---EL表达式及servlet

1、EL表达式

EL 全名为Expression Language,翻译成中文表达式语言
语法:${标识符}
作用就是输出标识符的所代表的值。
el出现目的:代替<%= %>,代替out.print();
常用功能:
获取各种域(各种数据范围,servletContext(全局的),request(一次请求)中存储的数据
request.setAttribute(“name” ,value);
${ requestScope.name}

<%=request.getAttribute(“name”);>等价于 ${requestScope.name}从request这个对象中去取出数据。

优点:如果el表达式没有取到值,不会显示,可以理解为输出空的字符串
而request/context .getAttribute() 如果取不到值,得不到的是null,会输出null

过程图及servlet生命周期

在这里插入图片描述
servlet生命周期:

1.容器会创建servlet的实例,调用init方法进行初始化 ;
2.容器调用service方法接收请求,判断是get请求还是post请求,如果是get请求,转发到doGet方法,如果post请求,转发到doPost方法;
3.调用doGet doPost方法处理请求;
4.响应给客户端浏览器;
5.如果服务关闭,会调用destroy方法销毁servet实例;

init senvice destroy这三个方法,称为生命周期方法;
init和destroy只执行一次,service可以执行多次;

el作用:

EL主要作用:
1、获取数据:最常用的是从4个域对象获取数据 (page,request,session,application(servletContext))。
EL表达式主要用于替换JSP页面中的脚本表达式<%= %>,以从各种类型的web域中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
主要替换<%= %>

2、执行运算:
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}

3、获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

4、调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

2、配置servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">


    <!--配置servlet-->
    <servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>com.hisoft.web.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UserServlet</servlet-name>
        <url-pattern>/user.do</url-pattern>
    </servlet-mapping>
    
</web-app>

3、servlet 继承HttpServlet(重写的方法)

public class UserServlet extends HttpServlet {

    /**
     * 接收客户端请求,判断是get请求还是post请求,如果是get请求,则转发到doGet()方法,如果是post请求,转发到doPost()方法
     *
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.service(req, resp);
        System.out.println("service........");
    }


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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("init...");
    }

    /*关闭*/
    @Override
    public void destroy() {
        super.destroy();
        System.out.println("destory.......");
    }

}

4、简单登录例子

servlet内容

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //解决乱码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        //获取表单name属性值为username的value值
        String username = request.getParameter("username");
        //获取表单name属性值为password的value值
        String password = request.getParameter("password");

        UserService userService = new UserService();
        User user = null;
        try {
            user = userService.login(username, password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        //登录成功与否
        if(user != null){
            request.setAttribute("user",username);
            request.getRequestDispatcher("success.jsp").forward(request,response);//成功界面
        }else{
            request.getRequestDispatcher("index.jsp").forward(request,response);//返回主页面
        }
    }

jsp内容

登录:
<form action="user.do" method="post">
    用户名:
    <input type="text" name="username"/><br>
    密码:
    <input type="password" name="password"/><br>
    <input type="submit" value="登录"/>
</form>

5、el获取数据–从各个域对象中

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。
替代掉<%= %>

(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

如果数据是null,把null输出给用户,用户不会理解null是什么意思。所以使用el表达式输出的空字符。

域对象是可以省略的。省略的时候,会自动从page,request,session,application去查询数据。

<%
    pageContext.setAttribute("name","张三",pageContext.REQUEST_SCOPE);
    pageContext.setAttribute("name","page");
    request.setAttribute("name","request");
    session.setAttribute("name","session");
    application.setAttribute("name","application");
%>

page name:${pageScope.name}<br>
request name:${requestScope.name}<br>
session name:${sessionScope.name}<br>
application name:${applicationScope.name}<br>

省略隐含对象:${name}<br> (按从小到大范围获取)

6、简单运算

算数运算:${1+1}<br>

关系运算1>2:${1 gt 2}<br>
关系运算1>=2:${1 ge 2}<br>
关系运算1<2:${1 lt 2}<br>
关系运算1<=2:${1 le 2}<br>
5!=5:${5 ne 5}; //false

逻辑运算1==2||2==2:${1 eq 2 and 2 eq 2}<br>
逻辑运算1==2&&2==2:${1 eq 2 or 2 eq 2}<br>

非空判断:${not empty user}<br>
空值判断:${empty list}<br>
//(空字符串,空的集合也是空的)

7、获取复杂数据

数组、list集合、map集合

<%
    int[] ages = {21,20,18,16,24};
    request.setAttribute("ages",ages);

    List list = new ArrayList<>();
    list.add("hello world");
    list.add("java");
    list.add("mysql");
    list.add("jsp");
    request.setAttribute("list",list);

    Map<String,Integer> map = new HashMap<>();
    map.put("Rose",12);
    map.put("Alex",18);
    map.put("jerry",20);
    map.put("Tom",21);
    map.put("1",12345);
    request.setAttribute("map",map);

%>
ages:${ages[0]},${ages[1]},${ages[2]},${ages[3]};

list:${list[0]}

map:${map};
map的Rose:${map.Rose};
map的1:${map["1"]};

el的中括号与点的区别

如果属性或者key出现了特殊字符。使用对象.属性名的时候,就会找不到数据。可以使用 [ ]进行替代;
把属性或者key放到中括号中加上双引号引起来,可以取出数据。

map的Rose:${map.Rose}; //获取Rose对应的值
map的1:${map["1"]}; //获取1对应的值

el常用web对象使用–(隐含对象)

获取web开发常用对象 记忆的时候,记住四个域对象。
在这里插入图片描述
EL表达式语言中定义了11个隐含对象,我们可以直接使用这些对象。被el预定好了,可以直接使用,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
在这里插入图片描述

param:

pageContext:${pageContext};
page:${pageContext.request.contextPath}; //上级路径

username:${param.username}
password:${param.password}

pageContext:org.apache.jasper.runtime.PageContextImpl@45ade79e;
page:/jsp01_war_exploded;

headers:${header.host}<br>
cookie:${cookie.JSESSIONID}<br>
initParam:${initParam.name}<br>

web.xml初始化:

    <!--初始化-->
    <context-param>
        <param-name>name</param-name>
        <param-value>张三</param-value>
    </context-param>

headers:localhost:8080
cookie:javax.servlet.http.Cookie@14a982c
initParam:张三

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单眼皮女孩i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值