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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Day19

一.JSP
指令,用于配置JSP页面,导入资源文件
格式
<%@ 指令名 属性名1=属性值1 属性名2=属性值2... %>

1.<%@ page %>
用来设置JSP页面的一些参数,这些参数一般都有默认最优的配置


contentType等同于response.setContentType()
设置响应体的mime类型以及字符集
        设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
import导包
errorPage当前页面发生异常后,会自动跳转到指定的错误页面,一般全局错误配置较为常用


全局错误页面配置,配置在web.xml
<error-page>
    <error-code>404</error-code>
    <location>/500.jsp</location>
</error-page>


isErrorPage标识当前也是是否是错误页面。
true 是,可以使用内置对象exception
false 否。默认值。不可以使用内置对象exception
buffer设置缓冲区大小
extends继承一个类,但是只能继承HttpServlet的子类
session表示Session对象是否可用
true:是,可以使用内置对象exception
false:否。默认值。不可以使用内置对象exception


2.<%@ include %>
页面包含的。导入页面的资源文件,降低了项目的维护成本
<%@include file="top.jsp"%>

3.<%@ taglib %>
导入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:前缀,自定义的
二.注释
html注释
<!-- --> 只能注释html代码片段
jsp注释,推荐使用
<%-- --%> 可以注释所有

三.9大内置对象(面试点)

在jsp页面中不需要创建,直接使用的对象
变量名 真实类型作用
pageContextPageContext域对象,可用于当前页面共享数据,5个域对象中最小的域
还可以获取其他八个内置对象
request  HttpServletRequest域对象,一次请求访问的多个资源(转发)
sessionHttpSession域对象,一次会话的多个请求间
applicationServletContext域对象,所有用户间共享数据,唯一只有一个的对象,服务器开启被创建,服务器闭被销毁
responseHttpServletResponse响应对象
pageObject当前页面(Servlet)的对象,相当于this
outJspWriter输出对象,数据输出到页面上
configServletConfigServlet的配置对象
exceptionThrowable异常对象,声明isErrorPage为true才可以使用


四.MVC开发模式

Model View Controller

Model,模型。JavaBean,DAO
完成具体的业务操作,如:查询数据库,封装对象
View,视图。JSP
只展示数据
Controller,控制器。Servlet
获取用户的输入
调用模型
将数据交给视图进行展示




优点
1. 耦合性低,方便维护,可以利于分工协作
2. 重用性高

缺点
1. 使得项目架构变得复杂,对开发人员要求高

五.EL表达式

Expression Language 表达式语言
作用

执行运算
获取数据
总之用来,替换和简化jsp页面中java代码的编写,执行的语句会输出

语法
${表达式}

注意
JSP默认支持EL表达式,如需忽略EL表达式
        1. 配置JSP中page指令的属性isELIgnored="true" 忽略当前jsp页面中所有的el表达式
2. \${表达式} 忽略当前el表达式,相当于转义符的意思
使用
1.运算符
a) 算术运算符
+ - *  /(也可用div代替)  %(也可用mod代替)
b) 比较运算符
>  <  >=  <=  ==  !=
c) 逻辑运算符
&&(and) ||(or) !(not)
d) 空运算符
empty
not empty
判断字符串,集合,数组对象是否为null或者长度是否为0
格式
        ${empty list} 判断字符串、集合、数组对象是否为null或者长度为0
        ${not empty list} 表示判断字符串、集合、数组对象是否不为null 并且 长度>0

2.获取值
el表达式只能从域对象中获取值

${域名称.键}
从指定域中获取指定键的值
pageScopepageContext
requestScoperequest
sessionScopesession
applicationScopeapplication(ServletContext)

举例
        在request域中存储了name=张三
获取 ${requestScope.name}
以上写法就能在页面输出张三

        注意
        el表达式获取值如果什么都没获取到,不会显示null,而是会显示一个空字符串,不会影响页面的显示效果

${键名}
        表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
        只要保证4个域对象没有重名的键,就可以用这种简化写法.

        用什么名字存进去的就用什么名字取出来再用这个名字调用属性,存进去是什么类型取出来就是什么类型

3.获取对象、List集合、Map集合的值

对象
${域名称.键名.属性名}
本质上会去调用对象的getter方法
一般生产中,可以在代码中制造一个逻辑视图,来实现自己想要表达的格式

List集合
${域名称.键名[索引]}
如果索引越界不会报错,会显示一个空字符串,不会影响页面的显示效果

Map集合
${域名称.键名.key名称}
${域名称.键名["key名称"]}

                 带索引的用[],带属性的用 .属性 (Map的属性就是他的key)

4. 隐式对象
        el表达式中有11个隐式对象
        pageContext
        获取jsp其他八个内置对象
${pageContext.request.contextPath}动态获取虚拟目录


六.JSTL标签
JavaServer Pages Library JSP标准标签库,由Apache组织提供的开源的免费的JSP标签

用于简化和替换JSP页面上的Java代码

使用步骤
导入JSTL相关Jar包
引入标签库:
taglib指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix:前缀,自定义的,一般定义为c
使用标签

常用的JSTL标签
c(前缀名):if            相当于if语句
c(前缀名):choose   相当于switch语句
c(前缀名):foreach  相当于for语句

前缀名:if
        test属性,属性值为boolean表达式,如果为true则显示if标签体内容,如果为false则不显示标签体的内容

一般情况下,test的属性值结合el表达式一起使用
<c:if test="${not empty list}">
    输出
</c:if>
判断list集合是否为空,如不为空则在页面显示标签体内容

         c:if标签没有else情况,想要else情况,只能从条件着手,则可以在定义一个c:if标签


前缀名:choose
        使用choose标签声明                                 相当于switch声明
                         使用when标签做判断                                相当于case
        使用otherwise标签做其他情况的声明        相当于default

注意otherwise标签内没有test标签

<c:choose>
    <c:when test ="${number == 1}">星期1</c:when>
    <c:when test ="${number == 1}">星期1</c:when>
    <c:when test ="${number == 1}">星期1</c:when>
    <c:when test ="${number == 1}">星期1</c:when>
    <c:otherwise>星期1</c:otherwise>
<c:choose>

前缀名:foreach

完成重复操作
begin 开始值
end 结束值
var 临时变量,代表集合中的每一个元素的对象
step 步长

<c:forEach begin="1" end="10" var="i" step="1">

</c:forEach>

便利容器
items 用EL表达式从域对象取出待遍历的集合
var 临时变量,代表集合中的每一个元素的对象
varStatus 循环状态对象
index 容器中元素的索引,从0开始
        count 循环次数,从1开始,和集合的长度是等价的

<c:forEach items="${list}" var="str" varStatus="status">
    ${status.index}---集合中元素的索引  ${status.count}---循环次数
</c:forEach>




七.三层架构
界面层(表示层)
用户看到的界面,用户可以通过界面上的组件和服务器进行交互
业务逻辑层
处理业务逻辑,一些功能,比如注册,登录.最为重要
数据访问层(DAO)
操纵数据存储文件,比如数据库,xml,properties.








0 个回复

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