Servlet API 详解
主要三个:
1.HttpServlet
2.HttpServletRequest
3.HttpServletResponse
1.HttpServlet
方法名称 | 调用时机 |
init | 在 HttpServlet 实例化之后被调用一次 |
destroy | 在 HttpServlet 实例不再使用的时候调用一次 |
service | 收到 HTTP 请求的时候调用 |
doGet | 收到 GET 请求的时候调用(由 service 方法调用) |
doPost | 收到 POST 请求的时候调用(由 service 方法调用) |
doPut/doDelete/doOptions/... | 收到其他请求的时候调用(由 service 方法调用) |
- Init 创建HttpServlet实例会调用一次, 首次被访问会被实例化, 作用就是用来初始化 --- 就很像懒汉模式
- Destroy 不一定真的调用到,tomcat关闭,则不再调用HttpServlet
- Service tomcat收到请求,实际先调用service,再在service里根据方法,调用不同doXXX,实际很重少写service,直接重写doXXX
谈谈Servlet的生命周期
- 当一个请求从HTTP服务器转发给Servlet容器时,容器检查对应的Servlet是否创建,没有创建就实例化该Servlet,并调用init()方法,init()方法只调用一次,之后的请求都从第二步开始执行;
- 请求进入service()方法,根据请求类型转发给对应的方法处理,如doGet, doPost, 等等
- 容器停止前,调用destory()方法,进行清理操作,该方法只调用一次,随后JVM回收资源
2.HttpServletRequest
方法 | 描述 |
String getProtocol() | 返回请求协议的名称和版本。 |
String getMethod() | 返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。 |
String getRequestURI() | 返回该请求的 URL 的一部分。 |
String getContextPath() | 返回指示请求上下文的请求 URI 部分。 |
String getQueryString() | 返回包含在路径后的请求 URL 中的查询字符串。 |
Enumeration getParameterNames() | 返回一个 String 对象的枚举,包含在该请求中包含的参数的名 |
String getParameter(String name) | 以字符串形式返回请求参数的值,或者如果参数不存在则返回 |
String[] getParameterValues(String name) | 返回一个字符串对象的数组,包含所有给定的请求参数的值, |
Enumeration getHeaderNames() | 返回一个枚举,包含在该请求中包含的所有的头名 |
String getHeader(String name) | 以字符串形式返回指定的请求头的值。 |
String getCharacterEncoding() | 返回请求主体中使用的字符编码的名称。 |
String getContentType() | 返回请求主体的 MIME 类型,如果不知道类型则返回 null。 |
int getContentLength() | 以字节为单位返回请求主体的长度,并提供输入流,或者如果 |
InputStream getInputStream() | 用于读取请求的 body 内容. 返回一个 InputStream 对象 |
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) | 设置被发送到客户端的响应的字符编码 |
void sendRedirect(String location) | 使用指定的重定向位置 URL 发送临时重定向响应到客户端。 |
PrintWriter getWriter() | 用于往 body 中写入文本格式数据. |
OutputStream getOutputStream() | 用于往 body 中写入二进制格式数据. |
后两个 -> http响应是什么样的数据(显示在浏览器上的)
一个表白墙~~~
唉芝士的融合后很好吃,就是有点难融合
1 首先, 介绍一下功能~
- 你发送消息,谁,对谁,说什么 (比如: 小明 小芳 爱你)
- 这个表白墙是用来 提交 谁对谁 说了什么 并且把数据保留(上一次发的数据,再次打开这个界面能显示)~
2. 实现什么,交互:
- 当前端发送了消息点击了’提交’, 数据一定要发一份给服务器
- 再打开这个页面, 要从服务器获取到之前的信息
3. 探讨细节:
发送给服务器的
- 我们用post方法(里面有body)
- Content-Type 用json
- 数据的格式
- 响应返回200
获取数据的
- 用get方法
- 响应
- 格式
4. okk我们看图
就这些+数据库的JDBC 大功告成