当前位置: 首页 > news >正文

详解Servlet API

目录

HttpServlet

核心方法 

代码示例【处理Get请求】:

代码示例【处理Post请求】:

HttpServerRequest

核心方法

代码示例:【打印请求头信息】

HttpServletResponse

核心方法

代码示例【设置状态码】:

代码示例【重定向】:

代码示例【设置刷新周期】:


HttpServlet

我们写 Servlet 代码的时候, 首先第一步就是先创建类, 继承自 HttpServlet, 并重写其中的某些方法.

核心方法 

这些方法的调用时机, 就称为 "Servlet 生命周期". (也就是描述了一个 Servlet 实例从生到死的过
程).

代码示例【处理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("/getParameter")
public class GetParameterServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");System.out.println("username=" + username);System.out.println("password=" + password);resp.getWriter().write("ok");}
}

运行结果:

代码示例【处理Post请求】:
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("/postParameter")
public class PostParameterServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");System.out.println("username=" + username);System.out.println("password=" + password);resp.getWriter().write("ok");}
}

运行结果: 

HttpServerRequest

当 Tomcat 通过 Socket API 读取 HTTP 请求(字符串), 并且按照 HTTP 协议的格式把字符串解析成
HttpServletRequest 对象.

核心方法
方法描述
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 对象

代码示例:【打印请求头信息】
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;
import java.util.Enumeration;@WebServlet("/show")
public class ShowRequestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(req.getProtocol());stringBuilder.append("<br>");stringBuilder.append(req.getMethod());stringBuilder.append("<br>");stringBuilder.append(req.getRequestURI());stringBuilder.append("<br>");stringBuilder.append(req.getContextPath());stringBuilder.append("<br>");stringBuilder.append(req.getQueryString());stringBuilder.append("<br>");// 获取所有的 header.Enumeration<String> headerNames = req.getHeaderNames();while (headerNames.hasMoreElements()) {String key = headerNames.nextElement();String value = req.getHeader(key);stringBuilder.append(key + ": " + value + "<br>");}resp.setContentType("text/html; charset=utf8");resp.getWriter().write(stringBuilder.toString());}
}

运行结果:

HttpServletResponse

Servlet 中的 doXXX 方法的目的就是根据请求计算得到相应, 然后把响应的数据设置到
HttpServletResponse 对象中. 
然后 Tomcat 就会把这个 HttpServletResponse 对象按照 HTTP 协议的格式, 转成一个字符串, 并通过Socket 写回给浏览器.

核心方法
方法描述
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 中写入二进制格式数据 .

代码示例【设置状态码】:
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 StatusServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.sendError(404, "这个页面是一个错误页面");}
}

运行结果:

代码示例【重定向】:
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("https://www.sogou.com");}
}

运行结果:

代码示例【设置刷新周期】:
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());}
}

通过fiddler抓包:


http://www.mrgr.cn/news/70228.html

相关文章:

  • 【Hadoop实训】Hive 数据操作②
  • gitlab角色、权限
  • 时序预测 | 改进图卷积+informer时间序列预测,pytorch架构
  • Linux(CentOS)安装 Nginx
  • Webpack 1.13.2 执行 shell 命令解决 打印时没有背景色和文字颜色的问题
  • python printf中文乱码
  • MySQL引擎事务锁冲突分析
  • 互联网摸鱼日报(2024-11-11)
  • 多线程进阶
  • VUE3实现好看的通用网站源码模板
  • 一、HTML学习(基础知识学习)
  • goframe开发一个企业网站 验证码17
  • 【智慧出行】微信小程序智慧旅游服务平台,轻松规划旅程
  • 东胜物流软件AttributeAdapter.aspx存在SQL注入漏洞
  • [DEBUG]AttributeError: module ‘numpy‘ has no attribute ‘bool‘?
  • Scott Brinker:科技巨头裁员?大公司都在积极招聘Martech人才
  • JVM学习之路(5)垃圾回收
  • 大数据-218 Prometheus 插件 exporter 与 pushgateway 配置使用 监控服务 使用场景
  • HyperWorks进阶教程:OptiStruct材料和分析类型
  • 个人图书馆
  • 【A+B】
  • hive分区表
  • 学习threejs,导入STL格式的模型
  • 美国All氧气传感器PSR-12-223在厌氧培养箱微量氧监控的应用
  • 浅谈PostGIS中的抽稀技术——实现高效空间数据可视化的关键
  • 计算机毕业设计 | springboot+vue汽车修理管理系统 汽修厂系统(附源码)