学习心得
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>