1.Servlet的含义
Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app。
Servlet 就是 Tomcat 这个 HTTP 服务器提供给 Java 的一组 API, 来完成构建动态页面这个任务。
2.Servlet 的生命周期。
生命周期即他每个阶段需要干的事情:
Servlet每个阶段的工作:
1.开始的时候,执行init;
2.每次收到请求,执行service;
3.销毁之前,执行destroy;
一个servlet程序,里面可以包含多个servlet,某个servlet的生死,不影响整个servlet的使用;
3.代码案例
3.1显示 HttpServletRequest 的常用属性
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("/showRequest")
public class showRequest extends HttpServlet {
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//搞个StringBuilder,把这些api的结果,统一写回到响应中StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(req.getProtocol());
stringBuilder.append(req.getMethod());
stringBuilder.append(req.getRequestURI());
stringBuilder.append(req.getContextPath());
stringBuilder.append(req.getQueryString());
resp.getWriter().write(stringBuilder.toString());
}
}
3.2 获取GET请求中的query string 的内容
请求形如 /message?aa=10&bb=20
在Servlet 代码中获取到 aa 和 bb 的值, 并显示在页面上
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("/message")
public class GetString extends HttpServlet {
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String aa = req.getParameter("aa");
String bb = req.getParameter("bb");
resp.setContentType("text/html");
resp.getWriter().write("aa = "+aa+" bb = "+bb);
}
}
3.3获取 POST 请求中 body 的内容
分别实现这两种 body 格式的处理:
- aa=10&bb=20
- { “aa”: 10, “bb”:20}
把 aa 和 bb 的值获取到, 展示到页面上.
第一种:
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("/message")
public class GetString extends HttpServlet {
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String aa = req.getParameter("aa");
String bb = req.getParameter("bb");
resp.setContentType("text/html");
resp.getWriter().write("aa = "+aa+" classId = "+bb);
}
}
Document
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;
import java.io.InputStream;
@WebServlet("/message2")
public class PostJson extends HttpServlet {
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//super.doPost(req, resp);//通过这个方法来处理body为json格式的数据//直接吧req对象里 body 完整的读取出来//getInputStream//在流对象中读多少个字节,取决于Content-length
int length = req.getContentLength();
byte[] buffer = new byte[length];
InputStream inputStream = req.getInputStream();
inputStream.read(buffer);
//把这个字节数组构造成String,打印出来String body = new String(buffer,0,length,"utf8");
System.out.println("body = "+body);
//设置返回值的格式类型html
resp.setContentType("text/html");
resp.getWriter().write(body);
}
}
使用postman构造post模拟请求:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net