# Javaweb笔记
**Repository Path**: wangprice2017/java-web-notes
## Basic Information
- **Project Name**: Javaweb笔记
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MulanPSL-1.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-05-13
- **Last Updated**: 2022-05-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 概述
1. **WEB-INF下面包括哪些内容**
1. **classes目录**,支持该web应用程序的各类文件
2. **lib目录**,web应用程序使用的全部jar包
3. **web.xml文件**,web容器运行web应用程序所需要的信息
## Servlet核心技术Servlet核心技术
1. **简述Servlet生命周期各阶段的内容**
1. **加载并实例化servlet** --- 使用class.forName()
2. **初始化servlet** ---- init(ServletConfig config)
3. **为客户提供服务** ---- service
4. **销毁和卸载servlet** ---- destroy
2. **简述HTTP请求消息的各部分内容**
1. **请求行**,有 方法名, 请求资源的url和HTTP版本三部分组成
2. **请求头**,指定请求使用的浏览器信息字符编码信息及客户能处理的页面类型
3. **数据**
3. **简述GET方法和POST方法的区别**
| 特征 | GET | POST |
| :------- | ----------------------------------------------- | ------------------------------------------------------------ |
| 资源类型 | 静态的或动态的 | 动态的 |
| 数据类型 | 文本 | 文本或二进制数据 |
| 数据量 | 一般不超过255个字符 | 没有限制 |
| 可见性 | 数据是URL的一部分,在浏览器的地址栏中对用户可见 | 数据不是URL的一部分而是作为请求的消息体发送,在浏览器的地址栏中对用户不可见 |
| 数据缓存 | 数据可在浏览器的URL历史中缓存 | 数据不能在浏览器的URL历史中缓存 |
4. **请列举3个请求头的参数及其含义,并给出检索请求头的方法**
**User-Agent** 关于浏览器和它的平台信息
**Host**: 服务器的DNS名字
**Date**: 消息被发送的日期和时间
**String getHeader(String name)**
**long getDateHeader(String name)**
5. **简述HTTP响应消息的各部分内容**
1. **状态行** 三部分组成,
- HTTP版本
- 请求结果的响应状态码
- 描述状态码的短语
2. **响应头**
服务器向客户端发送的消息
3. **响应数据**
空行后面是响应数据
6. **响应重定向与请求转发的区别**
- 请求转发是**服务器端控制权的转移**,客户端**不会显示转发后的资源地址**
- 重定向是**浏览器向新资源发送的请求**,所有请求作用域的参数在重定向到下一页时都会失效,新资源URL在地址栏可见。**不能请求WEB-INF下的资源**
- 请求转发可以**共享请求作用域的数据**
## JSP技术基础
1. **JSP页面的生命周期有哪几个阶段?**
| **阶段名称** | **说明** |
| ----------------- | ----------------------------------------------- |
| 页面转换 | 对页面解析并创建一个包含对应Servlet的Java源文件 |
| 页面编译 | 对Java源文件编译 |
| 加载类 | 将编译后的类加载到容器中 |
| 创建实例 | 创建一个Servlet实例 |
| 调用jspInit() | 调用其他方法之前调用该方法初始化 |
| 调用_jspService() | 对每个请求调用一次该方法 |
| 调用jspDestroy() | 当Servlet容器决定停止Servlet服务时调用该方法 |
2. **简述JSP页面的转换规则**
- –所有JSP声明都转换成页面实现类的成员,它们被原样拷贝。例如,声明的变量转换成实例变量,声明的方法转换成实例方法。
- –所有JSP小脚本都转换成页面实现类的\_jspService()的一部分,它们也被原样拷贝。小脚本中声明的变量转换成\_jspService()的局部变量,小脚本中的语句转换成_jspService()中的语句。
- 所有的JSP表达式都转换成为_jspService()的一部分,表达式的值使用out.print()语句输出。
- 有些指令在转换阶段产生Java代码,例如,page指令的import属性转换成页面实现类的import语句。
- 所有的JSP注释都被忽略
3. **JSP的隐含变量有哪些**

