JSP基础

通过servlet进行整个网站的开发也是可以的,不过在servlet中输出HTML代码,特别是比较复杂的HTML代码,就会显得特别麻烦。为了解决这种难题,我们采用一种技术JSP,可以很方便的在HTML代码中编写java代码,本文就对这种技术进行讲解。

JSP代码的执行过程

  1. 将jsp文件转换为.java文件,此.java文件就是一个servlet(可以发现此.java类继承了org.apache.jasper.runtime.HttpJspBase,而HttpJspBase 继承了HttpServlet);
  2. 将此servlet编译为.class文件;
  3. 执行class文件生成HTML文件;
  4. 将此HTML文件由服务器响应给客户端。

    这里写图片描述

JSP的页面元素

这里写图片描述

注:
<%=%> 不需要分号结尾,<%%> 需要以分号结尾,和java代码一样。

JSP的include

include有两种方式指令include和动作include.二者的区别如下:
指令include <%@include file=”footer.jsp” %>,footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中,最后只会生成一个hello_jsp.java文件;
动作include ,footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中,还会有一个footer_jsp.java独立存在。 hello_jsp.java 会在服务端访问footer_.jsp.java,然后把返回的结果,嵌入到响应中;
指令include导致两个jsp合并成为同一个java文件,所以就不存在传参的问题,在发出hello.jsp 里定义的变量,直接可以在footer.jsp中访问;
动作include是对footer.jsp进行了一次独立的访问,那么就有传参的需要。

Cookie是一种浏览器和服务器交互数据的方式。Cookie是由服务器端创建,但是不会保存在服务器。创建好之后,发送给浏览器。浏览器保存在用户本地。下一次访问网站的时候,就会把该Cookie发送给服务器。
这里写图片描述

Session

Session对应的中文翻译是会话。
会话指的是从用户打开浏览器访问一个网站开始,无论在这个网站中访问了多少页面,点击了多少链接,都属于同一个会话。 直到该用户关闭浏览器为止,都属于同一个会话。
这里写图片描述

JSP的隐式对象

JSP的隐式对象指的是不需要显示定义,直接就可以使用的对象,比如request,response JSP一共有9个隐式对象,分别是
request,response,out ,pageContext,,session,application ,page,config,exception。

JSP Standard Tag Library

JSTL允许开人员可以像使用HTML标签 那样在JSP中开发Java功能。 JSTL库有core, i18n, fmt, sql 等等。 i18n和sql用的很少,core和fmt在工作中会用到。
为了能够在JSP 中使用JSTL,首先需要两个jar包,分别是jstl.jar 和standard.jar。
在页面中使用JSTL需要在jsp中 通过指令进行设置

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix='fmt' %>  
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

EL表达式

不同版本的tomcat是否默认开启对EL表达式的支持,是不一定的。所以为了保证EL表达式能够正常使用,需要在<%@page 标签里加上isELIgnored=”false”。

### 关于2024年华为ODEPython相关真题 针对2024年华为ODE中的Python编程部分,确实存在一些特定类型的目。其中一道典型目涉及正则表达式的应用[^2]。 #### 正则表达式替换问描述 给定一段字符串以及若干组模式串和替换成的目标串,要求按照每组模式串依次对字符串进行匹配并替换操作,最终返回处理后的字符串。 #### 解决方案概述 此问主要考察对于Python内置`re`模块的理解与运用能力。具体实现如下: ```python import re def regex_replace(text, patterns): result = text for pattern, replacement in patterns: result = re.sub(pattern, replacement, result) return result ``` 上述函数接收两个参数:一个是待处理的始文本;另一个是由多个元组组成的列表,每个元组包含一个正则表达式模式及其对应的替代字符序列。该方法遍历所有模式并对输入文本执行相应的替换动作。 为了更好地理解如何使用这个功能,下面给出几个具体的例子来展示其工作理: ```python if __name__ == "__main__": test_cases = [ ("hello world", [("world", "universe")]), ("abc123xyz789", [(r"\d+", "#"), (r"[a-z]", "*")]) ] for case in test_cases: print(f"Original Text: {case[0]}") print(f"After Replacement: {regex_replace(*case)}\n") ``` 这段代码会输出经过不同规则转换之后的结果,有助于加深对应者关于正则表达式语法的记忆,并提高解决实际问的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值