1.JSP
1.Java Server Page:java服务页面,能够书写java代码的html
2.通过idea部署的web文件--->默认jsp文件存储路径:C:\Users\Administrator\.IntelliJIdea2019.1\system\tomcat\Tomcat_8_5_66_Web1\work\Catalina\localhost\Web1_war_exploded\org\apache\jsp
3.经历两个阶段:
翻译阶段:需要被web容器解析
将当前项目下的jsp文件转换为java文件
xxx.jsp--->xxx_jsp.java文件
编译阶段:将java文件转换为xxx_jsp.class文件(反射的方式)--->调用里面业务方法_jspService(请求对象,响应对象){
输出对象out.write("标签");
}
4.生命周期:
void _jspInit()
void _jspService(请求对象,响应对象)
void _jspDestory()
5.本质:就是一个Servlet
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
导入tomcat解压目录lib目录的jasper.jar
public abstract class HttpJasBase extends HttpServlet
6.注释:
jsp的注释不会被web解析,而html注释在jsp是可以解析的
7.执行流程
8.三大内置指令:page指令,include指令,taglib指令(jstl中)
9.九大内置对象
10.el表达式和JavaBean规范
三大内置指令:
page指令:<%@ page 属性名="属性值"%>
默认属性
contentType:页面的编码格式
language:只用java语言
isELIgnored:是否启用el表达式
buffer:默认缓冲区大小8KB
errorPage:错误页面,jsp页面出现异常
isErrorPage:当前页面是否为错误页面,如果是,true
extends:可以继承任意类型类
include指令:
静态导入指令,将公共的jsp页面抽取出来,让其他jsp把公共的jsp页面导入进来
<%@include file="jsp文件" %>:被静态导入的jsp文件,不会单独翻译和和编译,节省内存.实际将被导入的页面的内容写入当前页面
taglib指令:
九大内置对象:
四个域对象:
PageContext pageContext对象:当前jsp页面有效
HttpServletRequest request:一次请求中有效
HttpSession session:一次会话中有效
ServletContext application:整个web工程中
五个普通对象:
ServletConfig config配置对象
JspWriter(继承自Writer,字符输出流) out:可以向浏览器输出内容,例如:out.write();
Object page:代表当前jsp对象
Throwable t:异常对象--->exception/error
HttpServletResponse response:响应对象
1.JaveBean是一种规范:
是一个具体类
提供私有字段
提供访问方法setXXX()和getXXX()
2.el表达式引入:
1).el表达式的内置对象必须在${}里面去使用
域对象:
pageScope --->本质就是Map<String,对应的内容>
requestScope
SesstionScope
applicatScope
从域对象中获取数据:${域对象.属性},自动搜索,将前面的域对象省略了 2).
(1)${ }:代替jsp输出表达式
(2)javabean导航${对象名.bean属性}-->就是去掉get,首字母小写
(3)list存储String类型:获取list集合,${list[角标]}
list存储实体类:${userList[0].bean属性}
(4)Map存储两个String类型:
通过key取value:${map["key值"]}/${map.key值}
存储实体类型:${map.key.bean属性}
2.Jsp的jstl(核心标签库)
1.需要到入jstl.jar包(核心包)
core:核心库
functions:函数库
sql:sql库
fmt:格式库
2.在jsp中使用这些核心标签,使用taglib指令
<%@taglib prefix="c" uri="http://xxx/jsp/jstl/core"%>
3.使用c标签:
test属性,true或者false
java中的运算符也可以使用
内置关键字:empty/not empty-->空/不为空
(1)<c:if test="${条件}">
内容
</c:if>:没有c:else标签
(2)<c:chose>
<c:when test="true/false">
</c:when>
<c:otherwise>
内容
</c:otherwise>
</c:chose>
(3)
第一种方式特殊用法:
items:从域对象中获取集合或者数组的数据
var:循环中的变量名
varStatus:循环中变量状态
他的属性值.固有属性(index):索引值从0开始
他的属性值.count:序号从一开始
<c:forEach items="${集合名称}" var="my" varStatus="status">
${status.index} - ${my}输出为从0开始的索引值以及对应的值
${status.count} - ${my}输出为从1开始的序号以及对应的值
</c:forEach>
第二种方式普通用法:
begin:角标的起始位置,默认从0开始
end:默认角标到末位置
var:循环中的变量
step:步长语句,默认自增一
<c:forEach begain="0" end="10" var="i" step="">
内容
</c:forEach>
3.BootStrap(前端框架:主要是响应式布局)
1.bootstrap:建立于jquery之上
bootstrap框架就是一种提供给用户的一种响应式框架,随着浏览器的视口不断变化,网页自适应
三个文件夹:/css,/js,/fonts
2.(1)导入css文件:
<link href="css/bootstrap.min.css" rel="stylesheet">
(2)导入jquery的js库
<script src="js/jquery-3.4.1.min.js"></script>
(3)导入bootstrap的js库
<script src="js/bootstrap.min.js"></script>
详情见bootstrap官网
3.1布局容器
布局容器(在盒子标签内的属性)
class = "container":固定宽度并支持响应式布局的容器
class = "container-fluid":用于100%宽度,占据全部视口的容器
3.2栅格系统
进行具体布局的块的分析,一行12列
1.class="row":指定每一行
2.指定每一列:class="col-设备编号-占的列数"
设备编号:xs超小屏幕
sm小屏幕
md中等屏幕
lg大屏幕
3.class="list-inline":指定在同一行
3.3全局表格样式
1.加入bootstrap的css样式:
表格基本样式:class="table"
条纹状表格:class="table-striped"
给单元格加入边框:class="table-bordered"
移动到每一行给做出的选中响应状态:class="table-hover"
紧缩表格:class="table-condensed"
2.响应式表格
class="table-responsive",随着分辨率的改变,自适应
3.4表单样式
1.水平排列的表单
class="form-control":默认设置宽度属性为100%
<form class="form-horziontal"></form>:指定水平排列的表单
class="form-group":将input标签,select标签和label包裹起来,形成一行的组件
3.5图片样式
为图片添加响应式:class="img-responsive"
指定四角圆角:class="img-rounded"
设置为圆的图片:class="img-cicle"
相框格式:class="img-thumbnail"
3.6按钮
官网
3.7组件
1.按钮组:class="btn-group"
单按钮下拉菜单:class="dropdown-menu"
2.导航条
3.轮播图插件
4.分页 day50
实例见:web_product