2 JavaScript 与 HTML 的融合的代码实例
1)在 head 或者 body 标签内,用 script 标签来书写 JavaScript 代码
例如在 head 中:
一张网页
一个段落
试一试
在 body 中:
A Web Page
一个段落
试一试
<–!把脚本置于 元素的底部,可改善显示速度,–>
2)使用 script 标签引入单独的 JavaScript 代码文件
略。
3 JavaScript 的语法是怎样的
JavaScript 是弱类型的语言,同时 JavaScript 的数组会自动扩容。
4 介绍一下 JavaScript 的 DOM 模型
JavaScript 中的 DOM (Document Object Model) ,即文档对象模型,是把文档中的标签,属性,文本等转换成对象来管理的模型,通过将其进行对象化,使得我们可以直接根据 DOM 来访问 HTML 文档内容。
DOM 模型常用的方法如下:
| 方法 | 功能 |
| — | — |
| document.getElementById(elementId)
| 通过标签的 id 属性查找元素 |
| document.getElementsByName(elementName)
| 通过标签的 name 属性查找元素 |
| document.getElementsByTagName(tagname)
| 通过标签名查找元素 |
三者的优先级从上到下以此递减。
5 介绍一下 JavaScript 的事件
事件是电脑输入设备与网页页面进行交互的一种响应,可分为静态注册(直接赋予)和动态注册(通过 DOM 模型)。
常用的事件:
| 事件名 | 作用 |
| — | — |
| onload 加载完成事件 | 浏览器页面加载完成后,所执行的 JS 初始化代码 |
| onclick 单击事件 | 用户点击了 HTML 元素 |
| onblur 失去焦点事件 | 用户的光标从原本的某个地方移开就算失去焦点 |
| onchange 内容发生改变事件 | 下拉列表或者输入框的内容发生改变 |
| onsubmit 表单提交事件 | 常用于表单提交前,验证所有表单项是否合法 |
========================================================================
1 说一说 JSP 的定义
JSP 表示的是服务器页面,它的主要作用是代替 Servlet 程序回传 HTML 页面的数据。尽管 JSP 的代码是写在前端的,但其本质是后端语言。
JSP HTML 的融合方式是重新定义一个 .jsp 的文件,然后将 HTML 文件进行复制。
-
与 JavaScript 相比:虽然 JavaScript 可以在客户端动态生成 HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等;
-
与纯 Servlet 相比:JSP 可以很方便的编写或者修改 HTML 网页而不用去面对大量的 println 语句;
-
与静态 HTML 相比:静态 HTML 不包含动态信息。
因此,JSP 的优点:可以动态地生成 HTML 页面,而且还可以方便地与服务器进行交互。
2 说一说 JSP 标签
JSP 共有六种标签,分别为指令标签、声明标签、表达式标签、代码标签、注释标签、动作标签。
指令标签有三种,分别如下:
| 指令 | 描述 |
| :-- | :-- |
| <%@ page … %> | 定义网页依赖属性,比如缓存信息、导入的 Java 类等 |
| <%@ include … %> | 包含其他文件 |
| <%@ taglib … %> | 引入标签库的定义 |
三个脚本标签为:声明标签、表达式标签、代码标签,其作用是在 JSP 页面中加入 Java 代码来实现功能。
| 脚本类型 | 格式 | 作用 | 示例 |
| :-: | :-: | :-: | :-: |
| 声明脚本 | <%! %>
| 申明变量或者方法,供后面的 Java 代码使用 | <%! int a, b, c; %>
|
| 表达式脚本 | <%= %>
| 在 jsp 页面上输出数据 | Today's date: <%= (new java.util.Date()).toLocaleString()%>
|
| 代码脚本 | <% %>
| 在 jsp 页面中定义自己需要的 Java 代码 | – |
动作标签示例:
| 名称 | 作用 |
| :-: | :-: |
| jsp:forward | 把请求转到一个新的页面。 |
3 说一说 JSP 的九大内置对象
JSP 中的内置对象,是指 Tomcat 在翻译 JSP 页面成为 Servlet 源代码后,内部提供的九大对象。此时翻译而来的 Java 源代码就是由这九大内置对象组合而成的。
| 对象名 | 作用 |
| :-: | :-: |
| request | 请求对象 |
| response | 响应对象 |
| pageContext | JSP 的上下文对象 |
| session | 会话对象 |
| application | ServletContext对象 |
| config | ServletConfig对象 |
| out | JSP输出流对象 |
| page | 指向当前JSP的对象 |
| exception | 异常对象 |
4 说一说 JSP 的四大域对象
域对象是可以像Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围。首先说明这四大域对象是属于九大内置对象的,四个域对象分别为:
| 域对象 | 所属类 | 作用域 |
| :-: | :-: | :-: |
| pageContext | PageContextImpl 类 | 只在当前 JSP 页面范围内有效 |
| request | HttpServletRequest 类 | 一次请求内有效 |
| session | HttpSession 类 | 一个会话范围内有效(即打开浏览器访问服务器到关闭浏览器) |
| application | ServletContext 类 | 整个 web 工程范围内都有效(只要 web 工程不停止,数据都在) |
5 介绍一下静态包含和动态包含的区别
静态包含的代码为:<%@ include file="/include/include2.jsp"%>
动态包含的代码为:<jsp:include page="/include/include2.jsp"></jsp:include>
静态包含不可以传递参数,而动态包含可以,静态包含适合没有大量 Java 代码的 JSP,而动态包含适合需要传递参数,且含有大量 Java 代码的 JSP。
6 简述转发和重定向的区别
// 转发
request.getRequestDispatcher("/SecondServlet?addParam=newParam").forward(request, response);
// 重定向
response.sendRedirect("/WebSocket/SecondServlet");
-
转发只访问服务器一次,而重定向访问服务器两次;
-
转发页面的 URL 不会改变,而重定向地址会改变;
-
转发只能转发到自己的 web 应用内,重定向可以重定义到任意资源路径;
-
转发时两个文件属于同一次请求,所以共用一个 request 域;而重定向会产生一个新的请求,所以无法共享之前的 request 域信息;
可以这么理解:
转发相当于,张三向你借钱,但是你兜里没钱,所以你去找李四借到钱之后借给张三。对于张三而言并不知道你的钱是和李四借的。
重定向相当于,张三向你借钱,你兜里没钱,你告诉他李四有钱,所以张三再次去找李四借钱。
7 简述 JSP 的生命周期
JSP 生命周期定义了 JSP 从创建到销毁的整个过程。JSP 与Servlet 生命周期类似,不同的是,JSP 需要先被编译成 Servlet。
JSP 生命周期阶段如下:
-
编译:JSP 通过 servlet 容器编译生成 servlet 类;
-
初始化:加载该类,创建其实例,并调用它的初始化方法;
-
处理请求:利用该实例处理请求;
-
销毁:销毁该实例。
============================================================================
简述 Servlet 的定义