# Javaweb笔记 **Repository Path**: linxi2251/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**: 2020-12-29 - **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的隐含变量有哪些** ![image-20201229160024855](JavaWeb简答题.assets/image-20201229160024855.png) 4. **列举3个page指令的属性,并说明其作用** ![image-20201229160049656](JavaWeb简答题.assets/image-20201229160049656.png) 5. **动态包含和静态包含有什么异同** **静态包含**在翻译时,将多个JSP合并翻译成一个Servlet **动态包含**在翻译时,每个JSP文件都翻译成了对应的Servlet 在程序运行加载到JVM中的时候动态合并 6. **简述JSP页面中的四个作用域对象的存在性和可访问性,以及数据共享方法** ![image-20201229160622419](JavaWeb简答题.assets/image-20201229160622419.png) 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隐含变量有哪些?分别能访问哪些数据** ![image-20201229161545224](JavaWeb简答题.assets/image-20201229161545224.png) ## JSTL与自定义标签 1. **JSTL核心标签库包括哪些具体内容** ![image-20201229161628758](JavaWeb简答题.assets/image-20201229161628758.png)