JSP 蔚落 2022-06-05 07:28 144阅读 0赞 我们都知道静态页面html,但是在我们淘宝购物的时候,每个用户的购物车界面是不一样的,那么这个购物车的界面又是如何生成的呢?是通过动态JSP生成的。 > JSP:Java Server Page,和Servlet技术一样,都是SUN公司开发的一种动态加载Web资源的技术,实际上**JSP就是Servlet** > JSP = html + Java HTML:适合编写静态页面 Servlet:服务器端的小程序,适合编写Java逻辑代码,如果应用写页面,还是挺可怕的,因为只能通过输出流对象写标签 JSP:适合编写动态输出页面,但不适合写Java逻辑代码 > JSP原理: Q1:浏览器在访问JSP时,Web服务器是如何调用并执行一个JSP页面的? A1:首先要知道JSP的执行流程:翻译—>编译—>执行 ![这里写图片描述][SouthEast] 当浏览器第一次请求JSP时,JSP页面首先被翻译成.java文件,然后被编译成.class文件(如图蓝色箭头),最终在服务器端执行的是.class文件。那么查看被编译的.class文件,我们发现类名就是\_1\_jsp,该类继承了HttpJspBase,其中HttpJspBase又继承了HttpServlet类,所以我们上面说JSP其实就是Servlet。其中,\_jspInit,\_jspService,\_jspDestroy等方法就是Servlet类中的init,service,destroy方法,也具有Servlet的功能。 如果服务器是第二次请求JSP,那么就会跳过翻译和编译的过程,直接去执行.class文件(如图红色箭头)。一旦JSP页面的内容发生改变,都会被重新翻译并编译。 Q2:JSP中的标签是如何被写到客户端浏览器的? A2:标签通过输出流对象写出到客户端。见图 ![这里写图片描述][SouthEast 1] ![这里写图片描述][SouthEast 2] JSP页面的标签和Java代码被下图中对应的框内语句写到客户端 Q3:Web服务器在调用Jsp时,会给Jsp提供什么Java对象? A3: ![这里写图片描述][SouthEast 3] 除了上图中的HttpSession,ServletContext,ServletConfig,JspWriter对象,还有request对象和response对象 > JSP应用:一般用于显示数据。 JSP语法: 1、JSP模版元素 网页的静态内容。如:html标签和文本。 2、JSP的脚本 2.1、小脚本 <% java代码 %> 2.1、表达式 <%= 2+3 %> 等价于out.print(2+3); ![这里写图片描述][SouthEast 4] 3、JSP注释 JSP注释:<%– 被注释的内容 –%> 特点:安全,省流量 网页注释:`<!-- 网页注释 -->` 特点:不安全,费流量 * 4、3个指令 指令是为JSP引擎设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。 在JSP 2.0规范中共定义了三个指令: page指令 Include指令 taglib指令 语法: <%@ 指令名称 属性1=“属性值1” 属性2=“属性值2”。。。%> 或者: <%@ 指令名称 属性1=“属性值1”%> <%@ 指令名称 属性2=“属性值2”%> 如:<%@ page language=”java” import=”java.util.\*” pageEncoding=”UTF-8”%> <%@ page language=”java” %> <%@ page import=”java.util.\*” %> 1、page: 作用:用于定义JSP页面的各种属性 属性: 1.1、 import 和java代码中的import是一样的 <%@ page import=”java.util.Date,java.util.List”%> 或者: <%@ page import=”java.util.Date”%> <%@ page import=”java.util.List”%> JSP会自动导入以下的包: import java.lang.\*; import javax.servlet.\*; import javax.servlet.http.\*; import javax.servlet.jsp.\*; 1.2、 session: 是否会自动创建session对象。默认值是true; 1.3、 buffer: JSP中有javax.servlet.jsp.JspWriter输出字符流。设置。输出数据的缓存大小,默认是8kb. 1.4、 errorPage: 如果页面中有错误,则跳转到指定的资源。 errorPage=”/uri” 如果写“/”则代表当前应用的目录下,绝对路径。 如果不写“/”则代表相对路径。 1.5、 isErrorPage: 是否创建throwable对象。默认是false; 1.6、 contextType: 等同于response.setContextType(“text/html;charset=utf-8”); 1.7、 pageEncoding: 告诉JSP引擎要翻译的文件使用的编码。 <%@ page pageEncoding="gbk" %> pageEncoding的设定包含了对contextType的设定,所以如果设定了pageEncoding使用GBK,则contextType也是GBK 1.8、 isELIgnored: 是否支持EL表达式。 默认是false 2、include: 静态包含:把其它资源包含到当前页面中。 <%@ include file=”/include/header.jsp” %> 动态包含: <jsp:include page="/include/header.jsp"></jsp:include> 两者的区别:翻译的时间段不同 前者:在翻译时就把两个文件合并 后者:不会合并文件,当代码执行到include时,才包含另一个文件的内容。 原则:能用静的就不用动的。 3、taglib 作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。 <jsp:include page="2.jsp"></jsp:include> <jsp:include > 动态包含 <jsp:forward> 请求转发 <jsp:param> 设置请求参数 <%-- 相当于以get方式传递数据 http://localhost:8090/dream/index.jsp?name=123 --%> <jsp:forward page="test.jsp"> <jsp:param name="name" value="123"></jsp:param> </jsp:forward> <jsp:useBean> 创建一个对象 <jsp:setProperty> 给指定的对象属性赋值 <jsp:getProperty> 取出指定对象的属性值 <!-- id 为创建的对象名 --> <jsp:useBean id="user" class="com.itfire.Entity.User"></jsp:useBean> <jsp:setProperty name="user" property="userName" value="Tom"></jsp:setProperty> <jsp:getProperty name="user" property="userName"></jsp:getProperty> * 6、9个内置对象 指在JSP的<%=%> 和<% %>中可以直接使用的对象 ![这里写图片描述][SouthEast 5] pageContext(重要) 1、本身也是一个域对象:它可以操作其它三个域对象(request session application)的数据 void setAttribute(String name,Object o); Object getAttribute(String name); void removeAttribute(String name); 操作其它域对象的方法 void setAttribute(String name,Object o,int Scope); Object getAttribute(String name,int Scope); void removeAttribute(String name,int Scope); scpoe的值: PageContext.PAGE\_SCOPE PageContext.REQUEST\_SCOPE PageContext.SESSION\_SCOPE PageContext.APPLICATION\_SCOPE **findAttribute(String name); 自动从page request session application依次查找,找到了就取值,结束查找** 2、它可以创建其它的8个隐式对象 在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。 3、提供了的简易方法,转发和包含 pageContext.forward(“2.jsp”); pageContext.include(“2.jsp”); > 四大域对象:(实际开发中) > PageContext : pageConext 存放的数据在当前页面有效。开发时使用较少。 > ServletRequest: request 存放的数据在一次请求(转发)内有效。使用非常多。 > HttpSession: session 存放的数据在一次会话中有效。使用的比较多。如:存放用户的登录信息,购物车功能。 > ServletContext: application 存放的数据在整个应用范围内都有效。因为范围太大,应尽量少用。 > EL表达式:expression language 表达式语言 > 要简化jsp中java代码开发。 > 它不是一种开发语言,是jsp中获取数据的一种规范 ![这里写图片描述][SouthEast 6] EL表达式功能: 1.获取数据 EL表达式只能获取存在4个作用域中的数据 `${u}` 相当于语句: pageContext.findAttribute(“u”); url?name=tom 对于发送的数据,无论是post或者是get提交,用param对象取值 $\{param.name\} *EL获取对于null这样的数据,在页面中表现为空字符串,EL表达式有很强的容错能力,即使对象为空,还对该对象进行取值,那么也不会报错,而是什么也不显示* $\{u.name\} == u.getName()方法 * 点(.) 运算符相当于调了getter方法,点后页面跟的是属性名。 ![这里写图片描述][SouthEast 7] 这种以“.”取值的方式叫属性导航,如果对于某个对象User中还引用了其他类对象City作为属性,那么可以如下取值:$\{user.city.city\} * \[\]运算符:点能做的,它也能做; 它能做的,点不一定能做 ${ student.name}== ${ student['name']} == ${ student["name"]} ![这里写图片描述][SouthEast 8] > 运算 empry:判断null,空字符串和没有元素的集合(即使集合对象本身不为null)都返回true ![这里写图片描述][SouthEast 9] 结果:true true false true false 三元运算符: ![这里写图片描述][SouthEast 10] > 隐式对象:11个 ![这里写图片描述][SouthEast 11] > JSTL:(JavaServerPages Standard Tag Library)JSP标准标签库 > 使用JSTL实现JSP页面中逻辑处理。如判断、循环等 使用JSTL标签首先要添加taglib属性,引入标签库 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 常用标签: 1. 通用标签: set、 out、 remove 设置变量 <c:set var="num" value="${5+3}" scope="page"></c:set><br> 输出变量 <c:out value="${num}"></c:out><br> 移除变量 <c:remove var="num"></c:remove><br> 输出变量 <c:out value="${num}"></c:out> 2.条件标签 if choose(相当于Java中的switch语句) <c:if test="${num >3}"> 结果为true </c:if> <c:choose> <c:when test="${num == 1}"> 第一名 </c:when> <c:when test="${num == 2}"> 第二名 </c:when> <c:when test="${num == 3}"> 第三名 </c:when> <c:otherwise> 没名次 </c:otherwise> </c:choose> 3.迭带标签:foreach * 普通循环: ![这里写图片描述][SouthEast 12] * 迭带器: ![这里写图片描述][SouthEast 13] items是被遍历的对象,var是存放遍历对象得到的每一个元素 [SouthEast]: /images/20220605/83f5e97f7ef24102b53ea4c4347cda9d.png [SouthEast 1]: /images/20220605/f8e244b2a9c341aa8ffd8eae1f8393e4.png [SouthEast 2]: /images/20220605/711d2732a7a9405d9772883f811a69b8.png [SouthEast 3]: /images/20220605/3fc0016b24634e518557282921c451eb.png [SouthEast 4]: /images/20220605/decabf888fc84c538bdeb02ab661d5b3.png [SouthEast 5]: /images/20220605/a30f12be59604410918cf54c52d5bda4.png [SouthEast 6]: /images/20220605/e6695eae491c4af08719bec07537a33f.png [SouthEast 7]: /images/20220605/fb58a38ccdef47cf9e6f53b9c2c34169.png [SouthEast 8]: /images/20220605/708c558b6b1147b58ac1836036863495.png [SouthEast 9]: /images/20220605/aa42f4ae93b64f32a618e1d20c66f8b8.png [SouthEast 10]: /images/20220605/6ea2a613baf94920be137ae306b8b4cf.png [SouthEast 11]: /images/20220605/9ac090dfcb1244028739b336ac88ba86.png [SouthEast 12]: /images/20220605/a18d4bb23a87477ba2f52be230342ee3.png [SouthEast 13]: /images/20220605/055d44d4a92e4a4da49a9c8482eff154.png
相关 JSP基础:jsp注释 > HTML注释:<!-- -->是相对浏览器的,浏览器会忽略注释的部分不显示在页面上。 > Java注释: // ,/\ \/ 是相对于编译器的,编译器会忽略注释的代码,生 拼搏现实的明天。/ 2023年10月08日 23:37/ 0 赞/ 9 阅读
相关 JSP 我们都知道静态页面html,但是在我们淘宝购物的时候,每个用户的购物车界面是不一样的,那么这个购物车的界面又是如何生成的呢?是通过动态JSP生成的。 > JSP:Java S 蔚落/ 2022年06月05日 07:28/ 0 赞/ 145 阅读
相关 jsp 目录 出错页面 包含其他页面的两种方法 两种方法的比较: 网页跳转的两种方法 跳转携带参数 jsp内置对象 四个作用域对象 ------------ ╰半夏微凉°/ 2022年03月29日 02:44/ 0 赞/ 170 阅读
相关 JSP 1. 概念:Java Server Pages Java服务器端页面 一个特殊的页面,其中既可以定义html标签,又可以定义Java代码。 你的名字/ 2022年03月01日 19:08/ 0 赞/ 178 阅读
相关 jsp ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ub 男娘i/ 2022年02月12日 19:09/ 0 赞/ 171 阅读
相关 jsp 动态页面技术 一、JSP 1. 简介 JSP:Java Server Page,Java服务器端页面技术,是Sun公司提供的一套规范。表面上是HTML+ 心已赠人/ 2022年02月05日 12:36/ 0 赞/ 197 阅读
相关 JSP 1.JSP有哪些内置对象?作用分别是什么? 答案: 1. JSP有9个内置对象: (1)request:封装客户端的请求,其中包含来自GET或POST请求的参数; 川长思鸟来/ 2022年01月10日 06:17/ 0 赞/ 238 阅读
相关 JSP 一、JSP简介 1. 什么是 JSP JSP全名为 Java Server Pages,中文名叫 java服务器页面。 它是在传统的网页HTML文件(.htm,. た 入场券/ 2022年01月07日 15:23/ 0 赞/ 231 阅读
相关 JSP jsp简介 JSP(Java Server Pages)是JavaWeb服务器端的动态资源,它与html页面的作用是相同的,显示数据和获取数据。 jsp: 作为请求发起页 喜欢ヅ旅行/ 2021年11月02日 14:46/ 0 赞/ 290 阅读
还没有评论,来说两句吧...