JavaWeb练习题目

Web 应用基础

  1. 简述 C/S 应用程序与 B/S 应用程序的区别?
    a. C/S 结构应用程序(Client/Server):
    客户端—服务器结构。
    凡是需要在客户的机器上安装客户端软件的应用程序都是 CS 架构的应用程序。

优点:响应速度快,安全性强,一般应用于局域网中。
缺点:需要经常更新客户端,开发维护成本高。

b. B/S 结构应用程序(Browser/Server):
浏览器—-服务器结构。
凡是使用浏览器运行的应用程序都是 BS 架构的应用程序。

优点:跨平台,客户端零维护,即不需要更新客户端。
缺点:响应速度受制于网络。

JavaWeb 就是使用 java 语言开发 B/S 结构应用程序。

  1. 简述 URL 的各个组成部分?
    URL:Uniform Resource Locator 即统一资源定位符:用于完整地描述 Internet 上网页和其他资源的地址的一种标识方法。就是我们通常所说的网址。 URL 是惟一能够识别 Internet 上具体的计算机、目录或文件位置的命名约定。20240930165224
  2. 简述如何修改 Tomcat 的端口号?
    20240930170234
    在 Tomcat 安装目录下的 conf 文件夹中,存放 Tomcat 的一些配置文件,里面的 server.xml 为主配置文件,打开 server.xml 配置文件,修改 Tomcat 默认端口:port 改为自定义端口即可,默认端口为 8080.
  3. 简述 JAVAEE 工程的标准目录结构?
    20240930170037
  4. 简述同步请求模式与异步请求模式的区别?
    a. 传统的超链接、表单等提交请求方式为同步请求。也就是说:当一个请求发送后,在响应没有返回之前,程序不会继续往下运行。
    b. 使用 ajax 提交方式为异步请求。也就是说:当一个请求发送后,在响应没有返回之前,程序会继续往下运行。

Servlet 开发技术

20241004150946

  1. 简述 Servlet 的创建过程?
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
32
33
34
35
36
37
38
39
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置请求信息的字符编码(必须在使用request之前进行设置)
request.setCharacterEncoding("utf-8");
//使客户端浏览器并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
response.setContentType("text/html;charset=utf-8");
//设置响应信息的字符编码(必须在创建响应输出流之前进行设置)
response.setCharacterEncoding("utf-8");
//获取客户端提交参数
String name = request.getParameter("name");
//创建响应输出流
PrintWriter out = response.getWriter();
//向客户端响应信息
out.println("<html>");
out.println(" <head><title>Servlet</title></head>");
out.println(" <body>");
out.println("你好,"+name+",欢迎来到Servlet的世界!");
out.println(" </body>");
out.println("</html>");
//关闭响应输出流
out.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
1. 一个类继承HttpServlet类,我们就将它称为一个Servlet。
2. 继承HttpServlet类后,必须要重写doGet和doPost方法。 当get请求时,自动由doGet方法进行处理。 当post请求时,自动由doPost方法进行处理。
3. doGet和doPost方法都有两个参数:HttpServletRequest、HttpServletResponse HttpServletRequest:封装了请求信息。 HttpServletResponse:封装了响应信息。
4. 所以,可以使用HttpServletRequest对象中的getParameter方法获取客户端提交参数。 使用HttpServletResponse创建响应输出流,向客户端响应信息。
5. @WebServlet注解中,使用urlPatterns属性来设置Servlet映射:将客户端请求映射到对应的Servlet上。
6. @WebServlet注解中,也可以简写为:@WebServlet("/hello")
  1. 简述 HttpServletRequest、HttpServletResponse 两个参数的作用?
    HttpServletRequest:封装了请求信息。 HttpServletResponse:封装了响应信息。
    可以使用 HttpServletRequest 对象中的 getParameter 方法获取客户端提交参数。 使用 HttpServletResponse 创建响应输出流,向客户端响应信息。

