1、jsp

  • 在servlet中说过java中前端到后台有两条路线嘛

    1. 后台 <------ ajax、json <--------- 前端
    2. 后台 <------ jsp( EL、JSTL ) <------- 前端
  • 因此:这个jsp就是第二条路线中的一个知识

  • 但是:这个知识其实不太想写到博客里的,因为:这个知识已经落后了,被淘汰了,可是那种老项目之中用得有这个知识,所以:还是写到博客里吧

  • 学东西,那得需要知道这个东西是什么?这个东西怎么快速上手、底层是什么?这个东西之中有哪些常用的知识?

1)、jsp是什么?

  • jsp,全称javaServer page,即:java服务页面,由这个字面意思思考一下?这个jsp是服务器中加载出来的吗?答案肯定是的。后续马上慢慢引入相关知识

  • jsp没有多高深,以前玩过html涩,而这个jsp就把它当做是一个html,只是更灵活、一些写法不一样而已( 当然:这些不一样的地方一般也不用 )

2)、看看jsp长什么样子?


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>看看jsp长什么样子</title>
</head>
<body> </body>
</html>
  • jsp就长这么一个吊样儿,就和html差不多

  • 那么回到前面一开始的问题,jsp是在服务器加载出来是个什么意思?

    • 很简单:和html比较一下嘛,在浏览器中的页面是怎么加载的?就是通过html代码显示的嘛,但是:这个html是在服务器中把这些html代码传输到浏览器中,然后浏览器在解析这个html代码,从而加载出相应的页面。
    • 那么jsp是怎么回事?就是在服务器中就把代码解析好了,然后在浏览器中直接进行显示
  • 聊一下jsp的一些基础知识


<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%--
jsp支持两种注释
1、html的注释 <!-- 注释内容 --> 但是这种注解是可见注释,即:在浏览器中查看源代码时是可以看到这个注释内容的
2、jsp本身的注释 <%-- 注释内容 --%> 这种是不可见注释, 即:在浏览器中查看源代码时看不到这个注释的内容 jsp的普通脚本语法:
<% 脚本内容 %> 这个脚本内容也就是可以写java代码,傻子才会在jsp中写java代码,因此:这个了解即可 jsp的输出脚本:
<%=输出内容 %> 了解即可 jsp的变量、方法脚本( 定义脚本 ):
<%! 在这里面定义变量和方法 %> 了解即可 这个页面的头部有一个 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
解读一下:
language="java" 就是说:这个jso的底层脚本语言是java 因此:jsp就是用java写的
contentType="text/html;charset=UTF-8" ===等价于servlet中的==> resp.setCharacterEncoding = "utf-8"
<%@ page %> 是jsp的三大指令之一 后续会说明 --%>
<html>
<head>
<title>看看jsp长什么样子</title>
</head>
<body> </body>
</html>
  • 演示一下普通脚本

<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jsp的普通脚本</title>
</head>
<body> <%
// 写java代码涩
HashMap<String, Object> map = new HashMap<>();
map.put("name", "紫邪情"); System.out.println( map.get("name") );
%> </body>
</html>
  • 效果如下:

  • 其他的都是差球不多的,而且也不怎么用,因此:老衲懒一下不演示了

3)、jsp的原理

  • 其实嘛,我们写的是jsp,但是:底层却是写的servlet,去看一下运行的源码
  • 启动tomcat有一个路径,应该注意到了:就是源码的路径地址,去看一下
    • 这玩意儿不就他喵的是servlet吗,那我们写的jsp内容在哪里?
      • 所以jsp的实质啊,还是java,然后响应到网页的内容,就是在servlet中通过write()输出流一个一个傻瓜式的把标签拼上去的。因此:jsp也是为了java减负从而造就出来的技术( 分放外包嘛 )

4)、jsp的三大指令

  • 简单得要死

    • page指令
    • include指令
    • taglib指令
  • 语法:

    <%@ 指令名字 属性 %>

(1)、page指令

  • page指令中有什么属性?

    • 用法就不说明了,这个字面意思

(2)、include指令

  • include指令中有什么属性?

    • 看截图就知道这个指令是用来干嘛的,就是用来:引入另一个页面到当前页面嘛。如:一个页面的头部样子和另一个页面的头部样子一样的,那么就可以把这个共有的头部样子提成一个单独的页面,然后需要的页面中引进来就可以了

(3)、taglib指令

  • taglib指令是用来干嘛的,引入标签库嘛。什么意思?如:使用a标签在jsp中可以,那为什么使用sb标签就不行呢?就是因为:有一个专门的规范嘛,而这个规范里面放的就是有哪些标签涩

  • taglib指令的玩法

    <%@ taglib prefix="c" uri="" %>

    • prefix 统一为 c
    • uri 就是规范口,如:后面要用的jstl表达式

