什么是JSP:

Java server pages :Java 服务端页面,也和servlet一样,用于动态web技术。
最大特点:
写JSP跟HTML相像。
区别:
HTML只给用户提供静态的数据
JSP页面可以写入Java代码,为用户提供动态数据;

JSP原理

思路:JSP怎么执行!
代码层面无问题
服务器内部工作
Tomcat中有一个work目录
idea中使用Tomcat的会在idea的Tomcat中产生一个work目录
图片说明
我电脑相应文件所在地址:C:\Users\LLh.IntelliJIdea2018.2\system\tomcat\Unnamed_javaweb02servlet\work\Catalina\localhost\ROOT\org\apache\jsp
发现页面转变成Java程序

图片说明
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问servlet!
JSP最终也会转变成一个Java类。
JSP本质就是servlet

在JSP页面中,只要是Java代码,就会原封不动额输出,如果是前端代码,就会转换为:

    out.write("<html>\r\n");

这样的格式输出到前端!

jsp基础语法

JSP作为Java技术的一种应用,它拥有一些自己扩充的语法(了解,知道即可),Java所有语法都支持!

JSP声明:会被编译到JSP生成Java类中,其他的,就会被生成到_jspService方法中!
在jsp嵌入Java代码即可

注:Java注释,不会在客户端显示,HTML会

JSP指令

配置报错页面代码如下:

//在JSP中添加这个标签

<%@page errorPage="404.jsp" %>
<%@ page errorPage="500.jsp" %>
//web.xml
    <error-page>
        <error-code>500</error-code>
        <location>/500.jsp</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/error/404.jsp</location>
    </error-page>

实现模板复用,效果与Django模板继承差不多。

//代码示例
//header.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>我是header</h1>
//jsp3.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--el标签  模板复用--%>
<%@include file="common/header.jsp"%>
<h1>网页主体</h1>
<%@include file="common/footer.jsp"%>

<%--jsp标签  模板复用--%>
<jsp:include page="common/header.jsp"></jsp:include>
<h1>网页主体</h1>
<jsp:include page="common/footer.jsp"></jsp:include>
</body>
</html>

//footer.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>我是footer</h1>

九大内置对象

1. pageContext 存东西 常用
2. request 存东西 常用
3. response
4. session 存东西 常用
5. application [servletcontext] 存东西 常用
6. config [servletconfig]
7. out
8. page *
*9. excepetion

request:客户端向服务器发送数据请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的
session:客户端向服务器发送请求,产生数据,用户用完一会还有用,比如:购物车,用户登录验证
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据等。

代码附上:

<%--
pageContextDemo01.jsp
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%--内置对象--%>
<%
    pageContext.setAttribute("name1","耶耶1号");//保存的数据只在一个页面中有效
    request.setAttribute("name2","耶耶2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据
    session.setAttribute("name3","耶耶3号");//保存数据只在一次会话中有效,从打开浏览器到关闭浏览器
    application.setAttribute("name4","耶耶4号");//保存数据只在服务器中有效,从打开服务器到关闭服务器

%>
<%
    //从pageContext取出,我们通过寻找方式来
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");//不存在

%>

<%--使用el表达式输出--%>
<h1>取出的值为:</h1>
<h2>${name1}</h2>
<h2>${name2}</h2>
<h2>${name3}</h2>
<h2>${name4}</h2>
<h2>${name5}</h2>
</body>
</html>





<%--
pageDemo02.jsp
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Titl阿斯顿发生e</title>
</head>
<body>
<%
    //从pageContext取出,我们通过寻找方式来
    String name1 = (String) pageContext.findAttribute("name1");
    String name2 = (String) pageContext.findAttribute("name2");
    String name3 = (String) pageContext.findAttribute("name3");
    String name4 = (String) pageContext.findAttribute("name4");
    String name5 = (String) pageContext.findAttribute("name5");//不存在

%>

<%--使用el表达式输出--%>
<h1>取出的值为:</h1>

<h2>${name1}</h2>
<h2>${name2}</h2>
<h2>${name3}</h2>
<h2>${name4}</h2>
<h2>${name5}</h2>
</body>
</html>

jsp标签、jstl标签、el表达式

el表达式: ${}

** 获取数据**
** 执行运算**
** 获取web开发的常用对象**

jstl表达式

jstl标签库的使用就是为了补足HTML标签的不足,它自定义许多标签,可以供我们使用,标签的功能和Java代码一样!
使用步骤:
引入对应的taglib
使用其中的方法
在Tomcat也需要引入jstl的包,否则会报错:jstl解析错误。

核心标签 常用

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

图片说明

格式化标签

XML标签

SQL标签