可以知道我们在重写doget方法时,里面有HttpServletRequest request,点进HttpServletRequest发现他只是一个接口并且继承了ServletRequest
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
public interface HttpServletRequest extends ServletRequest{}
并且发现ServletRequest也是一个接口,但是他上面没有父接口了
public interface ServletRequest{}
我们发现在doget方法下面可以直接使用request来调用很多方法,所以
肯定是谁实现类并且创建了对象。
所以做一个测试,我们输出request,
发现这个实现了org.apache.catalina.connector.RequestFacade 实现了HttpServletRequest接口,
public class RequestFacade implements HttpServletRequest {}
说明tomcat服务器实现了这个HttpServletRequest接口,说明tomat服务器实现了Servlet规范。具体了解就OK。所以我们只需要面向接口去调方法就好了
根据之前我们在博客中提到的HTTP的请求协议,实际上就是用户在发送请求的时候,遵循了HTTP协议,发送的是HTTP的请求协议,Tomcat服务器将HTTP协议中的信息以及数据全部解析出来,然后服务器会把这些信息封装到 HttpServletRequest 对象中,传给javaweb程序员
注意:对于request对象生命周期,用户一次请求对应一个request和response对象,用户第二次请求的时候这两个对象就不是之前的那个了,两次请求则对应两个对象
ServletRequest接口中常用的方法
Map<String, String[]> getParameterMap();
Enumeration<String> getParameterNames();
String[] getParameterValues(String var1);
String getParameter(String var1);
首先我们可以看看ServletRequest里面的方法,这四个方法是获取前端浏览器用户提交数据很重要的方法。我们一般前端提交数据之后,举个例子
前段提交的数据格式:username=zjx&userpwd=123&aihao=eat&aihao=sleep
对于这种我们可以采用Map集合来存储,Map<String String>,key存储String,value来存储第二个
但是我们知道这里:key(userpwd) value(123)
key(username) value(zjx)
key(aihao) value(eat)
key(aihao) value(sleep)
这样会发现当key重复的时候value会覆盖,所以我们采用Map<String String[]>
Map<String, String[]> getParameterMap(); (获取Map)
Enumeration<String> getParameterNames(); (获取key)
String[] getParameterValues(String var1); (通过String key来获取value)
String getParameter(String var1); 这个是最常用的方法,方便我们开发,我们知道大部分数组只有一个元素,那么可以提供这个方法通过key来获取一个value,而这个value不是一个数组,是一个元素。
通过以上四个函数我们也可以看出,前端表单提交数据的时候,如果提交的是数字,那么其实是以“120”字符串的方式发出的,那么服务器端获取的一定是字符串。