5)、jsp动作

  • 这个知识点跳过,因为:已经完全被淘汰了( 有兴趣的自行百度 )

6)、jsp的9大内置对象

  • 什么是内置对象,就是jsp本身就提供得有的对象呗,要是在玩哪个输出脚本的jsp,看源码时注意源码的话,这个东西就不陌生了,因为:jsp源码中就有这9大内置对象,而且这9大内置对象,基本上在servlet中都见过了

  • 简单演示一下:主要是演示pageContext对象( 这个对象很重要滴,EL表达式就是通过这个对象一步一步整过来的 )

    • 先编写一个存数据的servlet

package servlet; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet("/setData.do")
public class SetData extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8"); req.setAttribute("req" , "紫邪情");
req.getSession().setAttribute("ses" , "关羽");
this.getServletContext().setAttribute("app" , "刘备"); req.getRequestDispatcher("/5-演示对象引申EL表达式.jsp").forward(req,resp);
}
}
- 接着来jsp中进行取数据

<%@ page pageEncoding="utf-8" contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body> <%--
1、去servlet中存几个值
--%> <%-- 2、来jsp中取servlet存的值 --%> request:<%=request.getAttribute("req")%>
session:<%=session.getAttribute("ses")%>
application:<%=application.getAttribute("app")%> <hr> <%
pageContext.setAttribute("name" , "张三");
%> <%=pageContext.getAttribute("name")%>
<%-- 这种方式只能取当前页面中的数据。逐渐开始引进咯 --%> <%-- 使用重载方法 --%>
<%-- <%=pageContext.getAttribute("req" , 0)% >--%>
<%--
这个方法中有一个参数0 这表示的是:取request域中的数据
1 表示:取session中的数据
2 表示:取application中的数据 但是:这种方式已经被淘汰了,所以现在不可用了
--%> <%--上述的取值还是麻烦,继续引进 直接通过key来取值--%>
request:<%=pageContext.findAttribute("req")%>
session:<%=pageContext.findAttribute("ses")%>
application:<%=pageContext.findAttribute("app")%>
<%-- 这种方式的找寻顺序:page > request > session > application --%> <%--但是啊,上面这种还是麻烦,因此:来个更方便的,EL表达式--%>
EL - request:${req}
EL - session:${ses}
EL - application:${app}
EL - page:${name}
<%-- EL表达式找寻顺序:page > request > session > application --%> </body>
</html>

``

  • 效果如下:

7)、jsp标签、EL表达式、JSTL表达式

(1)、jsp标签

  • 这个基本上已经不用了,所以跳过

(2)、EL表达式

  • EL,全称:Expression Language , 即:表达语言
  • 这玩意儿就是为了简化jsp的,前面一步一步引进哪里,在原生的jsp中是通过脚本<% %>来进行存取值的,因此:这不好涩,因为:代码就是代码,结果出现脚本语言、甚至还可以写java语言,这不很乱吗,因此:分离,EL表达式就出来了
①、EL表达式语法

${ 表达式 / key }

  • 那这个 ${} EL表达式中{}里面可以用哪些东西

    • 整数、浮点数、对象、字符串、布尔、null
    • 运算符

      + - / * % > < >= <= == ! A ?B :C and、&&、or、||、!、not

②、EL表达式的其他相关知识,不用了解都行,因为:都没什么卵用,只需要知道这个EL表达式就是用来取值的就行( 无论前端还是后台 )、以及怎么取值的就完了

8)、jstl表达式

  • 这个玩意儿需要引入jar包,直接在maven仓库中搜索jstl就可以找到了,然后放到lib中,add library就可以了

  • 为什么需要这个,就是配合EL表达式,从而干掉jsp的所有脚本语言写法,让jsp页面不再出现脚本语言代码

  • 这个jstl表达式有很多语法,但是:只需要知道如下两个即可


<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html>
<head>
<title>jstl表达式</title>
</head>
<body> <%-- foreach 遍历某一个容器嘛,数组、集合.....
items 就是容器的名字 要遍历哪一个容器得告诉别人涩 这个可以配合EL表达式,从而获取后台中传过来的数据名涩( key获取嘛 )
var 这个容器中存的对象名 如:后台传过来一个person对象
这里就可以弄为: var = “p”
这样就可以在forEach中使用 p.getxxx() 的方式获取person的属性涩
--%>
<c:forEach items="" var=""> </c:forEach> <%--
用来做判断嘛,也就是筛选咯
test 就是判断的条件
--%>
<c:if test=""> </c:if> </body>
</html>

