【Head First Servlets and JSP】笔记4:HttpServletRequest req

api:https://tomcat.apache.org/tomcat-5.5-doc/servletapi/

1、GET和POST除去数据大小之外的区别。

  • 安全性问题。使用GET的话,参数数据会出现在浏览器的输入栏之中。
  • 书签问题。GET请求可以建立书签,而POST不能。典型的例子为http://docs.oracle.com/javase/8/docs/api/,对于用户访问的每一个子页面,都没有书签(URL相同)。
  • GET不会对服务器产生任何改变,只是“访问”,而POST类似于UPDATE操作。
  • 非幂等(non-idempotent)请求。GET、PUT、HEAD是幂等的,执行很多次,不会有不好的副作用,POST是非幂等的,POST提交的数据可能造成不可逆转的后果。虽然GET在HTTP中是幂等的,但是可以人为的在servlet中实现一个非幂等的doGet方法。

2、确定浏览器发送的是GET还是POST。

  • 简单的超链接意味着GET。
  • 明确地写出method="post",那这就是一个POST,没有写出的话,默认为HTTP GET

3、如果想让一个servlet同时支持GET和POST,如果POST不提交任何东西,可以把doPost()实现委托给doGet()。

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
}        

【HttpServletRequest req】

4、从客户端发送一个参数并在服务端获取:

html表单 --> HTTPPOST: color=dark --> servlet: req.getParameter("color");

从客户端发送两个个参数并在服务端获取:

双选html表单 --> HTTPPOST: color=dark&body=heavy --> servlet: req.getParameter("color");servlet: req.getParameter("body");

【Head First Servlets and JSP】笔记4:HttpServletRequest req

5、除此之外还能从Request获取什么?

【Head First Servlets and JSP】笔记4:HttpServletRequest req

6、

【Head First Servlets and JSP】笔记4:HttpServletRequest req

getRemotePort()是相对于服务端而言的,所以获取的是客户端的端口。

getServerPort()获取的是接收请求的那个端口,getLocalPort则是指“请求最后发到的那个端口”(服务器会为每一个线程分配端口,这样才能应对多个用户)