服务端渲染技术

news/2025/2/6 19:33:52 标签: java, servlet

一.JSP

1.jsp介绍,全称是java Server Pages ,java服务器页面,就是服务端渲染技术,html只能为用户提供静态数据,而JSP技术允许在页面中嵌套
java代码,jsp技术基于Servlet,Servlet很难对数据进行排版,而jsp就可以,可以理解为jsp就是对Servlet的包装.
2.jsp程序本质是java程序,无法直接用浏览器打开
3.jsp运行原理 第一次访问jsp页面的时候,tomcat服务器会把jsp页面解析成为一个java源文件,并且对它进行编译成为.class字节码程序,
编译成为的java源程序是jsp对应的servlet,因此可以直接使用servlet的内容,如request和response
4.脚本语法  ①声明脚本基本语法 格式:<%!  代码%> 作用定义jsp的需要属性,方法,静态代码块和内部类等  ②表达式脚本,格式<%=表达式%> 
作用是jsp页面上输出数据(即动态输出数据,html不具备),表达式不能以分号结束 ③代码脚本语法<% java代码%> 作用 :
可以在jsp页面中,编写我们需要的功能,可以由多个代码脚本块组合完成一个完整的java语句,还可以和表达式脚本一起组合使用,在jsp页面上输出数据
<%!  //声明脚本语法
    //属性
    private String name = "666";
    private static int age = 99;
    //方法
    public String  getName(){
        return name;
    }
    //静态代码块
    static {
        age = 11;
    }
%>
<h1>表达式脚本的应用</h1>
<%
  String name = "李华";
  String email= request.getParameter("email");
%>

用户名:<%=name%><br>
年龄是:<%=request.getParameter("age")%><br>
工作:<%="洗盘子"%><br>
电邮:<%=email%>
<h1>演示代码脚本</h1>
        <%
            ArrayList<Monster> monsterList = new ArrayList<>();
            monsterList.add(new Monster(1,"牛魔王","芭蕉扇"));
            monsterList.add(new Monster(2,"蜘蛛精","吐蛛丝"));
        %>
<table bgcolor ="#f0f8ff " border = "1px" width="300px" >

    <%
        for (int i = 0; i < monsterList.size(); i++) {

    %>
           <tr>
            <th><%= monsterList.get(i).getId()%></th>
            <th><%=monsterList.get(i).getName()%></th>
            <th><%=monsterList.get(i).getSkill()%></th>
        </tr>
    <%
        }
    %>
</table>

5.jsp内置对象(已经创建好的对象,可以直接使用),是指Tomcat在翻译jsp页面成为servlet之后,内部提供的九大对象

//1.out类型是JspWriter,父类就是Writer
    out.println("jsp999");
    //2.request是HttpServletRequest
    request.getParameter("name");
    //3.response是HttpServletResponse
    //response.sendRedirect("http://www.baidu.com");
    //4.session就是HttpSession
    session.setAttribute("job","php工程师");
    //5.application类型就是ServletContext
    application.setAttribute("name","黎明");
    //6.pageContext可以存放数据(属性),但是数据只能在本页使用
    pageContext.setAttribute("age",100);
    //7.page内置对象类似this
    out.print("page"+page);
    //8.config的内置对象的类型就是ServletConfig
    String pwd = config.getInitParameter("pwd");
    //0,exception

6.jsp域对象
①pageContext(域对象,存放的数据只能在当前页面使用)
②request(域对象,存放的数据在一次request请求有效,即request相同就可以)
③session(域对象,存放的数据在一次会话有效,即只要session没有变化,那么存放的数据)
④application(域对象,存放的数据在服务器未重启就一直有效)

7.el表达式
介绍:全称为Expression language,是表达式语言,el表达式主要代替jsp页面的表达式脚本如<%=requst.getAttribute(“xx”)>

<%
  request.setAttribute("num1",90);
  request.setAttribute("num2",100);
%>
num1+num2=${num1+num2}
基本语法:${key}   ,运算表达式: ${运算表达式},即外面多了一个$符号和大括号
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.hspedu.entity.Book" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el表达式输出演示</title>
</head>
<body>
<%
    //    private String name;//书名
//    private String[] writer;作者
//    private List<String> reader;//读者
//    private Map<String,String> topics;//评讲
    Book book = new Book();
    book.setName("昆虫总动员");
    book.setWriter(new String[]{"jake","tom"});
    ArrayList<String> readers = new ArrayList<>();
    readers.add("老汉");
    readers.add("老李");
    book.setReader(readers);
    HashMap<String, String> topics = new HashMap<>();
    topics.put("topics1","这是我看过的最好的动画片");
    topics.put("topics2","不错的电影");
    book.setTopics(topics);
    //把book放入request域中
    request.setAttribute("bookkey",book);
%>
book对象:${bookkey}<br>
book.name=${bookkey.name}<br>
book.writer=${bookkey.writer}<br>
book.writer[0]=${bookkey.writer[0]}<br>
book.reders=${bookkey.reader}<br>
book.topics=${bookkey.topics.get("topics1")}

