美文网首页
05_JSP&EL&JSTL&MVC

05_JSP&EL&JSTL&MVC

作者: 渐进逾 | 来源:发表于2019-09-29 18:29 被阅读0次

JSP

1.jsp介绍

jsp全称Java server Pages , java的服务页面. 。既可以写java代码又可以写html等前端代码,都有智能提示,开发效率高。
JSP=HTML + JAVA

对比: image.png

2.JSP运行原理——


image.png

只有jsp文件被修改了才会在访问的时候将其翻译生成java文件

3.脚本代码3种方式

脚本代码片段 image.png

代码片段生成的位置:翻译成java文件在service处理请求方法内部

脚本表达式 image.png

代码片段生成的位置:翻译成java文件在service处理请求方法内部

脚本声明 image.png

代码片段生成的位置:翻译成java文件在service处理请求方法外部

总结:


image.png

4.三大指令

page:页面指令 image.png

taglib:标签库指令
作用:用于导入标签库,在页面上使用
格式:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

include:包含另一个页面指令
语法:

<%@include file="URL" %> 指定要导入的地址

5.jsp的动作标签
include,forword,param

include——
作用:用于一个jsp页面动态包含另一个jsp页面

语法:

<jsp:include page="URL"/> URL是被包含的JSP页面
include动作与include指令的区别 image.png

forward——
作用:用于页面的转发,与

request.getRequestDispatcher("/URL").forword(request,response);

语法:

<jsp:forword page="URL"/> 转发

param
作用:用于页面的转发跳转的时候传递参数数据,经常与<jsp:forward>配合使用

语法:

<jsp:param name="参数名" value="参数值"/>

EL表达式

(使用el代替页面上的脚本表达式,简化输出)

格式

Expression Language;
${域里面的key脚本表达式}

作用:
1.从域里面获取数据进展示
2.可以使用运算符表达式
△(简化输出,代替脚本表达式)

以后servlet从数据库获取的数据放到域对象中,jsp使用el技术从域里面获取数据显示

JSP四大内置域对象——

pageContext,页面域
在一个页面内(一个资源内)有效,一个servlet内,不能实现资源之间传递数据的

request,请求域
一次请求内有效,适合转发传递数据

session
会话域,一次会话内有效,应用场景存储验证码和用户登录数据

servletContext(application别名)
上下文域,整个应用程序有效,存储的数据所有用户共享,应用场景统计某个资源访问量等等

pageContext相关方法:

页面域独有方法:

Object findAttribute(String key)

自动从四个作用域中去查某个键,从小到大的范围来查找,如果找到就停止。如果没有找到,返回null
作用:jsp的内置页面域对象,在一个页面内数据共享

EL作用1-获取指定域对象里面的数据
<p>pageContext的域数据:${pageScope.one}</p>

4个域对象里获取数据


image.png
获取域中不同类型的数据

1.el获取域里面常用类型的数据(javaBean,Map,数组,List)
2.数据一定要存储在域里面,el就可以获取

el作用2-el中使用运算符表达式

算术表达式:


image.png

比较表达式:


image.png

逻辑表达式:


image.png

JSTL核心标签库

Java Standard Tag Library Java标准标签库,apache开源组织开发的

如何在jsp页面上使用jstl标签?

1.导入jstl的jar包
2.在jsp页面上使用taglib资料导入标准标签库

jstl常用标签1-if和choose分支标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>if标签【重点】</h2>
<%--
    作用:用于条件判断,相当于java代码if语句块
    格式:<c:if test="${ 条件 }">
               符合条件允许的代码
          </c:if>
    需求:往session域里面写入登录数据,使用if标签判断是否有登录数据,显示不同的信息
--%>
<%
    //写入登录数据到session
    session.setAttribute("loginUser","admin");
%>
<%--jsp页面使用if判断是否登录--%>
<c:if test="${empty loginUser}">
    <p>请登录。。。</p>
