Servlet学习
HttpServlet的继承关系:
Servlet <-- GenericServlet <-- HttpServlet
Http请求常用的4种字段类型:
GET (读取)
POST (保存)
PUT (修改)
DELETE (删除)
1. 官方提供的HttpServlet
@WebServlet("/test")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("GET");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("POST");
}
}
2. 为什么使用doGet、doPost,而不是直接用service方法?
首先, HttpServlet中的doGet和doPost方法是service方法的进一步处理。Servlet接口中一共5中方法,但实际开发中常用的只是service方法。因此需要进行一定的代码冗余处理。
Servlet接口中的5种方法:
public interface Servlet {
void init(javax.servlet.ServletConfig servletConfig) throws javax.servlet.ServletException;
javax.servlet.ServletConfig getServletConfig();
// 常用
void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException;
java.lang.String getServletInfo();
void destroy();
}
doGet和doPost方法的处理思路:
对service方法进行http字段判别即可:
自己写一个MyHttpServlet类, 继承关系如下:
service <-- MyGenericServlet <-- MyHttpServlet
MyGenericServlet实现Servlet接口;MyHttpServlet继承MyGenericServlet:
public class MyHttpServlet extends MyGenericServlet{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 判定 http 方法字段类型
String method = request.getMethod();
// 注意 http 方法字段全为大写
switch (method) {
case "GET":
this.doGet(request, response);
break;
case "POST":
this.doPost(request, response);
break;
}
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
// TO do
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException {
// TO do
}
}
官方
HttpServlet中doGet方法对rep使用的是HttpServletRequest类型, 而Servlet提供的是ServletRequest类型。 查看源码可知:HttpServletRequest又是ServletRequest的子类。所以将ServletRequest向下转为HttpServletRequest类型即可。
- 最后创建一个Servlet实例继承MyHttpServlet就能实现
doGet和doPost方法:
public class helloServlet extends MyHttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
res.getWriter().write("hello Get!");
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException {
res.getWriter().write("hello Post!");
}
}

浙公网安备 33010602011771号