目录
1.HttpServlet
2.HttpServletRequest
3.HttpServletResponse
本文介绍servlet API的详细情况
重点掌握以下三个类,就可以完成servlet的大部分开发了
1.HttpServlet
2.HttpServletRequest
3.HttpServletResponse
1.HttpServlet
写一个servlet代码,往往是要继承HttpServlet,重写其中的方法
public class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("你好 worldzd");//显示在浏览器页面上
System.out.println("hello world");//打印在tomcat控制台上
}
}
不需要写main方法,tomcat中有main方法,把代码放在tomcat上运行,就相当于把代码插入到tomcat中运行(在一次处理请求的过程中,tomcat完成的大部分工作,剩下的、差异化的工作,由代码实现)
HttpServlet中的方法
方法名称 | 调用时机 |
---|---|
init | 在 HttpServlet 实例化之后被调用一次(servelt实例化后自动执行,完成初始化工作) |
destroy | 在 HttpServlet 实例不再使用的时候调用一次(servlet销毁之前自动执行,完成释放资源工作) |
service | 收到 HTTP 请求的时候调用(每次收到http请求时自动执行) |
doGet | 收到 GET 请求的时候调用(由 service 方法调用) |
doPost | 收到 POST 请求的时候调用(由 service 方法调用) |
doPut/doDelete/... | 收到其他请求的时候调用(由 service 方法调用) |
上述方法,都是在子类中重写的,都不需要手动调用,tomcat在合适的时机会自动调用
经典面试题:servlet的生命周期(什么时间点,做什么事情)
init初始化,service处理请求,destroy销毁、释放资源
前三个方法实际开发中很少用,service一般会被doGet/doPost替代,而关闭tomcat有两种方式①直接关闭tomcat进程,这种情况来不及调用destroy;(更常见的方式)②通过8005管理端口,给tomcat发送停机指令,只有这种情况能执行destroy
2.HttpServletRequest
表示了一个http请求
方法 | 描述 |
---|---|
String getProtocol() | 返回请求协议的名称和版本。 |
String getMethod() | 返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。 |
String getRequestURI() | 从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该 请求的 URL 的一部分。 |
String getContextPath() | 返回指示请求上下文的请求 URI 部分。 |
String getQueryString() | 返回包含在路径后的请求 URL 中的查询字符串。 |
Enumeration getParameterNames() | 返回一个 String 对象的枚举,包含在该请求中包含的参数的名 称。 |
String getParameter(String name) | 以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。 |
String[] getParameterValues(String name) | 返回一个字符串对象的数组,包含所有给定的请求参数的值, 如果参数不存在则返回 null。 |
Enumeration getHeaderNames() | 返回一个枚举,包含在该请求中包含的所有的头名。 |
String getHeader(String name) | 以字符串形式返回指定的请求头的值。 |
String getCharacterEncoding() | 返回请求主体中使用的字符编码的名称。 |
String getContentType() | 返回请求主体的 MIME 类型,如果不知道类型则返回 null。 |
int getContentLength() | 以字节为单位返回请求主体的长度,并提供输入流,或者如果 长度未知则返回 -1。 |
InputStream getInputStream() | 用于读取请求的 body 内容. 返回一个 InputStream 对象. |
通过这些方法可以获取到一个请求中的各个方面信息
注意:当前拿到的HttpServletRequest是客户端发来的数据,服务器不应当修改,所以这些方法都是“读”方法,而非“写”方法
http请求传递参数有两种方式
①通过query string
②通过body(post)
下面介绍通过body传递参数的方式
a.通过form表单(body的格式是query string)
b.通过json(body的格式是json)
{
username:"zhangsan";
password:"123"
}
json本质上也是键值对
json支持嵌套,某个key的value也可以是另外一个value
{
key1:{
key2:{
key3:123
}
}
}
针对json格式的数据解析和构造,servlet自身不支持,需要引入第三方库(此处使用jackson)
①下载导入jackson到项目中
②使用jackson
一个类(ObjectMapper 对象映射器),两个方法(readValue writeVaule)
作用:把json字符串映射成java对象(read方法),把java对象映射成json字符串(write方法)
(网络传输中使用json字符串,java代码中使用java对象)
(服务器收到的请求是json字符串,需要把json字符串映射成java对象,再进行逻辑业务处理,处理完成后可能还需要把得到的java对象,映射回json字符串,并通过响应返回
Request request=objectMapper.readValue(req.getInputStream(),Request.class);
a.通过getInputStream获取到json字符串,再把这个流对象传给readValue
b.把json字符串解析成Map(键值对)
c.把Map转换成java对象
d.得到一个完整的Request对象
String respJson=objectMapper.writeValueAsString(response);
a.通过传入的参数,获取到类对象,通过反射拿到都有哪些属性
b.根据属性的名字拿到属性的值
c.把上述 属性名字 和 属性值 按照 json 格式构造成字符串
3.HttpServletResponse
方法 | 描述 |
---|---|
void setStatus(int sc) | 为该响应设置状态码。 |
void setHeader(String name, String value) | 设置一个带有给定的名称和值的 header. 如果 name 已经存在, 则覆盖旧的值. |
void addHeader(String name, String value) | 添加一个带有给定的名称和值的 header. 如果 name 已经存在, 不覆盖旧的值, 并列添加新的键值对 |
void setContentType(String type) | 设置被发送到客户端的响应的内容类型。 |
void setCharacterEncoding(String charset) | 设置被发送到客户端的响应的字符编码(MIME 字符集)例 如,UTF-8。 |
void sendRedirect(String location) | 使用指定的重定向位置 URL 发送临时重定向响应到客户端。 |
PrintWriter getWriter() | 用于往 body 中写入文本格式数据. |
OutputStream getOutputStream() | 用于往 body 中写入二进制格式数据. |
都是 set系列方法
resp.sendError(404,“这是一个错误页面“);
可以通过这个方法在页面上提示错误文章来源:https://www.toymoban.com/news/detail-860667.html
(状态码不友好,并不会在页面上直接显示)文章来源地址https://www.toymoban.com/news/detail-860667.html
到了这里,关于HttpServlet-HttpServletRequest-HttpServletResponse的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!