HttpServletRequest 常用 API

  1. getParameter() 获取客户端提交的单值参数,也就是返回值是一个字符串。
  2. getParameterValues() 获取客户端提交的多值参数(复选框组),也就是返回值是一个字符串数组。
  3. setCharacterEncoding() 设置请求的字符编码。

HttpServletResponse 常用 API

  1. getWriter() 获取一个向客户端响应的输出流。
  2. setCharacterEncoding() 设置输出流的字符编码。
  3. setContentType() 设置 MIME 类型,也就是通知浏览器使用何种编码解析响应数据。
  4. 简述 Servlet 生命周期过程?
    Servlet 实例从创建直到毁灭的整个过程,就是 Servlet 生命周期。以下是 Servlet 遵循的过程: 1. Servlet 容器创建 Servlet 的实例(下面会详述 Servlet 实例创建时机) 2. Servlet 通过调用 init () 方法进行初始化(只调用一次)。 3. Servlet 调用 service() 方法来处理客户端的请求(每一次请求都要调用一次)。
    service() 方法会根据请求的方式自动调用 doGet 或 doPost。 4. Servlet 通过调用 destroy() 方法终止(只调用一次)。
    在调用 destroy() 方法之后,Servlet 对象被标记为垃圾回收。
  5. 简述@WebServlet 注解的作用?
    @WebServlet 注解中,使用 urlPatterns 属性来设置 Servlet 映射:将客户端请求映射到对应的 Servlet 上.
  6. 简述如何配置 Servlet 的创建时机?

@WebServlet 中的loadOnStartup

Servlet 对象由 Web 服务器负责创建,创建的时机可以使用 loadOnStartup 属性进行配置:

  1. loadOnStartup 属性的值必须是一个整数,表示 servlet 应该被载入的顺序
  2. 当值为 0 或者大于 0 时,表示容器在应用启动时就加载并初始化这个 servlet;
  3. 当值小于 0 或者没有指定时,则表示容器在该 servlet 被选择时才会去加载。
  4. 正数的值越小,该 servlet 的优先级越高,应用启动时就越先加载。
  5. 当值相同时,容器就会自己选择顺序来加载。
  6. 取值 1,2,3,4,5 代表的是优先级,而非启动延迟时间。
  1. 什么是 HTTP 状态码?请至少说出 4 种 HTTP 状态码及其作用?

HTTP 状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的 3 位数字代码。它由 RFC 2616 规范定义的。所有状态码的第一个数字代表了响应的五种状态之一。

1xx:消息。

这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

2xx:成功。

代表请求已成功被服务器接收、理解、并接受。比如:
200:请求已成功。出现此状态码是表示正常状态。

3xx:重定向。

代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

4xx:请求错误。

代表客户端请求发生错误。比如:

404:找不到请求的资源
405:服务器端处理请求方法不被允许。

5xx:服务器错误。

代表服务器端出现错误。 比如:
500:服务器端代码错误。
503:服务器异常(通常重启服务器即可解决)。

  1. 简述 CORS 的跨域设置?
    Access-Control-Allow-Origin:指示允许访问资源的源。 Access-Control-Allow-Credentials:指示是否允许发送凭据(如 Cookies)

CORS 是 H5 新增的一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing)。
跨域只存在于浏览器端,不存在于 Node.js/python/ java 等其它环境;跨域请求是能够发出去的,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。
CORS 可以在服务器端响应时,向浏览器发送 “Access-Control-Allow-Origin” 配置信息,通知浏览器解除跨域限制。如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。
所以,CORS 配置要写在服务器端。

CORS 跨域设置:

1
response.setHeader("Access-Control-Allow-Origin", "*");

其中,“*”可以更换为需要配置的 URL

  1. 编程题:
    a. 使用 Servlet 实现一个登录案例。
    b. 编写一个用户登录页面,包括用户名和密码表单。
    c. 编写一个 LoginServlet,并在 Servlet 中判断是否登录成功,然后向前端返回成功或失败的 json 数据。
    d. 前端使用 ajax 请求,并通过服务器端返回的 json 数据来显示是否登录成功。