什么是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" %>