javaee之jsp、EL表达式、JSTL标签库

jsp:一个可以存放java与html混写的文件

从某种层面来说,它实际就是一个servlet

因此servlet里面能定义获取的,他也可以用,只不过方式不一样。

java在我们访问一个jsp的时候,会自动把jsp文件编译一个带有service方法的java文件。这个文件存放在IDE给我们配置项目的缓存目录里面,在work目录下面。work就是在我们的工作的过程中产生的文件

javaee之jsp、EL表达式、JSTL标签库_第1张图片

顺便看一个文件看看

 

javaee之jsp、EL表达式、JSTL标签库_第2张图片

很明显可以看到,内部也是给我们转化了servelt文件,然后给我们编译了一个service方法,然后把我们需要的东西放进去了。·

下面说一下JSP定义代码的方式:

 javaee之jsp、EL表达式、JSTL标签库_第3张图片

 话不多说,直接上代码:

demo1.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/3/18
  Time: 12:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    <%
        int i = 3;//这里就是定义到service里面的变量
    %>
    <%!
        int i =10;//这个就是转换后java文件的成员位置上面
    %>
    <%=
        i//这里就会把上面定义的i变量直接输出到浏览器,这里会打印3,就近原则,其实这里
    //这是在service方法里面执行
    %>


上面运行一下

这里会打印3,直接看一下转换后的源文件

javaee之jsp、EL表达式、JSTL标签库_第4张图片

javaee之jsp、EL表达式、JSTL标签库_第5张图片

上面可以看到i=10这个变量,被定义成了一个类的成员属性

javaee之jsp、EL表达式、JSTL标签库_第6张图片

 上面i=3就把它定义到service方法里面,并且在service方法里面打印了数据。

我们还可以调用内部的内置对象 

javaee之jsp、EL表达式、JSTL标签库_第7张图片

下面来说九个jsp内置对象

javaee之jsp、EL表达式、JSTL标签库_第8张图片

下面简单来说一下mvc开发模式:一种开发软件的方法

javaee之jsp、EL表达式、JSTL标签库_第9张图片

下面来说一下EL表达式,这玩意就是用在jsp页面,用来简化java代码页面编写 ,他不用放到<% %>这个里面

javaee之jsp、EL表达式、JSTL标签库_第10张图片

下面简单说一下EL表达式中的隐式对象:

EL有十几个隐式对象,就像上面四种,我们这里重点说一下pageContext隐式域,他可以获取JSP其他八个内置对象

${pageContext.request.contextPath}:动态获取虚拟目录

这里面request对象,里面有一个getContextPath()方法,所以可以通过.contextPath来获取虚拟目录

那么我们换句话说,我们获取虚拟目录可以这样${requestScope.contextPath},这样是不可以的啊

说一下这两者的区别,先看一下打印信息

一个打印的是这个域对象的地址,一个只是获取到这个域设置的值 ,这个只是给我们返回一个相应对象数据的map集合,里面存放了我们的数据而已。

说说EL表达式的具体用法

先来说一下利用对象的get方法获取值得问题

javaee之jsp、EL表达式、JSTL标签库_第11张图片

 javaee之jsp、EL表达式、JSTL标签库_第12张图片

再来说一下,从服务器端获取值的问题

先来看服务器端代码

@WebServlet("/servletDemo2")
public class ServletDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
        //带一个对象过去
        User user  = new User();
        user.setAge(23);
        user.setHeight(178);
        user.setName("张三");

        //创建一list集合数据
        List list1 = new ArrayList();
        list1.add("周杰伦");
        list1.add("林俊杰");

        //创建一个Map集合数据
        Map map1 = new HashMap();
        map1.put("01","haha");
        map1.put("02","hehe");
        //添加两个集合进去
        request.setAttribute("list1",list1);
        request.setAttribute("map1",map1);

        request.setAttribute("user",user);
        request.setAttribute("color","red");
        request.setAttribute("waist",89.78);

        //利用servletContext对象来设置属性
       ServletContext servletContext =  request.getServletContext();
       servletContext.setAttribute("color","blue");
        //这里我们在来弄个域,这个是全局域

        //页面内转发,地址栏不变
        request.getRequestDispatcher( "/test1.jsp").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
        this.doPost(request, response);
    }
}

 一般取值就是直接如下

javaee之jsp、EL表达式、JSTL标签库_第13张图片

当然了,我们还可以按照如下方式取值

javaee之jsp、EL表达式、JSTL标签库_第14张图片

另外还可以采用jsp<%%>的方式来获取

javaee之jsp、EL表达式、JSTL标签库_第15张图片

但是一般获取某个数据还是采用EL表达式的写法来做。但是如果在一个服务器页面中,同时存在两个相同的属性,比如下面

 那如果你是采用如下方式获取color

 

他就从pageContext->request->session->servletContext->response从小到大的域开始寻找,很明显就是先获取的request域的color,如果想要获取servletContext中的color,就按照如下方式

指定某个域的某个具体的属性值

主要是获取服务器端传过来的数据。上面说了比如获取某个之前已经设定好的方法

下面来说一下JSTL标签

javaee之jsp、EL表达式、JSTL标签库_第16张图片

再来具体说一下foreach标签:

javaee之jsp、EL表达式、JSTL标签库_第17张图片

话不多说,上个代码

<%@ page import="domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


    Title


<%
    List list = new ArrayList();
    list.add(new User("tom",25,new Date()));
    list.add(new User("tonny",28,new Date()));
    list.add(new User("jack",35,new Date()));

    //在request域中
    request.setAttribute("list",list);
%>

        
            
            
编号 姓名 性别 生日
${s.count} ${user.age} ${user.name} ${user.birday}
${s.count} ${user.age} ${user.name} ${user.birday}

你可能感兴趣的:(javaee,java-ee,java,EL,JSTL)