</c:if>
<c:if test="${not empty loginUser}">
    <p>欢迎您${loginUser}登录成功!</p>   <%--结果为这个数据--%>
</c:if>



<h2>choose标签</h2>
<%--
    作用:用于条件判断,相当于java代码if-else的语句块
    格式:<c:choose>
            <c:when test="${ 条件1 }"></c:when>     ---》if
            <c:when test="${ 条件2 }"></c:when>     ---》else if
            <c:otherwise></c:otherwise>             ---》else
        </c:choose>
    需求:往session域里面写入登录数据,使用if标签判断是否有登录数据,显示不同的信息
--%>
<%
    //写入登录数据到session
    session.setAttribute("loginUser",null);
%>
<c:choose>
    <c:when test="${empty loginUser}">
        <p>请登录。。。</p>  <%--结果为这个数据--%>
    </c:when>
    <c:otherwise>
        <p>欢迎您${loginUser}登录成功!</p>
    </c:otherwise>
</c:choose>

</body>
</html>
jstl常用标签2-foreach循环标签
<%@ page import="com.itheima.entity.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>foreach标签</h2>
<%--
    作用:用于循环
    1.次数循环格式:
        <c:forEach begin="开始数字"  end="结束数字" var="循环变量名称,相当于i" step="步长默认为1,循环变量递增值,类似i++">
              循环体代码
        </c:forEach>
    2.List集合、数组循环格式【以后使用最多】:
        <c:forEach items="使用el获取遍历的集合" var="集合的每个元素" varStatus="循环过程信息">
               循环体代码
        </c:forEach>
        varStatus,循环过程信息,在线循环过程中foreach标签将一些数据放入到这个属性中,循环过程信息如下:
            index,循环的索引,从0开始
            count,循环的次数,从1开始
    3.Map循环格式:
        <c:forEach items="使用el获取遍历的Map集合" var="集合的每个元素类似每个entry" varStatus="循环过程信息">
                获取每个元素的key=${entry.key}  获取每个元素的value=${entry.value}
        </c:forEach>
        java代码分析:
                Set<Entry<String,Object>> set= Map.entrySet();
                一个Entry包含着一个键值对
--%>
<h4>1.次数循环</h4>
<%--目标:输出5遍hello world--%>
<c:forEach begin="1"  end="5"  step="1">
    <p>hello world</p>
</c:forEach>

<h4>2.List集合、数组循环</h4>
<%--目标:遍历用户列表集合--%>
<%
    //定义用户列表List集合
    List<User> userList = new ArrayList<>();
    userList.add(new User("张三",20));
    userList.add(new User("李四",22));
    userList.add(new User("王五",23));
    //写入域中
    request.setAttribute("userList",userList);
%>
<c:forEach items="${userList}" var="user" varStatus="status">
    <p>${status.count},${user.username},${user.age}</p>
</c:forEach>

<h4>3.Map循环格式</h4>
<%--目标:遍历用户列表Map集合--%>
<%
    Map<String,User> map = new HashMap<>();
    map.put("zhangsan", new User("张三",20));
    map.put("lisi", new User("李四",22));
    map.put("wangwu", new User("王五",23));
    request.setAttribute("map",map);
%>
<c:forEach items="${map}" var="entry" varStatus="status">
    <p>${status.index},${entry.key},${entry.value.username},${entry.value.age}</p>
</c:forEach>
</body>
</html>

MVC+三层架构开发模式

传统三层架构的问题


image.png

MVC结构


image.png

现代模式:MVC+三层架构模式


image.png

-使用MVC优化传统三层架构-

servlet职责:调用业务获取数据,存储到域,跳转到jsp页面

jsp职责:专门用于展现数据,使用el获取域里面的数据进行展现

相关文章

  • 05_JSP&EL&JSTL&MVC

    JSP 1.jsp介绍 jsp全称Java server Pages , java的服务页面. 。既可以写java...

网友评论

      本文标题:05_JSP&EL&JSTL&MVC

      本文链接:https://www.haomeiwen.com/subject/jnybsctx.html