至此:jsp的相关知识已完毕

javaWeb - 3 — JSP (技术已淘汰)— 更新完毕的更多相关文章

  1. JavaWeb之JSP技术总结

    刚接触JSP技术的时候让我想起了在大学学的Asp+VBScript,记得当时我还用aspstudy做了一个小的新闻发布系统作为期末作品,也正是在那时候在卢哥卢老师的指导下走向编程的道路,对编程越来越感 ...

  2. javaWeb - 1 — servlet — 更新完毕

    1.先来聊一些javaWeb相关的知识 简单了解一下:web的发展史 1).web就是网页的意思嘛 2).web的分类 (1).静态web 使用HTML.CSS技术,主要包括图片和文本 优点:简单,只 ...

  3. 【干货】电路设计师指导手册(已更新完毕)(转载EDN)

    [干货]电路设计师指导手册(已更新完毕) 第一部分:接地与布线第二部分:电源返回路径与I/O信号接地第三部分:板间互连.星形接地及屏蔽第四部分:安全地以及电线/电缆第五部分:射频电缆.双绞线与串扰

  4. JavaWeb:JSP技术基础

    JavaWeb:JSP技术 快速开始 介绍 JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%> ...

  5. Java匹马行天下之JavaWeb核心技术——JSP

    JSP动态网页技术 一.JavaWeb简介 一.什么是JavaWeb? JavaWeb是用Java技术来解决相关web互联网领域的技术总称. 需要在特定的web服务器上运行,分为web服务器和web客 ...

  6. (八)JSP 技术知识点总结(来自那些年的笔记)

    目录 什么是 jsp Jsp 调用和运行原理(简略版) Jsp语法 Jsp指令简介 Page指令 Include指令 taglib指令 Jsp乱码问题 jsp运行原理(详细版) JSP中的九大隐式对象 ...

  7. java的JSP技术

    java的JSP技术 [toc] 1.JSP简介 Jsp技术是用来开发java web的页面显示的,所有MVC模型里面的视图层,所以视图层的开发 jsp不是编程语言,三个英文是java server ...

  8. Servlet,jsp,JSP技术 ,JSP编程

     一.Servlet 思考 1 浏览器可以直接打开JAVA/class文件吗? 不可以 2浏览器可以打开HTML.JS 文件吗? 可以 3 JAVA程序可以生成HTML文件吗?可以的,用IO流. 4 ...

  9. Java Web之JSP技术

    JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比htm ...

随机推荐

  1. ubuntu 编译C++ error: ‘syscall’ was not declared in this scope

    明明已经加了头文件 #include <sys/syscall.h> #include <sched.h> #include <sys/resource.h> 编译 ...

  2. 二进制小数 牛客网 程序员面试金典 C++ Python

    二进制小数 牛客网 程序员面试金典 题目描述 有一个介于0和1之间的实数,类型为double,返回它的二进制表示.如果该数字无法精确地用32位以内的二进制表示,返回"Error". ...

  3. Codeforces Round #742 (Div. 2)题解

    链接 \(A,B\)题签到,就完了. \(C\)题,考虑进位时多进一位,由于是隔一位进的,所以可以发现奇数位和偶数位是相互独立的,那么我们就把奇数位和偶数位单独拉出来组成数字例如:34789,我们单独 ...

  4. swagger3.0(springboot)消除basic-error-controller

    1.新建springboot项目,可以通过https://start.spring.io/快速生成springboot项目. 2.引入jar依赖: <dependency> <gro ...

  5. Typora简介

    Typora是什么 Typora是一款支持实时预览的Markdown文本编辑器,拥有macOS.Windows.Linux三个平台的版本,并且完全免费. 下载地址:https://www.typora ...

  6. Centos 8 升级ssl到1.1.1h

    升级到1.1.1h版本 #编译openssl和安装 ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl & ...

  7. 【java+selenium3】元素的扩展操作(二)

    1.判断当前元素是否可显示 isDisplay(); //判断元素是否可见 boolean a= driver.findElement(By.id("xxx")).isDispla ...

  8. The 'stream().forEach()' chain can be replaced with 'forEach()' (may change semantics)

    对集合操作时,因不同的写法Idea经常会提示:The 'stream().forEach()' chain can be replaced with 'forEach()' (may change s ...

  9. Part 33 Angular nested scopes and controller as syntax

    Working with nested scopes using $scope object : The following code creates 3 controllers  - country ...

  10. Numpy (嵩老师.)

    import numpy as np Numpy 一元函数 对ndarray中的数据执行元素级运算的函数 np.abs(x) np.fabs(x) 计算数组各元素的绝对值 np.sqrt(x) 计算数 ...