</body>
</html>

el判断是否为空的表达式: e m p t y 变量 , 三元运算 : {empty 变量},三元运算: empty变量,三元运算:{score >=60? “及格”:“不及格”}
el方式获取域的数据

<%
    request.setAttribute("k1","request域数据");
    pageContext.setAttribute("k1","pageContext中的数据");
    session.setAttribute("k1","session中的数据");
    application.setAttribute("k1","application当中的数据");
%>
request:${requestScope.k1}<br>
pageContext:${pageScope.k1}<br>
session:${sessionScope.k1}<br>
application${applicationScope.k1}

8.jstl标签库是指JSP Standard Tag Library Jsp,为了替换代码脚本,这样jsp页面变得更加简洁,由五个标签库组成,重点学习core核心库
①c:set标签的使用,用于代替代码脚本的部分内容

<c:set scope="request" var="name" value="小明"></c:set>
c:set-name的值为:${requestScope.name}

②c:if标签的使用,起到普通if的作用

<body>
<c:set scope="request" var="num1" value="20"></c:set>
<c:set scope="request" var="num2" value="30"></c:set>
<c:if test="${num1<num2}">
  <h1> ${num1}<${num2}</h1>
</c:if>
</body>

③c:choose标签的使用

<c:set scope="request" var="score" value="60"></c:set>
<c:choose>
  <c:when test="${requestScope.score>80}"> 
    <h1>成绩优秀</h1>
  </c:when>
  <c:when test="${requestScope.score>=60}">
    <h1>成绩一般,及格了</h1>
  </c:when>
  <c:otherwise>
    <h1>没有及格,下次努力</h1>
  </c:otherwise>
</c:choose>

④<c:foreach>的使用 ,就是for循环

<%
    request.setAttribute("sports",new String[]{"打篮球","打足球"});
    HashMap<String, Object> map = new HashMap<>();
    map.put("key1","北京");
    map.put("key2","上海");
    map.put("key3","天津");
    request.setAttribute("map",map);
%>
<%--第一种遍历方式--%>
<c:forEach begin="1" end="5" var="i">
    <h1>排名=${i}</h1>
</c:forEach>
<%--第二种遍历数组 item是遍历的集合,var是将遍历的数据放入到var中--%>
<c:forEach items="${requestScope.sports}" var="sport">
    运动名称=${sport}<br>
</c:forEach>
<%--第三种方式 遍历map--%>
<c:forEach items="${requestScope.map}" var="city">
    城市信息:${city.key}--${city.value}

</c:forEach>

http://www.niftyadmin.cn/n/5843284.html

相关文章

Java进阶学习之路

Java进阶之路 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 Java进阶之路前言一、Java入门 Java基础 1、Java概述 1.1 什…

6.PPT:魏女士-高新技术企业政策【19】

目录 NO1234​ NO567 ​ NO1234 创建“PPT.pptx”考生文件夹Word素材文档&#xff1a;选中对应颜色的文字→选中对应的样式单击右键按下匹配对应文字&#xff1a;应用所有对应颜色的文字开始→创建新的幻灯片→从大纲&#xff1a;考生文件夹&#xff1a;Word素材重置 开始→版…

C++ 创建和配置dll与lib库

C简明教程&#xff08;13&#xff09;创建和配置dll与lib库_怎样生成lib库和dll库-CSDN博客 C 动态库与静态库详解 一、为什么要引入库的概念 在 C 编程中&#xff0c;随着项目规模的不断扩大&#xff0c;代码量也会急剧增加。如果将所有代码都写在一个源文件中&#xff0c;…

【R语言】写入数据

一、写入R语言系统格式的数据 R语言自带.RData和.rds两种数据格式。 通过使用save()函数和saveRDS()函数将R语言数据处理结果保存为此类数据。 # 将iris数据集保存为RData文件 save(listc("iris"), file"iris.RData") # 将iris数据集保存为rds文件 save…

uniapp引入cloudflare人机验证

https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/ 使用cloudflare需要注册个账号&#xff0c;并添加网站域名 获取站点密钥与密钥 1.index.html引入 <script src"https://challenges.cloudflare.com/turnstile/v0/api.js?renderexpl…

github下载失败网页打开失败 若你已经知道github地址如何cmd下载

直接打开命令行&#xff1a; winr cmd 输入&#xff1a;git clone 地址 eg&#xff1a;git clone https://github.com/akospasztor/stm32f103-dfu-bootloader

【原子工具】快速幂 快速乘

题幂算.一切即1 阴阳迭变积微著&#xff0c;叠浪层峦瞬息功 莫道浮生千万事&#xff0c;元知万象一归宗 文章目录 快速幂原始快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 模下意义的快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 快速乘龟速…

OpenCV:特征检测总结

目录 一、什么是特征检测&#xff1f; 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT&#xff08;尺度不变特征变换&#xff09; 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…