A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 森111 中级黑马   /  2018-12-29 15:10  /  866 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2019-1-4 09:13 编辑

JSPJSP入门
概念
  • Java Server Page: java服务器端页面

可以理解为:一个特殊的页面,既可以定义HTML标签,又可以写java代码
  • 用于简化书写

原理
  • !!!!JSP本质就是一个Servlet
  • 1.服务器解析请求消息,找是否有index.jsp资源
  • 2.如果找到了,会将jsp转化为一个.java文件
  • 3.编译为.class文件并执行

JSP脚本
  • 1.<%  代码 %>

定义的Java代码,在jsp转换后在service方法中.
  • 2.<%! 代码 %>

定义的Java代码,在jsp转换后的java类的成员位置
例:
<%! i = 3 %>
  • 3.<%= 代码 %>

定义的Java代码,会输出到页面上.
例:
<%= i %>
JSP指令
  • 作用
  • 用于配置JSP页面,导入资源文件
  • 格式

<%@ 指令名称 属性名1=属性值 %>
  • 分类
  • 1.page    : 配置JSP页面
  • 2.include : 页面包含的,导入页面的资源文件
  • 3.taglib  : 导入资源
  • page
  • 常见属性

- 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指令(了解)
  • 用来导入通用的页面

<%@include file="top.jsp" %>
  • taglib
  • 导入标签库

- 1).prefix:前缀
- 2).url::统一资源定位符
<%@taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
JSP注释
  • html注释
  • html注释只能注释html代码片段

<!-- 内容 -->
  • jsp注释
  • 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.M:Model,模型  (JavaBean)      

完成具体的业务操作,如:查询数据库,封装对象
  • 2.V:View,视图   (JSP)      

展示数据
  • 3.C:Controller,控制器 (Servlet)

1).获取用户的输入
2).调用模型
3).将数据交给视图来进行展示
MVC的优缺点
  • 优点

1).耦合性低,方便维护,可以利于分工协作
2).重用性高
EL表达式
  • 概念
  • Expression Language 表达式语言
  • 作用:替换和简化Jsp页面中java代码的编写
  • 语法:${表达式}
  • 注意

jsp默认支持EL表达式
EL表达式的忽略方法
1).忽略单个EL表达式\${}
2).设置jsp中page指令:isELIgnored="true"
  • EL表达式的使用
  • 运算

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.对象.属性!这里不是变量而是属性!!
  • 隐式对象
  • 11个隐式对象
  • ==pageContext==

获取jsp其他八个内置对象
${pageContext.request}
例:动态获取虚拟目录
${pageContext.request.contextPath}
JSTL概念
  • JavaServer Pages Tag Library JSP标准标签库

是由Apache组织提供的开源的免费的jsp标签
  • 作用:用于简化和替换jsp页面上的java代码
  • 使用步骤

1.导入jar包
2.引入标签库:<%@taglib %>
3.使用标签
常用的JSTL标签
  • if 标签
  • 相当于java代码的if语句

1).c:if属性:
   *test: 必须属性,接收boolean表达式,如果为true,则显示if标签体的内容,否则不显示内容;一般情况下test的属性值会结合EL表达式一起使用
2).c:if标签没有else情况,想要else情况,需要再写一个c:if标签
例:
<c:if test="${number %2 !=0}">
   内容
</c:if>
  • choose标签
  • 相当于java代码的switch语句

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>
  • ==foreach标签==
  • 相当于java代码的for循环

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>

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马