黑马程序员技术交流社区

标题: 【石家庄校区】JSP&&MVC&&EL&&JSTL [打印本页]

作者: 森111    时间: 2018-12-29 15:10
标题: 【石家庄校区】JSP&&MVC&&EL&&JSTL
本帖最后由 小石姐姐 于 2019-1-4 09:13 编辑

JSPJSP入门
概念
可以理解为:一个特殊的页面,既可以定义HTML标签,又可以写java代码
原理
JSP脚本
定义的Java代码,在jsp转换后在service方法中.定义的Java代码,在jsp转换后的java类的成员位置
例:
<%! i = 3 %>定义的Java代码,会输出到页面上.
例:
<%= i %>
JSP指令
<%@ 指令名称 属性名1=属性值 %>- 1).contentType:等同于response.setContentType
   *设置响应头的MIME及字符集
   *设置当前的jsp页面的编码(只能是高级的IDE才能生效,如果是低级的工具,则需要设置pageEncoding属性)
- 2).language="java"
- 3).buffer 缓冲区的大小
- 4).import 导包(最好一个包一行)
- 5).erroPage:当页面发生异常后,会自动跳转到指定的错误页面
- 6).isErroPage:标识当前的页面是否是错误页面,如果当前页面的isErroPage是true则可以
   true:可以使用内置对象exception,用来获取错误日志
   false:默认值,不可以使用内置对象exception
例:
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=utf-8" errorPage="500.jsp" isErroPage="false" pageEncoding="utf-8" language="java" %><%@include file="top.jsp" %>- 1).prefix:前缀
- 2).url::统一资源定位符
<%@taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
JSP注释
<!-- 内容 --><%-- 内容 --%>
JSP内置对象
在jsp页面中不需要创建,直接使用的对象,一共有9个
[td]
变量名
真实类型
作用
<center>pageContext
<center>PageContext
当前页面数据共享,还可以获取其他8个对象
<center>session
<center>HttpSession
一次会话的多个请求间共享数据
<center>application
<center>ServletContext
所有用户间共享数据
<center>request
<center>HttpServletRequest
一次请求访问的多个资源(转发)
<center>response
<center>HttpServletResponse
响应对象
<center>page
<center>Object
当前页面(Servlet)的对象 相当于this
<center>out
<center>JspWriter
输出对象,数据输出到页面上
<center>config
<center>ServletConfig
Servlet配置对象
<center>exception
<center>Throwable</center>
异常对象

out和response.getWriter()的区别
1)out.write()定义在哪里就会在哪里输出
2)response.getWriter().write()总会在out.print()之前输出
!!!tomcat在输出的时候会先找response的缓冲区,再去找out的缓冲区数据,建议在jsp中不要用response.getWriter().write()

MVC开发思想MVC详解
完成具体的业务操作,如:查询数据库,封装对象展示数据1).获取用户的输入
2).调用模型
3).将数据交给视图来进行展示
MVC的优缺点1).耦合性低,方便维护,可以利于分工协作
2).重用性高
EL表达式
jsp默认支持EL表达式
EL表达式的忽略方法
1).忽略单个EL表达式\${}
2).设置jsp中page指令:isELIgnored="true"1).算数运算符
   + - * /(div)  %(mod)
   ${3 / 4} 等同于  ${3 div 4}
   ${4 % 3} 等同于  ${4 mod 4}
2).比较运算符
3).逻辑云算符
   &&(and) ||(or) !(not)
4).空运算符 empty
   用于判断字符串、集合、数组对象是否为null并且长度是否为0
   ${empty list}
   ${not empty str}1).EL表达式只能从域对象中获取值
2).语法
  * ${域名称.键名}:从制定域中获取制定键的值
    **域名称
      pageScope  -->  pageContext
      requestScope -->  request
      sessionScope --> session
      applicationScope --> application(ServletContext)
  如果获取不到值,则$返回空字符串(注意不是null)

  * ii ${键名}(常用):表示依次从最小域中查找是否有该键对应的值,直到找到为止
==获取值的类型==
[td]
值的类型
获取表达式
<center>基本类型
<center>${键}
<center>对象
<center>${键.属性}
<center>数组
<center>${键[index]}
<center>List
<center>${键[index]}
<center>Map
<center>${键.map键}

注意:
1.如果索引越界,则显示一个空字符串
2.真正开发中EL表达式配合JSTL使用来获取集合,因为不知道list的长度
3.对象.属性!这里不是变量而是属性!!获取jsp其他八个内置对象
${pageContext.request}
例:动态获取虚拟目录
${pageContext.request.contextPath}
JSTL概念
是由Apache组织提供的开源的免费的jsp标签1.导入jar包
2.引入标签库:<%@taglib %>
3.使用标签
常用的JSTL标签
1).c:if属性:
   *test: 必须属性,接收boolean表达式,如果为true,则显示if标签体的内容,否则不显示内容;一般情况下test的属性值会结合EL表达式一起使用
2).c:if标签没有else情况,想要else情况,需要再写一个c:if标签
例:
<c:if test="${number %2 !=0}">
   内容
</c:if>1).使用chose标签作为 switch
2).使用when标签做判断作为case
3).使用otherwise标签作为default
例:
  <c:choose>
    <c:when test="${number == 1}>星期1</c:when>
    <c:when test="${number == 2}>星期2</c:when>
    <c:when test="${number == 3}>星期3</c:when>
    <c:when test="${number == 4}>星期4</c:when>
    <c:when test="${number == 5}>星期5</c:when>
    <c:when test="${number == 6}>星期6</c:when>
    <c:when test="${number == 7}>星期7</c:when>
    <c:otherwise>输入有误</c:otherwise>
</c:choose>1).完成重复操作
*属性
  began:开始值
  end:结束值
  var:临时变量
  step:步长
  varStatus:循环状态对象
     index:容器中元素的索引,从0开始
     count:循环次数,从1开始
2).遍历容器
*属性
  items:容器对象
  var:容器中元素的临时变量
  varStatus:循环状态对象
     index:容器中元素的索引,从0开始
     count:循环次数,从1开始
例:遍历list集合List<User> list
<%
List list= new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list",list)
%>
<c:foreach items="${list}" var="str" varStatus="s">
  ${s.index}  ${s.count} ${str}
</c:foreach>






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2