4. **列举3个page指令的属性,并说明其作用**

5. **动态包含和静态包含有什么异同**
**静态包含**在翻译时,将多个JSP合并翻译成一个Servlet
**动态包含**在翻译时,每个JSP文件都翻译成了对应的Servlet 在程序运行加载到JVM中的时候动态合并
6. **简述JSP页面中的四个作用域对象的存在性和可访问性,以及数据共享方法**

7. **简述JavaBean的编写规范**
1. JavaBeans应该是public类,且具有无参数的public构造方法。也可以定义带参数构造方法。
2. 类的成员变量一般称为属性(property. 对每个属性访问权限一般定义为private。注意:属性名必须以小写字母开头。
3. 每个属性通常定义两个public方法,一个是访问方法(getter),一个是修改方法(setter),使用它们访问和修改JavaBeans的属性值。
8. **简述MVC设计模式的一般步骤**
1. 定义JavaBeans存储数据
2. 编写Servlet处理请求
3. 数据结果存储在作用域中
4. 转发请求到JSP页面
5. 从JavaBeans中提取数据
## 会话
1. **简述session的管理机制**
1. 当客户向服务器发送第一个请求时,服务器就可以为该客户创建一个HttpSession会话对象,并将请求对象与该会话对象关联。服务器在创建会话对象时为其指定一个唯一标识符,称为会话ID,它可作为该客户的唯一标识。
2. 当服务器向客户发送响应时,服务器将该会话ID与响应数据一起发送给客户,这是通过Set-Cookie响应头实现的.
3. 客户在接收到响应后将会话ID存储在浏览器的内存中。当客户再次向服务器发送一个请求时,它将通过Cookie请求头把会话ID与请求一起发送给服务器。
4. 服务器接收到请求后,从请求对象中取出会话ID,在服务器中查找之前创建的会话对象,找到后将该请求与之前创建的ID值相同的会话对象关联起来。
上述过程的第(2)到第(4)步一直保持重复。
如果客户在指定时间没有发送任何请求,服务器将使会话对象失效。一旦会话对象失效,即使客户再发送同一个会话ID,会话对象也不能恢复。
2. **简述使用数据库的主要步骤**
1. 加载驱动程序。
2. 建立连接对象。
3. 创建语句对象。
4. 执行语句获得结果。
5. 关闭建立的对象。
3. **如何配置并使用局部数据源和全局数据源(觉得不是重点会看懂老师给的代码)**
在Web应用程序的META-INF目录中建立一个context.xml文件,下面代码配置了连接MySQL数据库的数据源,内容如下
```html
*
*
* 在没有可用连接的情况下,连接池在抛出异常前等待的最大毫秒数
```
**使用局部:**
使用javax.naming.Context接口的lookup()查找JNDI(Java Naming and Directory Interface,JNDI)数据源
```java
Context context = new InitialContext();
DataSource dataSource =
(DataSource)context.lookup("**java:comp****/****env**/jdbc/webstoreDS");
得到了DataSource对象的引用后,就可以通过它的getConnection()获得数据库连接对象Connection。
dbconn = dataSource.getConnection();
```
**配置全局:**
1. 首先在server.xml文件的**\**元素内增加下面代码。
```html
```
2. 在Web应用程序中建立一个META-INF目录,在其中建立一个context.xml文件
## 表达式语言
1. **简述EL的主要功能**
- 提供了一组简单的运算符。
- 访问作用域变量、JavaBeans对象、集合元素。
- 提供一组隐含变量,访问请求参数、作用域数据等。
- EL提供了在JSP中使用Java函数的功能。
2. **EL隐含变量有哪些?分别能访问哪些数据**

## JSTL与自定义标签
1. **JSTL核心标签库包括哪些具体内容**
