JavaWeb(二)

Servlet开发技术

[外链图片转存中...(img-Cnu8X2V4-1728026684827)]

  1. 简述Servlet的创建过程?
java 复制代码
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跨域设置:

java 复制代码
response.setHeader("Access-Control-Allow-Origin", "*");

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

  1. 编程题:
    a. 使用Servlet实现一个登录案例。
    b. 编写一个用户登录页面,包括用户名和密码表单。
    c. 编写一个LoginServlet,并在Servlet中判断是否登录成功,然后向前端返回成功或失败的json数据。
    d. 前端使用ajax请求,并通过服务器端返回的json数据来显示是否登录成功。
相关推荐
_oP_i1 小时前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx1 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
FF在路上3 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
众拾达人4 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.4 小时前
Mybatis-Plus
java·开发语言
不良人天码星4 小时前
lombok插件不生效
java·开发语言·intellij-idea