jsp
本质:servlet
目的:简化页面书写
注释
- 标记语言注释
缺点:
1.会发送到客户端
2.不能写java代码 - jsp 注释
优点:
1.不会发送到客户端
2。能注释java代码
3大指令
- 概念:配置页面属性或者是倒入一些额外的内容
- 格式:<%@ 指令名 属性名=属性值 &>
- 分类:
page:配置jsp页面的属性
include:静态包含
taglib:包含额外的内容
1.page
* page指令:
language :指定jsp页面使用的语言。只有一个值 java
*import :导入软件包
*pageEncoding :设置页面编码
1.指定jsp文件的编码
2.告诉浏览器页面使用的编码格式
autoFlush:自动刷新
buffer:缓冲区大小
*errorPage:指定错误页面,当页面发生异常时,指定跳转的页面
* 一般在开发完成后,会在web.xml中通过<error-page>标签来配置整个项目的错误页面
<error-page>
<error-code>500</error-code>
<!-- <exception-type></exception-type> -->
<location>/500.jsp</location>
</error-page>
<!-- <error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
-->
isErrorPage:是否是错误页面
true:是错误页面,可以使用内置对象exception
false:不是
<%@ page contentType="text/html;charset=utf-8" language="java" pageEncoding="utf-8" import="java.io.FileOutputStream" autoFlush="true" buffer="8kb" errorPage="500.jsp" %>
<%@include file=""%>
1.taglib
导入额外的内容,如:导入jstl标签
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
<%--导入常用的第三方标签库,比如常用的c标签--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.include
- include:静态包含
* 包含后,只会存在一个.class文件。
<%--一个页面会把另一个页面包含进来
静态包含:通过静态代码块把页面包含进来,不会为包含进来的页面单独生成一个java类文件
--%>
<%@include file="index.jsp"%>
6个动作标签
概念:替换java代码,简化书写,提高可读性
签:替换Java代码。简化书写,提高可读性
- JavaBean:一种符合规范的java类
1.私有所有的成员变量
2.提供公共的访问方式 setter 或者 getter
3.提供空参构造
domain
pojo
entity
beans
<jsp:useBean> Person p = new Person()
使用一个ID和一个给定作用范围和同一ID的JavaBean相关联
<jsp:setProperty> p.setName(“zhangsan”)
设置JavaBean的属性值
<jsp:getProperty> String name = p.getName()
取得JavaBean的属性值
<jsp:include> 动态包含
请求时文件包含
* 多个.class字节码文件
<jsp:forward> 转发
接受用户输入并将请求分派给另一页面
<jsp:param> 传递请求参数
<jsp:useBean id="d" class="org.westos.domain.User" >
<jsp:setProperty name="d" property="username"></jsp:setProperty>
<jsp:setProperty name="d" property="password"></jsp:setProperty>
<jsp:getProperty name="d" property="username"></jsp:getProperty>
<jsp:getProperty name="d" property="password"></jsp:getProperty>
</jsp:useBean>
<%--动态包含--%>
<jsp:include page="index.jsp"></jsp:include>
<%--内部转发标签--%>
<%--原来--%>
<%
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request,response);
%>
<%--现在,记住前面的/不要自己加--%>
<jsp:forward page="WEB-INF/index.jsp"></jsp:forward>
9个jsp内置对象
概念:当JSP转换成Servliet时候,9个内置对象全部都初始化好了
分类
application:ServletContext
session:HttpSession
request:HttpServletRequest
pageContext:PageContext
out:JspWriter
response:HttpServletResponse
config:ServletConfig
page:this
exception: Throwable
pageCotext:
- 域对象:页面域
- 获得其他八个内置对象,可以在非jsp环境下使用其他的内置对象.
<%ServletRequest request1 = pageContext.getRequest();
ServletConfig servletConfig = pageContext.getServletConfig();
HttpSession session1 = pageContext.getSession();
pageContext.setAttribute("num", 100);
%>
out和response.getWriter()
在使用对象向页面输出信息时,采用out
EL表达式
概念:
jsp内的一种语法,为了替代脚本,el可以取出来域中的数据
作用
1.获取域中的数据
2.执行运算
3.获取常见的web对象
4.调用java方法
格式
${el表达式}
1.获取域中的数据
${pageScope|requestScope|sessionScope|applicationScope.属性名}
以后经常使用:
${属性名}:依次从pageContext,request,session,application查找指定属性,若查找到返回值,结束该次查找
若查找不到,返回" "
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="org.westos.domain.Person" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/9/8
Time: 16:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--1获取域中的数据,展示在页面上--%>
<%
pageContext.setAttribute("p","ppppp");
request.setAttribute("r","rrrrr");
session.setAttribute("s","sssss");
application.setAttribute("a","aaaaa");
%>
<%--传统的取法--%>
<%=pageContext.getAttribute("p")%>
<%=request.getAttribute("r")%>
<%=session.getAttribute("s")%>
<%=application.getAttribute("a")%>
<%--用EL表达式进行取--%>
${pageScope.p}
${requestScope.r}
${sessionScope.s}
${applicationScope.a}
<%--用数组存键值的形式存到集合里面,el表达式取出来--%>
<%
String[] str={"第一个人","第二个人","第三个人"};
request.setAttribute("arr",str);
ArrayList<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
request.setAttribute("jihe",list);
%>
<%--用传统的方法取出来--%>
<%
//先把大集合取出来
String[] arr = (String[]) request.getAttribute("arr");
//再把里面的小集合取出来
String[] jihe = (String[]) request.getAttribute("jihe");
//取出来索引一
Integer integer = list.get(0);
//打印在页面上
response.getWriter().write(integer);
//打印在控制台
out.write(integer);
%>
<%--用EL表达式取出来--%>
${arr[0]}
${arr[1]}
<%--EL表达式支持运算--%>
${1>2?"大于":"小于"}
${100+200+100*3}
<%--EL表达式支持调用java的方法,将集合中的键值取出来--%>
${"afasfsa".length()}
${jihe.get(0)}
<%
HashMap<String, String> map = new HashMap<>();
map.put("你","是谁");
map.put("我","不认识你");
request.setAttribute("map",map);
%>
<%--传统方法取出来--%>
<%
HashMap<String, String> map1 = (HashMap<String, String>) request.getAttribute("map");
request.getAttribute("map");
String value = map1.get("你");
out.write(value);
%>
<%--EL取出map中的数据--%>
${map.你}
${map.get("我")}
<%
Person person = new Person();
person.setName("你叫啥");
person.setAge(50);
session.setAttribute("p",person);
%>
${p.name}
${p.age}
<%
Person person5 = new Person();
person5=null;
session.setAttribute("p5",person5);
%>
<%--
empty 可以判断一个对象是否null 也可以判断一个容器的长度是否为0
--%>
${p5==null}
${empty p5}
${not empty p5}
${pp.size()==0}
${empty pp};
<%--通过el表达式动态获取项目路径--%>
<a href="/20190906_JSP__war_exploded/login">login</a>
<%--${pageContext.request.contextPath}--%>
<a href="${pageContext.request.contextPath}/login">login</a>
</body>
</html>
</body>
</html>