Servlet开发技术
[外链图片转存中...(img-Cnu8X2V4-1728026684827)]
- 简述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")
- 简述HttpServletRequest、HttpServletResponse两个参数的作用?
HttpServletRequest:封装了请求信息。 HttpServletResponse:封装了响应信息。
可以使用HttpServletRequest对象中的getParameter方法获取客户端提交参数。 使用HttpServletResponse创建响应输出流,向客户端响应信息。
HttpServletRequest常用API
- getParameter() 获取客户端提交的单值参数,也就是返回值是一个字符串。
- getParameterValues() 获取客户端提交的多值参数(复选框组),也就是返回值是一个字符串数组。
- setCharacterEncoding() 设置请求的字符编码。
HttpServletResponse常用API
-
getWriter() 获取一个向客户端响应的输出流。
-
setCharacterEncoding() 设置输出流的字符编码。
-
setContentType() 设置MIME类型,也就是通知浏览器使用何种编码解析响应数据。
-
简述Servlet 生命周期过程?
Servlet实例从创建直到毁灭的整个过程,就是Servlet 生命周期。以下是 Servlet 遵循的过程:- Servlet 容器创建 Servlet 的实例(下面会详述Servlet实例创建时机)
- Servlet 通过调用 init () 方法进行初始化(只调用一次)。
- Servlet 调用 service() 方法来处理客户端的请求(每一次请求都要调用一次)。
service() 方法会根据请求的方式自动调用doGet或doPost。 - Servlet 通过调用 destroy() 方法终止(只调用一次)。
在调用 destroy() 方法之后,Servlet 对象被标记为垃圾回收。
-
简述@WebServlet注解的作用?
@WebServlet注解中,使用urlPatterns属性来设置Servlet映射:将客户端请求映射到对应的Servlet上.
-
简述如何配置Servlet的创建时机?
@WebServlet中的loadOnStartup
Servlet对象由Web服务器负责创建,创建的时机可以使用loadOnStartup属性进行配置:
- loadOnStartup属性的值必须是一个整数,表示servlet应该被载入的顺序
- 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
- 当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
- 正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
- 当值相同时,容器就会自己选择顺序来加载。
- 取值1,2,3,4,5代表的是优先级,而非启动延迟时间。
- 什么是HTTP状态码?请至少说出4种HTTP状态码及其作用?
HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。它由 RFC 2616 规范定义的。所有状态码的第一个数字代表了响应的五种状态之一。
1xx:消息。
这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。
2xx:成功。
代表请求已成功被服务器接收、理解、并接受。比如:
200:请求已成功。出现此状态码是表示正常状态。
3xx:重定向。
代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
4xx:请求错误。
代表客户端请求发生错误。比如:
404:找不到请求的资源
405:服务器端处理请求方法不被允许。
5xx:服务器错误。
代表服务器端出现错误。 比如:
500:服务器端代码错误。
503:服务器异常(通常重启服务器即可解决)。
- 简述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
- 编程题:
a. 使用Servlet实现一个登录案例。
b. 编写一个用户登录页面,包括用户名和密码表单。
c. 编写一个LoginServlet,并在Servlet中判断是否登录成功,然后向前端返回成功或失败的json数据。
d. 前端使用ajax请求,并通过服务器端返回的json数据来显示是否登录成功。