1.什么是JSP Java Server Pages:Java服务器端页面,也和Servlet一样,用于动态web技术!
最大特点: 1.写JSP就像在写HTML 2.区别: HTMl只给用于提供静态数据 JSP页面中可以嵌入JAVA代码,为用户提供动态数据
2.JSP原理 思路:JSP到底怎么执行的! 1.代码层面没有任何问题 2.服务器内部工作 Tomcat
在这里插入图片描述
我电脑的地址:
1 2 3 4 5 6 C :\Users\wei\AppData\Local\JetBrains\IntelliJIdea2020.3 \tomcat\0794 b5b5-a6b7-4 d24-86 bd-409 f1fd809ef\work\Catalina \localhost\ROOT\org\apache\jsp123 BASH
发现页面转变成了Java程序!
在这里插入图片描述
浏览器向服务器发送请求,不管访问什么资源,其实都在访问Servlet!
JSP 最终也会被转换称为一个Java类!
通过查看被转换后的Java类的源码,发现该类继承了HttpJspBase
在这里插入图片描述
通过查看HttpJspBase的源码发现,该类继承了HttpServlet
在这里插入图片描述
也就是说:JSP本质上就是一个Servlet
1 2 3 4 5 6 7 8 9 10 11 12 public void _jspInit() { } public void _jspDestroy() { } public void _jspService(final javax .servlet .http .HttpServletRequest request , final javax .servlet .http .HttpServletResponse response ) 123456789 JAVA
1.判断请求 2.内置一些对象
1 2 3 4 5 6 7 8 9 10 11 final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null ; final javax.servlet.ServletContext application; final javax.servlet.ServletConfig config; javax.servlet.jsp.JspWriter out = null ; final java.lang.Object page = this ; HttpServletRequest HttpServletResponse 12345678 JAVA
3.输出页面前增加的代码
1 2 3 4 5 6 7 8 9 10 11 12 response.setContentType("text/html" ); pageContext = _jspxFactory.getPageContext(this , request, response,null , true , 8192 , true ); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out ;123456789 JAVA
4.以上的这些个对象我们可以在JSP页面中直接使用
1.在JSP页面中; 2.只要是Java代码就会原封不动的输出; 3.如果是HTML代码,就会转化为
1 2 3 4 out .write ("<html>\r\n");1 JAVA
这样的格式输出到前端
测试: 1.找到tomcat服务器工作的目录 当前目录只要两个文件
在这里插入图片描述
2.新建一个jsp页面
在这里插入图片描述
3.重启tomcat服务器 会发现当前目录会报错,因为重启tomcat服务器后,该工作空间会被重新刷新、重新加载 。
在这里插入图片描述
启动完成后,当前工作空间还是只有两个文件
在这里插入图片描述
我们访问test.jsp 之后,会生成对应的Java类
在这里插入图片描述
在这里插入图片描述
大概流程
在这里插入图片描述
3.JSP基础语法 任何语言都有自己的语法,Java中有,JSP作为Java技术的一种应用,他拥有自己扩充的语言。Java所有语法都支持!
JSP表达式
1 2 3 4 5 6 7 8 <%--JSP表达式 作用:用来将程序的输出,输出到客户端 <%= 变量或者表达式%> --%> <%= new Date()%>12345 JAVA
JSP脚本片段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 < < int sum = 0 ; for (int i = 1 ;i<=100 ; i++) { sum+=i; } out.println("<h1>Sum=" +sum+"</h1>" );12345678 < int x = 10 ; out.println(x); <p>这是一个jsp文档</p> < int y = 2 ; out.println(y); <hr> < < for (int i = 0 ; i < 5 ; i++) { <h1>Hello,Workd</h1> < }12345678910111213141516171819 JAVA
JSP声明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <%! static { System.out .println("loading Servlet!" ); } private int globalVar = 0 ; public void xy () { System.out .println("进入了方法xy" ); } %>123456789101112 JAVA
JSP声明:会被编译到JSP生成的类中!其他的(JSP表达式 ,JSP脚本片段),就会被生成到_jspService方法中!
在JSp中,嵌入Java代码即可!
1 2 3 4 5 6 7 8 <% % > <% =% > <% !% > <% --注释--% >12345 JAVA
Jsp的注释不会在客户端显示,html的就会
JSP指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <% @ page args ... %> 1 <%- - Created by IntelliJ IDEA . User: Administrator Date: 2021 /10 /16 Time: 16 : 07 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 > <%- -<%@ include 会将两个页面合二为一- -%> <% @ include file="common/head.jsp" %> <h1 > 网页主题体</h1 > <% @ include file="common/footer.jsp" %> <hr > <%- - jsp: include 拼接页面,本质还是三个 - -%> <%- -jsp 标签- -%> <jsp:include page ="/common/head.jsp" /> <h1 > 网页主题体</h1 > <jsp:include page ="/common/footer.jsp" /> </body > </html > 123456789101112131415161718192021222324252627282930 JAVA
九大内置对象 1.PageContext 存东西 2.Response 3.Request 存东西 4.Session 存东西 5.Application 【ServletContext】 存东西 6.config【ServletConfig】 7.out 8.page 不用 9.exception
pageContext .setAttribute(); 保存的数据只在一个页面中有效
request .setAttribute(“); 保存的数据只在一次请求中有效 ,请求转发会携带这个数据
session .setAttribute(); 保存的数据只在一次会话中有效 ,从打开浏览器到关闭服务器
application .setAttribute(); 保存的数据只在服务器中有效 ,从打开服务器到关闭服务器
request :客户端想服务器发送请求,产生的数据,用户看完就没用了 ,比如:新闻,用户看完没用的!session :客户端想服务器发送请求,产生的数据,用户用完,用户看完一会还有用 ,比如:购物车application :客户端想服务器发送请求,产生的数据,一个用户用完,其他用户还能使用 。、,比如聊天数据。
6.JSP标签、JSTL标签、EL表达式 EL表达式: 1.获取数据 2.执行运算 3.获取web开发的常用对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <dependency > <groupId > javax.servlet.jsp.jstl</groupId > <artifactId > jstl-api</artifactId > <version > 1.2</version > </dependency > <dependency > <groupId > taglibs</groupId > <artifactId > standard</artifactId > <version > 1.1.2</version > 1234567891011 JAVA
JSP标签
1 2 3 4 5 6 7 <jsp:forward page ="jsptag2.jsp" > <jsp:param name ="name" value ="xianyan" /> <jsp:param name ="age" value ="age" /> </jsp:forward > 1234 JAVA
JSTL表达式 JSTL标签库的使用就是为了弥补HTML标签的不足,它自定义了许多标签,可以供我们使用
核心标签
1 2 3 4 5 <% --引入jstl核心标签库 core--% > <% @ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" % >12 JAVA
JSTL标签库使用步骤 1.引入对应的taglib 2.使用其中的方法 3.在Tomcat也需要引入jstl的依赖,否则报错
if 说明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <%-- Created by IntelliJ IDEA. User: Administrator Date: 2021 /10 /16 Time: 18 :38 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%-- 引入jstl核心标签库 core--%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html > <head > <title > Title</title > </head > <body > <h4 > If测试</h4 > <hr > <form action ="coreif.jsp" method ="get" > <%-- el表达式获取表单中的数据 $ {param.参数名} --%> <input type ="text" name ="username" value ="${param.username}" > <input type ="submit" value ="登录" > </form > <%--判断提交的用户名是管理员,则登录成功--%> <c:if test ="${param.username=='admin'}" var ="isAdmin" > <c:out value ="管理员欢迎您!" /> </c:if > <c:out value ="$ {isAdmin} " /></body > </html > 12345678910111213141516171819202122232425262728293031323334353637 JAVA
foeach说明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 <%@ page import ="java.util.ArrayList" %><% <%@ page contentType="text/html;charset=UTF-8" language ="java" %> <% <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <% ArrayList<String> people = new ArrayList<>(); people.add ("张三"); people.add ("李四"); people.add ("王五"); people.add ("赵六"); people.add ("冯七"); request.setAttribute("list",people); %> <% var : 每一次遍历出来的变量 items :要遍历的对象 <c:forEach var="people" items="${list}"> <c:out value ="${people}"/><br> </c:forEach > <hr> <% var : 每次遍历出来的变量 items : 要遍历的对象begin : 哪里开始end : 到哪里 step : 步长 <c:forEach begin ="1" end="3" step="2" var="peopel" items="${list}"> <c:out value ="${peopel}"/> <br> </c:forEach > </body> </html>12345678910111213141516171819202122232425262728293031323334353637383940414243444546 JAVA
choose-when说明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <%-- Created by IntelliJ IDEA. User: Administrator Date: 2021 /10 /16 Time: 18 :38 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%-- 引入jstl核心标签库 core--%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html > <head > <title > Title</title > </head > <body > <%--定义一个变量score,值为85--%> <c:set var ="score" value ="85" /> <c:choose > <c:when test ="${score>=90}" > 你的成绩为优秀 </c:when > <c:when test ="${score>=80}" > 你的成绩为良好 </c:when > <c:when test ="${score>=70}" > 你的成绩为一般 </c:when > <c:when test ="${score<=60}" > 你的成绩为不及格 </c:when > </c:choose > </body > </html >