随笔 - 54,  文章 - 2,  评论 - 8,  阅读 - 1587

学习心得

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,56、是否是第一页
    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>
复制代码

 

posted on   骐琳  阅读(14)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
你点我就回上面去了ヾ(≧O≦)〃嗷~
点击右上角即可分享
微信分享提示