JSP(Java Server Pages)

JSP

        在Servlet的基础上推出的一种技术,将Java代码和HTML语句混合在同一个文件中编写

        HTML语句(输出静态部分)和Java代码(输出动态部分)组成的文件,其后缀名.JSP

        Servlet适合:请求响应        JSP适合:展示数据

JSP语法说明

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%--fmt 他是format的缩写。就专门用于格式化的,除了格式化日期时间,还可以格式化其他的--%>


    JSP的语法




<%--这是jsp的注释--%>


   语法: <%写java代码%>
   特别说明: 实际开发中不让写……


   作用:获取到内容之后,输出到浏览器上
   语法:<%=此处写输出内容的获取代码,注意,只能是获取,而且不要以分号结束%>
   特别说明:实际开发中不让写……


    他就是用于展示数据的。因为支持html的全部语法,所以,他可以像html一样进行布局(例如:表格)
    同时,可以使用样式来控制显示效果。

    只是获取数据用java代码写不好,因为遇到条件判断,遍历循环,那么此时多个括号嵌套,会崩溃。
    因此要借助el表达式获取数据,这个el表达式才是jsp的标准获取数据的语法。

 EL表达式

        EL(Expression Language)表达式语言,主要用来简化jsp中对Java代码的操作,它可以从JSP的域对象中获取数据:${表达式}

JavaWeb中四大域对象:

        page:         当前页面有效

        request:     当前请求有效

        session:     当前会话有效

        application:当前应用有效

获取数据的位置:

        只能从4个共享区域中获取。如果没有存入,那么也就取不出来。

四个共享区域:

        页面范围 : 只能在当前页面中共享,出了当前页面就没用了

                        最小。太小了,开发中很少用
       请求范围 : 只能是一次请求或者请求转发中共享。

                        如果多次请求之间,就无法共享了。     最常用的共享区域。
       会话范围 : 一次会话返回之内共享。多次会话,也不能共享

                        比较常用的共享区域。
       应用范围 : 在整个应用中共享,所有人共用同一个共享区域。

                        最大。太大了,由于所有人共用提供一个,这时要注意线程安全问题。

域的选择:

        如果存入共享区域之后,就很少改动,且所有访问当前应用的用户都需要用到共享数据,那么选择应用域。(应用范围)
       如果共享的数据是需要多次请求使用,那么应该选择 会话域(会话范围)
       如果共享的数据只是一次请求或请求转发时使用,那么应该选择 请求域(请求范围)

* 获取精准域中数据
	${requestScope.键名}       从HttpServletRequest域中获取
	${sessionScope.键名}       从HttpSession域中获取

* 简化写法
	${键名}   按照上面的域范围从小到大依次从四个域中进行查找;如果从某一个域中找到了,立即返回;如果四个域中都没有,则返回空

语法:

    例如:
    request.setAttribute("name","aaa");
    获取时:
    ${name}

获取数据的细节:
    如果四个范围都有相同名称的数据时,他是按照由小到大的范围逐个查找,只要在一个范围内找到了就返回,不再继续查找。
    page ——> request ——> session ——> application


<%
    /**
     *  EL表达式支持获取的数据:
     *      1.基本类型和String
     *      2.实体类类型
     *      3.List集合类型
     *      4.Map集合类型
     *      5.混合嵌套类型
     */
    Address address = new Address("北京","昌平");
    User user = new User("老王","男",20,new Date(),address);
    //把他存入四个范围之一
    request.setAttribute("user",user);

    List users = new ArrayList<>();
    User u1 = new User("老王1","男",20,new Date(),address);
    User u2 = new User("老王2","男",20,new Date(),address);
    User u3 = new User("老王3","男",20,new Date(),address);
    users.add(u1);
    users.add(u2);
    users.add(u3);
    request.setAttribute("users",users);

    Map map = new HashMap<>();
    map.put("user1",u1);
    map.put("user2",u2);
    map.put("user3",u3);
    //存入共享区域
    request.setAttribute("userMap",map);
%>
1.获取实体类类型数据,可以通过.属性名称方式获取具体数据的值
${user.username}${user.gender}

2.获取实体类类型数据,关联实体类的数据
${user.address.provinceName}

3.获取List集合中的数据
${users[1].address.cityName}

4.获取Map集合中的数据
${userMap['user1'].address}

JSTL表达式

        JSTL (Jsp Standard Tag Library)Jsp标准标签库,是一套由Apache组织开源的jsp标签库,用来替换和简化jsp页面中java代码。

导入依赖


    jstl
    jstl
    1.2

if标签

* if标签用于单分支条件判断,相当于Java中的`if(条件){}`的用法,它的常见用法如下:
    
    	条件成立的逻辑
    
* 注意: 它只有if的功能,没有else的功能,如果需要else,需要自己取反操作  

forEach标签

* forEach用于循环遍历,相当于java中的for关键字,它的常见属性如下:
	begin:设置循环的开始
	end:设置循环的结束
	step:设置步长——间隔几次循环,执行一次循环体中的内
	var:声明循环过过程中的临时遍历
	items:指定要循环的对象
	varStatus:保存了当前循环过程中的信息(循环的开始、结束、步长、次数等)
* forEach标签的主要用法有下面两种:
	1.  增强for循环
		
            ${x}
		
	
	2.  普通for循环
		
            ${x}
		

你可能感兴趣的:(JavaWeb,jsp)