HttpServlet
我们写 Servlet 代码的时候,首先第一步就是先创建类,继承自 HttpServlet,并重写其中的某些方法。我们实际开发的时候主要重写 doXXX 方法,很少会重写 init / destory / service。
因为这一些方法的调用时机,称为“Servlet生命周期”。Servlet生命周期可被定义为从创建直到毁灭的整个过程。具体的可以看该文章:Servlet生命周期http://t.csdnimg.cn/duZTC
通过Ajax来构造一个请求
我们先在WEBAPP目录下新建一个html文件。至于为什么要在这个目录下,这是tomcat规定的。不同的服务器有不同的规定。
先在html中引入一个jquery cdn的min版本的链接,再写ajax的部分。重新运行服务器就可以在控制台中看到这是一个get方法,并且通过修改type的值来修改运用的方法。
同时url就代表着路径,在这里是相对路径,也就是
这里同时也可以用绝对路径来表示。
HttpServletRequest
当 Tomcat 通过 Socket API 读取 HTTP 请求(字符串),并且按照 HTTP 协议的格式把字符串解析成 HttpServletRequest 对象。
通过stringBuilder来把结果的字符串拼接起来,可以看到每个方法的具体结果。
并且最后的querystring可以直接添加上去。
前端给后端传参
1.GET query string
在前端给后端传两个数字,一个是同学的studentid,一个是classid。
通过req.getParameter,query string键值对会自动被tomcat处理成形如Map这样的结构,后续就可以随时通过key来获取value了。
2.POST form
对于前端是form表单这样格式的数据,后端还是使用getParameter来获取。
在前端完成代码,抓包看看具体的样子,并且在浏览器中输入10和20:
raw中清楚地看到form表单形成的样子。
在后端代码中与前端代码形成关联,通过req.getParameter来获取到具体的信息,这样后端就获取到了前端的信息。
form表单的信息传到tomcat服务器,tomcat构造req和resp对象,form表单中解析出来的值就存在于req对象中,通过getParameter拿到其中的值,再通过resp空对象编写响应,写回到tomcat,tomcat发响应给浏览器显示出来。
3.POST json
json是一种非常主流的数据格式,也是键值对结构。前端可以使用ajax的方式来构造出这个内容,更简单的方法就是使用postman直接构造~
例如,现在想要组织一个body:
{
classId:20,
studentId:10
}
可以使用postman直接构造出来相关的请求。
后端:
@WebServlet("/postParameter")
public class Myservlet_demo1 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int length = req.getContentLength();//定义需要从前端获取到多少字节的数据
byte[] buffer = new byte[length]; //存到这样一个大小的数组中
InputStream inputStream = req.getInputStream();//通过inputStream来获取到req的内容
inputStream.read(buffer); //再通过read写到数组中
String body = new String(buffer,0,length,"utf8");
System.out.println("body = " + body);
resp.getWriter().write(body); //最后再把这个构成String,打印出来
}
}
最后打印出来,这样就拿到了前端的一段数据。
但是当前通过json传数据,服务器这边只是把整个body读出来,并没有按照键值对的方式来处理。使用第三方库如jackson就可以支持解析body的内容。
在maven仓库中找到Jackson
把这个xml片段粘贴到pom.xml中就可以引入这个依赖。
此时用objectMapper.readValue就可以从body中读取出json的字符串。
根据第二个参数类对象创建Student实例,然后解析上述的json格式的字符串,处理成map键值对结构。遍历所有的键值对,看看键的名字和Student实例的哪个属性名字匹配就把对应的value设置到该属性中。最后返回该Student实例。
本质上来说,三种方式前端给后端传参数都是一样的,以前通过get和form表单的写法很多,现在通过json格式的更常见。
HttpServletResponse
核心方法: