您现在的位置是:首页 > 日记日记
jsp笔记
薄荷2019-09-21【日记】1人已围观
简介jsp笔记
一、介绍
1.优点:解决了servlet不适合向外响应一个完整的页面,又解决了html无法展示动态数据的问题;
2.内部原理:JSP在第一次访问时,会被翻译成一个servlet,对JSP访问后看到的页面其实就是翻译后的servlet;
没有实现前后端分离:
前后端分离:核心思想:前端html页面通过ajax调用后端的restuful api接口并使用json数据进行交互
二、语法
1.模板元素
定义:直接写在jsp页面的html内容称之为jsp页面的模板元素;模板元素在翻译过来的servlet中被out.write()原样输出到浏览器中;
2.JSP表达式 --取值
常量 : <%="hello"%>
变量 :<%String name="aa"%> //定义变量
<%=name%> //取变量的值
表达式: <%=100+123%>
<%=request.getContextPath()%>
3.JSP脚本片段
<%若干Java语句%>
在翻译过来的servlet中,脚本片段被复制粘贴到对应位置执行
- <% for(int i=0; i<5; i++){ %>
- Hello JSP~~~~~<br/>
- <% } %>
4.JSP注释
格式:<%--JSP注释--%>
5.JSP指令
位置: 可以写在JSP页面的任意位置
格式:<%@ 指令名称 若干属性声明%>
1)page指令 --用来声明当前JSP页面的基本属性
eg1: <%@ page language="java" %> -- 指定当前JSP使用的语言是java
eg2: <%@ page pageEncoding="UTF-8"%> -- 用来通知JSP解析引擎使用指定的编码来翻译JSP
注意:如果想防止JSP乱码,应该要保证JSP文件保存时的编码和pageEncoding指定的编码保持一致
eg3: <%@ page session="true"%> -- 用来指定当前页面是否使用session,如果设置为true,
则翻译过来的servlet中将会有对session对象的引用,于是可以直接在JSP中使用session隐式对象;
但是这将导致一旦访问JSP就会调用request.getSession()方法,可能导致不必要的空间浪费;
如果确定JSP中不需要session可以设为false;
eg4: <%@ page errorPage="filepath"%> -- 为当前JSP页面指定友好错误提示页面,即当前JSP如果抛出了异常,将会跳转到errorPage属性指定的页面。
扩展:JSP提示信息设置
---如果整个WEB应用很多JSP都需要指定错误提示页面,如果挨个为每一个JSP通过errorPage来指定,非常繁琐,所以推荐在web.xml文件中为整个网站的异常统一配置友好错误提示页面,配置如下:
eg5: <%@ page import="..."%> 为JSP翻译后的servlet指定所依赖的jar包
eg1: <%@page import="java.util.Date"%>
2. include 指令 --- 用于实现页面包含的效果
格式: <%@ include file = "head.jsp"%>
3. taglib指令 -- 用于导入tld标签库文件
三、JSP九大隐式对象
1.介绍: 可以在JSP页面直接使用这九大对象
page | this |
request | ServletRequest |
response | ServletResponse |
application | ServletContext |
session | HttpSession |
config | ServletConfig |
exception | 异常信息的对象 |
out | 等价于response.getWriter() |
pageContext |
代表当前JSP页面的运行环境的对象; 可以通过他获取其他八大隐式对象,例如:ageContext.getPage() ; pageContext 是一个域对象, 有生命周期:当访问JSP开始时创建pageConext对象,当访问JSP结束时销毁pageContext对象 作用范围:整个JSP页面 主要功能:在整个JSP页面中实现数据的共享 方法:setAttribute(String name,Object value) ; //添加一个相应的域属性, 例如:request.setAttribute("names",names); //向request域中添加一个属性 getAttribute(String name) ; removeAttribute(String name);//删除该属性 |
2. 域对象的生命周期从大到小:
servetContext > session > request > pageContex
三、JSP标签技术
1、背景:在JSP页面写入大量Java代码会导致JSP页面中的html代码和Java代码混杂,非常混乱;
所以推荐使用标签来代替JSP页面的Java代码 ;
2、EL表达式
优点:可以非常方便的获取数据,可以代替JSP页面中的JSP表达式
基本结构: ${表达式}
作用:只能获取不能设置和遍历
提供了一下功能:
a. 获取常量、变量(其必须存入域中)、表达式的值
- <%
- String name = "tangpeng";
- pageContext.setAttribute("name",name);
- %>
- ${name}
- ${124+123}
b.获取域中的数组或集合的数据
- <%
- String[] names = {"A","B","C"};
- request.setAttribute("names",names);
- %>
- ${name[0]}
- <%
- Map map = new HashMap();
- map.put("name","tang");
- request.setAttribute("map",map);
- %>
- ${map.name}
3、JSTL标签库
(1)在使用JSTL标签库之前,必须在JSP中通过taglib指令引入JSTL标签库;
如果缺少JSTL库相关的jar,需要提前导入jar包 ;
a. 导入JSTL的jar包
直接放在WEB-INF/lib下
b. 引入JSTL库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
常用标签:
(1)<c:set></c:set>
a. 往四大作用域中添加一个域属性
scope属性 用于指定将属性存入哪一个域中,可以取值为:page,request,session,application
- <c:set var="name" value="tangpeng" scope="request"/>
- ${name}
b. 修改四大作用域中已有的属性
如果重复添加相同的属性,值会发生覆盖 ;
- <c:set var="name" value="谈判" scope="page">
- ${name}
c. 修改 作用域中map集合中的属性
target 指定修改域中的哪一个集合 ; property 指定修改域中集合中的一个属性
- <%
- Map map = new HashMap();
- map.put("name","aa");
- map.put("nickname","bb");
- request.setAttribute("map",map);
- %>
-
- <c:set target="${map}" property="name" value="111"/>
- <c:set target="${map}" property="nickname" value="222"/>
- ${map.name}
(2)<c:if></c:if> --构造if...else...语句
test属性用于指定判断的条件
注意: JSTL中没有提供else对应的标签
- <c:if test="${3>5}">步骤1</c:if>
- <c:if test="${6<3}">步骤2</c:if>
- //如果满足条件就执行对应的步骤
(3)<c:forEach></c:forEach> --对集合或数组等元素进行循环遍历或者执行指定次数的循环
item: 指定需要遍历的数组或集合
var: 指定用于接收遍历过程中的元素
begin: 指定循环从哪里开始
end: 指定循环从哪里接收
step: 指定循环是的步长
其他看word笔记
a. 遍历域中的数组
- <%
- String[] name={"a","b","c"};
- pageContext.setAttribute("names",name);
- %>
-
- <c:forEach item="${names}" var="i">
- ${i}
- </c:forEach>
b.遍历域中map集合的元素
- <%
- Map map = new HashMap();
- map.put("name","aa");
- map.put("nickname","bb");
- %>
-
- <c:forEach item="${map}" var="entry">
- ${entry.key} : ${entry.value}
- </c:forEach>
Tags:
上一篇:centos 安装typecho