Servlet API
创始人
2025-05-29 21:01:00
0

文章目录

    • HttpServlet
    • HttpServletRequest
    • HttpServletResponse

Servlet的主要功能就是处理请求,为了便于程序员进行处理请求这一操作,我们引入了Servlet的API,本篇文章就主要来介绍有关于Servlet的API的知识。

Servlet的API中包含了许多内容,但我们主要就下面三个类来学习:

HttpServlet

前面我们在编写第一个Servlet程序时,就使用到了这个类,下面罗列出的是该类中常用的方法:
在这里插入图片描述
在实际开发中,更多情况下,我们是重写doxxx方法,下面就使用代码简单演示这些方法的使用:
首先使用url构造get请求:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/HttpServlet")
public class ServletDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("doGet!");}
}

在这里插入图片描述
post请求的构造除了可以通过form表单来实现以外,还有其他的构造方式,这里我们首先使用ajax的方式来构造:
在webapp目录下创建html文件(必须在此路径下,否则会出现404错误),写入下面代码:



Document

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/HttpServlet")
public class ServletDemo2 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("doPost");}@Overrideprotected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("doPut");}@Overrideprotected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("doDelete");}
}

运行结果:
请添加图片描述
使用ajax构造请求的方法固然可行,但也略显繁琐,下面我们尝试借助第三方工具来更加方便快捷地构造请求;

PostMan是一个常用的用于构造http请求的工具,我们可以直接通过官网来下载,官网地址https://www.postman.com/

安装完成以后打开界面如下:
在这里插入图片描述
通过选择界面左边不同的方法,就可以使用postman就可以轻松构造各种请求了
在这里插入图片描述
HttpServlet这个类主要就是涉及到上面几个方法的应用,下面是有关于HttpServlet的生命周期;
HttpServlet的生命周期,实际也就是在于在什么样的时机调用什么样的方法,具体的解答如下:

首次使用,调用init方法,生命周期的开始;
每次收到请求,调用service方法,在service方法内部根据请求的具体方法来决定调用哪一个doxxx方法;
调用destroy方法销毁对象,生命周期的结束;

HttpServletRequest

HttpServletRequest主要就是封装了http请求的对象,
它会按照http协议将http请求进行解析,下面是它的常见方法;
在这里插入图片描述

简单使用代码演示上面方法的使用:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/HttpServletRequest")
public class ServletDemo3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//指定字符的编码方式resp.setContentType("text/html;charset=utf-8");resp.getWriter().write("你好!"+" ");//返回请求的名称和版本号resp.getWriter().write(req.getProtocol()+" ");//返回请求的http方法的名称resp.getWriter().write(req.getMethod()+" ");//资源定位符resp.getWriter().write(req.getRequestURI()+" ");//请求上下文的URI部分resp.getWriter().write(req.getContextPath()+" ");//返回路径后的请求URL中的查询字符串,没有就返回nullresp.getWriter().write(req.getQueryString()+" ");//返回请求主体中使用的字符编码的名称resp.getWriter().write(req.getCharacterEncoding()+" ");}
}

运行结果:
在这里插入图片描述
我们可以使用Fidder抓包工具来查验我们代码的运行结果与实际情况:
请求部分:
在这里插入图片描述

响应部分:
在这里插入图片描述
由于GET请求中的参数一般是通过query string来传递给服务器的,下面我们尝试使用代码来获取GET请求中的参数:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/queryString")
public class QueryString extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");String id=req.getParameter("id");String num=req.getParameter("num");resp.getWriter().write("id="+id+" num="+num);}
}

此时使用浏览器构造URL请求时,需要在路径后面手动为我们代码中的参数设置值(在未设置的情况下默认返回null),下面是运行结果:
在这里插入图片描述
如果是post请求,就可以通过body向服务器传参,而body中的数据格式有多种定义方式,像from表单、JSON格式、或使用第三方库等;
下面首先是使用from表单进行构造:
首先是后端代码:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/PostFrom")
public class PostParameter extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");String id=req.getParameter("id");String num=req.getParameter("num");resp.getWriter().write("id="+id+" num="+num);}
}

构造的from表单必须在webapp目录下:



, initial-scale=1.0">Document

运行结果:
在这里插入图片描述
点击提交之后跳转到如下界面:
在这里插入图片描述
在构造from表单时,需要注意:

action部分必须与后端注解中的内容保持一致,否则会出现404错误;
method部分必须与后端重写的方法一致;
name部分的key必须与后端的设置一致;
前后端的约定必须遵守,只有两者相互配合,代码才可以正常运行;

抓包结果如下:
请求部分:
在这里插入图片描述
响应部分;
在这里插入图片描述

除了使用上面表单的方式来构造,我们还可以使用json格式来构造post请求,这里的构造方式的选择也有多种,像使用ajax构造,当然也可以使用第三方工具Postman来构造,这里我们通过第三方库来进行这一操作,当然,提供JSON处理的第三方库也有多种,我们选择jackson即可;

jackson的下载依然是使用Maven中央仓库https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind来完成,这里的版本可以任意选择;

在这里插入图片描述

同样是放在标签 < dependencies>< /dependencies>中,首次下载时标红属于正常现象,点击刷新按钮下载即可;
在这里插入图片描述

然后我们就可以借助jackson中的方法来直接处理json格式的请求了:

import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;//首先需要构造一个类,这里类的属性的名字必须与json中的key保持一致
class Student{//这里的属性必须是public或提供公开的getter方法public int id;public int num;
}
@WebServlet("/JsonServlet")
public class JsonServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//使用该对象从请求的body中进行读取,并解析ObjectMapper objectMapper=new ObjectMapper();//通过使用readValue()方法把json字符串转为java 对象Student student=objectMapper.readValue(req.getInputStream(),Student.class);resp.getWriter().write(student.id+" "+student.num);}
}

readValue()方法把json字符串转为java 对象,这里第一个参数是一个String或者InputStream,第二个参数是转换的结果对应的java对象;
writeValue()方法是把java对象转成json字符串;

HttpServletResponse

HttpServletResponse对象主要就是接收来自服务器的响应数据,其核心方法主要有下面这些:

在这里插入图片描述
简单使用代码来演示重点方法的实现:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/status")
public class ServletDemo4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//手动设置状态码resp.setStatus(405);}
}

设置结果:
在这里插入图片描述
通过设置http响应报头中的Refresh字段,实现自动刷新操作:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/refresh")
public class RefreshServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setHeader("Refresh","1");resp.getWriter().write(System.currentTimeMillis()+"");}
}

重定向实现,自动跳转到新页面:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/redirect")
public class RedirectServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendRedirect("http://www.baidu.com");}
}

具体的代码运行结果大家可以自行尝试;

至此,servlet相关的重点3个API就介绍完毕了啦~

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...