开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug..
- 掘金LV3用户 juejin.cn/user/bug..
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug..
- 华为云云享专家 bbs.huaweicloud.com/bug..
Servlet API详解
Servlet API有很多,我们只需要掌握HttpServlet/HttpServletRequset/HttpServletResponse这时个关键类中的核心方法即可!
HttpServlet
我们编写Servlet代码第一步就是继承HttpServlet类,并重写该类中的某些方法,处理请求!
核心方法:
| 方法名称 | 调用时机 |
|---|---|
| init | HttpServlet实例化后就调用 |
| destory | HttpServlet实例不再使用就调用该方法 |
| service | 收到Http请求就调用,为了匹配相应的处理请求方法 |
| doGet/doPost/doPut... | 收到匹配的请求时,由service方法调用对应的方法! |
而我们实际开发很少重写init/destory这些tomcat会帮我们调用!
我们主要任务还是处理对应请求,对不同方法请求,重写匹配的doXxx方法,处理不同的请求,返回对应的响应即可!
这些上述方法的调用时机,又称Servlert的生命周期!
这里的
init方法,当HttpServlet实例化后就会通过该方法进行初始化,然后生命周期结束就是在destroy方法调用后将HttpServlet实例化对象销毁!期间可能要处理不同方法请求,所以可能会多次调用service方法!
注意:
HttpServlet实例只是在程序启动后创建一次就好了,并不是每次收到http请求都创建实例!
上述这些方法我们都可以进行重写,从而设置某些特有的属性,当时我们很少这样做,我们最常用的就是重写处理请求的方法
doXXX!
代码示例
处理一个
Get请求
我们分别通过ajax和form表单进行构造!
- 基于
ajax
<!--引入jQuery-->
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
//构造请求
$.ajax({
type:'get',
url:'test', //不要加/表示绝对路径!
success: function(body){
console.log(body); //在浏览器控制台打印body信息!
},
error:function(){
console.log("请求失败");
}
});
</script>
注意:
这里的
url不用加/和servlet不同,而且这里的url就和我们的@WebServlet注释对应!
我们通过
ajax的方式用前端构造请求,记得将这个html文件放入到webapp目录下,通过访问这个网页就向服务器发送了一个get方式的请求!
然后这里
ajax通过回调的方式,如果请求成功,就会在控制台打印服务器给我们放回的body内容!
- 基于
form表单
我们通过form表单构造一个post请求!
<form action="test" method="post">
<input type="text" name="name">
<input type="password" name="password">
<input type="submit" name="post请求" value="post请求">
</form>
客户端:服务器
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("/test")
public class Test extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello world!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String nameValue = req.getParameter("name");
String passwordValue = req.getParameter("password");
resp.getWriter().write("name:"+nameValue+" password:"+passwordValue);
}
}
将响应输入到了浏览器上!