学习心得
Servlet执行原理:
1.当服务器接收到客户端,浏览器请求URL索取资源,创建解析请求URL路径URL解析出/servlet /add servlet 路径
2.查找@WebServlet("/servlet/AddServlet")有没有相对应URL映射?如果有就找到Addservlet这个类
3.Tomcat加载到servlet容器中,以字节码运行并创建对象调用doget dopost,生成应答结果
servlet是一个类(JVM)
心情
今天主要学习了jsp,这个相对于html来说有一点老,都是语法问题,容易出面试题比如说
1、JSP脚本片段中只能出现java代码,不能出现HTML元素。在访问JSP时,JSP引擎翻译JSP页面中的脚本片段。
2、JSP脚本片段中的java代码必须严格遵守java的规则
3、一个JSP页面是可以有多个脚本片段
4、多个脚本片段中的代码可以相互访问
掌握情况:理解不了就背吧
学习总结
面试题:JSP和servlet的区别?
1、JSP本质上就是一个servlet
2、JSP更侧重于视图展示,servlet更侧重于逻辑处理
3、先有的servlet,后有的JSP
// 向页面打印输出 out.print(num); <%--JSP表达式--%> <%= num %> <%--JSP声明片段--%> <%! int x = 10; static{ } public void fun(){
JSP的指令标识
<%@ 指令名 属性1="值1" 属性2="值2" .....%>
page指令:定义整个JSP页面的相关属性
include指令:引入其他的JSP页面。先把两个页面结合,在去编译成servlet。
taglib指令:引入页面上需要用到的标签库
JSP标签
1、内置标签
(1)jsp:include:引入指定的页面
(2)jsp:forward:转发页面
(3)jsp:param:传参数
2、JSTL标签,需要导入JSTL标签库
3、自定义标签
面试题:jsp:include标签和include指令的区别?
include标签:先把要引入的页面编译,再合并
include指令:先把要引入的页面合并,再编译
面试题:JSP作用域:四大作用域:
1、当前页(pageContext):一个属性只能在一个页面中获取。
2、一次请求(request):一个页面中设置的属性,范围是一次请求。
3、一次会话(session):一个会话中的属性,只要页面不关闭,都能获取到
4、整个web应用(application):在这个服务器上,当前项目下的任何一个位置都能获取。
面试题:JSP的九大内置对象。内置:不需要创建,直接就能用。
1、request ---------- 请求
2、response ---------- 响应
3、session* ---------- 会话
4、out ---------- 输出
5、page ---------- 当前JSP页面对象
6、application ---------- 应用
7、exception* ---------- 异常,只能在指定了isErrorPage="true"
8、pageContext ---------- 当前页,作用域
9、config ---------- 配置
EL表达式的缺陷:1、只能读,不能写 2、不支持流程控制语句
作用域对象的使用规则:从小到大使用!
1.在JSP脚本片段中只能写java 2.在body中只能写html
练习
分页查询
<%@ 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> <%-- 分页查询: 1、总记录数 2、总页数 3、每页显示的记录数 4、每页展示的数据集合 5、导航栏的页码 【1,2,3,4,5】 6、是否是第一页 7、是否是最后一页 8、当前页 --%> <h1><a href="${pageContext.request.contextPath}/page.do?pagenum=1">加载分页导航</a></h1> 当前页:【${requestScope.pagenum}】,总页数【${requestScope.pageCount}】 <hr> <c:if test="${requestScope.pagenum ne 1}"> <a href="${pageContext.request.contextPath}/page.do?pagenum=1">首页</a> <a href="${pageContext.request.contextPath}/page.do?pagenum=${requestScope.pagenum - 1}">上一页</a> </c:if> <c:if test="${requestScope.pagenum eq 1}"> <span>首页</span> <span>上一页</span> </c:if> <c:forEach begin="1" end="${requestScope.pageCount}" var="i"> <c:if test="${requestScope.pagenum eq i}"> <span>${i}</span> </c:if> <c:if test="${requestScope.pagenum ne i}"> <a href="${pageContext.request.contextPath}/page.do?pagenum=${i}">${i}</a> </c:if> </c:forEach> <c:if test="${requestScope.pagenum ne requestScope.pageCount}"> <a href="${pageContext.request.contextPath}/page.do?pagenum=${requestScope.pagenum + 1}">下一页</a> <a href="${pageContext.request.contextPath}/page.do?pagenum=${requestScope.pageCount}">尾页</a> </c:if> </body> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现